1

我有很多表的数据库。数据库中的几个与另一个相关。

餐桌布置:

ID (automatic number with primary key), ID_sup (number), supplier (text), ...

相关表格:

ID (number with primary key), supplier (text), address (text), ...

所以在表中ID_supIDsupplier与相同supplier。Tables 仅包含来自该表的少数供应商Related table

我试图将它与 Enforce Referential Integrity + Cascade Updated 相关字段连接起来,但它不起作用。

我也尝试过更改数据类型和主键,但我总是收到以下错误消息:

  1. 未找到链接主表字段的任何唯一索引。
  2. 关系必须位于具有相同数据类型的相同数量的字段上。(错误 3368)
4

2 回答 2

1

在我看来,您希望供应商的名称在多个表中重复(或“非规范化”),并且如果在另一个表中更改名称,则关系会自动更新一个表中的名称。然而,关系并不(通常)那样工作。

相反,您将供应商的名称(和其他供应商特定的详细信息)仅保留在 [Suppliers] 表中,然后通过 SupplierID 在其他表中引用供应商。这称为“规范化数据”。

现在,如果您想让供应商的名称出现在关于 [Orders] 的查询(或报告等)中,那么您可以在查询中将 [Orders] 表与 [Suppliers] 表连接起来,如下所示:

SELECT Orders.OrderID, Orders.OrderDate, Suppliers.SupplierName
FROM Orders INNER JOIN Suppliers ON Orders.SupplierID = Suppliers.SupplierID

您仍然可以使用关系来强制执行参照完整性(即,确保每个订单都引用一个有效的供应商),但您使用 SupplierID 而不是其他任何东西来执行此操作。

于 2013-04-16T15:12:54.110 回答
0

您想要创建从 Table2.ID 到 Table1.ID_sup 的一对多关系。在 MS Access“编辑关系”窗口中,Table2.ID 位于左侧,Table1.ID_sup 位于右侧。MS Access 使用无穷大符号来表示关系的“多”方。

于 2013-04-16T15:12:18.933 回答