【问题标题】:What is the purpose of a DataRelation in a DataSet?DataSet 中 DataRelation 的用途是什么?
【发布时间】:2010-11-22 20:10:34
【问题描述】:

我正在处理的 C# 程序需要将数据导出到一个或多个数据表。这些表的某些列将相互关联,这样一个表的 ID 列可能会被另一个表的单元格引用。这似乎是设置 DataRelation 的常见情况。但我试图了解这些关系以后如何实际使用。

我对关系数据库有一点经验,但并不多。我了解 SQL 查询和左连接、右连接等内容。我在 Access 中做了一些工作,使用 GUI 和手动创建查询。但我从未在数据库本身中创建任何关系。我在一分钟前在 Access 中尝试过这个。创建关系后,我尝试将我的两个测试表添加到查询中,并且自动创建了连接。

但是,当我实际查看实际 SQL 时,它实际上包含了一个从关系派生的 JOIN 命令。但这也意味着查询根本不依赖于关系。在没有像 Access 这样的拖放式查询编辑器的数据库中如何使用关系?

我想在数据库中创建关系或在 DataSet 中创建 DataRelation 的唯一原因是否是为了暗示应该存在哪些关系但不一定强制它们?

【问题讨论】:

    标签: c# sql ms-access dataset datarelation


    【解决方案1】:

    在我看来,您将数据库引擎级别的引用完整性与 Access UI 的一个不错的功能混淆了。

    正如其他人所解释的,关系是关于数据的,而不是关于您在关系设计器中获得的漂亮实体关系图,也不是关于 Access 查询网格中的易用性。关系将一个表中字段中的值限制为从不同表的列中提取的值。

    当您添加两个在它们之间定义了 RI 的表时,您在查询网格中得到的行是 Access 足以为您绘制默认关系的结果。

    默认情况下,Access 还使用“AutoJoin”来猜测关系,该设置可以在 TOOLS | 中进行控制。选项 |表格/查询。这是什么解释:

    选择自动创建一个 您添加的两个表之间的内部联接 到设计网格。如果你想清除 定义之间的关系 自己表。对于自动加入 发生时,表必须每个都有一个 具有相同名称和数据类型的字段 并且其中一个连接字段必须是 主键。

    在这种情况下,即使没有定义任何关系,您也可以获得自动连接线。

    另外,请注意,如果您在保存的 QueryDef 中为字段设置别名,则可能会丢失这两种自动连接。在我看来,这在最近的 Access 版本中有所改变,但我没有时间实际检查。

    【讨论】:

      【解决方案2】:

      有时,即使您没有创建关系,查询设计器中的 Access 也会自动将两个表的字段同名 (ID) 连接在一起。

      【讨论】:

        【解决方案3】:

        DataRelations 用于:

        • 强制引用完整性(不能引用父表中不存在的行)
        • 通过关系导航,例如获取关系的子行或父行:

          DataRow[] orderRows = customerRow.GetChildRows("Customers_Orders");

        • 使用引用父行或子行的表达式创建计算列

          OrderTotalColumn.Expression = "Sum(Child(Orders_OrderDetails).Quantity * Child(Orders_OrderDetails).UnitPrice)";

        DataRelations 也用于 Windows 窗体绑定系统

        【讨论】:

          【解决方案4】:

          其实恰恰相反。在表之间建立关系有助于强制执行它们。如果您设置了外键关系并尝试将数据插入表中并且不包含外键,那么数据库将阻止您。

          当您设置关系时,许多数据库也有级联更新和删除。当您更新/删除父关系时,它们会自动更新和/或删除子关系。

          DataRelation 的工作方式类似,因为它有助于在代码级别强制执行关系......

          这里是一些数据库设计基础知识的链接: http://www.sqlteam.com/article/database-design-and-modeling-fundamentals。 #4、5、6 和 7 谈论关系。

          还有一个关于更多信息的信息: http://www.deeptraining.com/litwin/dbdesign/FundamentalsOfRelationalDatabaseDesign.aspx

          这是一个关于在使用 DataSet 时使用 DataRelation 来帮助处理代码中的父/子关系的教程:

          http://www.dotnetjohn.com/articles.aspx?articleid=63

          这是 DataRelation 的 MSDN: http://msdn.microsoft.com/en-us/library/system.data.datarelation(VS.80).aspx

          【讨论】:

            猜你喜欢
            • 2012-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-27
            • 2011-12-17
            相关资源
            最近更新 更多