DataSet中DataRelation的用途是什么?

时间:2009-08-26 00:50:16

标签: c# sql ms-access dataset datarelation

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

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

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

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

4 个答案:

答案 0 :(得分:1)

DataRelations用于:

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

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

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

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

DataRelations也可以在Windows窗体绑定系统中使用

答案 1 :(得分:0)

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

许多DB在设置关系时也会进行级联更新和删除。当您更新/删除父级时,它们将自动更新和/或删除子关系。

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

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

以下是关于以下内容的更多信息: http://www.deeptraining.com/litwin/dbdesign/FundamentalsOfRelationalDatabaseDesign.aspx

以下是使用DataRelation在使用DataSet时帮助处理代码中父/子关系的教程:

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

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

答案 2 :(得分:0)

有时,即使您尚未创建关系,查询设计器中的Access也会自动将两个表的字段连接在一起,如果它们是相同的名称(ID)。

答案 3 :(得分:0)

在我看来,您在数据库引擎级别上的参照完整性与Access UI的一个很好的功能相混淆。

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

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

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

  

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

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

另请注意,如果您在保存的QueryDef中使用别名字段,则可能会丢失两种类型的自动连接。在我看来,这在最近的Access版本中已经发生了变化,但我没有时间对其进行实际检查。