2

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

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

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

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

4

4 回答 4

1

DataRelations are used to :

  • Enforce referential integrity (you can't reference a row that doesn't exist in the parent table)
  • Navigate through relations, for instance obtain the child rows or parent row of a relation :

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

  • Create calculated columns with expressions that reference the parent or child rows

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

DataRelations are also used also in the Windows Forms binding system

于 2009-08-26T01:04:43.233 回答
0

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

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

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

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

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

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

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

于 2009-08-28T02:08:46.957 回答
0

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

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

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

于 2009-08-26T00:54:40.433 回答
0

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

于 2009-08-26T19:56:12.467 回答