访问关系

时间:2013-04-16 14:24:23

标签: ms-access foreign-keys relational-database primary-key

我有很多表的数据库。数据库中的几个与其他人相关。

表格的安排:

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

相关表格:

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

因此,表格中ID_supID相同,suppliersupplier相同。表格仅包含表Related table中的少数供应商。

我尝试将其与强制参照完整性+级联更新相关字段连接,但它不起作用。

我也试图更改数据类型和主键,但我总是有这些错误消息:

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

2 个答案:

答案 0 :(得分:1)

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

相反,您将供应商的名称(以及其他供应商特定的详细信息)保存在 [供应商]表中,然后通过SupplierID 仅参考其他表格中的供应商/ em>的。这称为“规范化数据”。​​

现在,如果您希望将供应商的名称显示在有关[订单]的查询(或报告等)中,那么您可以在查询中使用[供应商]表加入[订单]表,如下所示:

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

您仍然可以使用关系来强制执行参照完整性(即,确保每个订单都指向一个有效的供应商),但是您只需使用 供应商ID即可。

答案 1 :(得分:0)

您希望创建从Table2.ID到Table1.ID_sup的一对多关系。在MS Access"编辑关系"窗口,Table2.ID在左侧,Table1.ID_sup在右侧。 MS Access使用无穷大符号来表示"许多"关系的一面。