【问题标题】:Access relationships访问关系
【发布时间】:2013-04-16 14:24:22
【问题描述】:

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

表格排列:

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

相关表:

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

所以在表格中ID_supIDsuppliersupplier 相同。 Tables 仅包含来自表 Related table 的少数供应商。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 戈德,非常感谢您的回答 - 现在更清楚了。我在这个领域绝对是新手,很抱歉我的问题。现在,当我将 ID 连接到 ID 供应商时,它就可以工作了。但是第一个 ID 是自动编号,所以会有任何编号。我希望 ID_sup - ID 之间有连接,但它不起作用。能给我解释一下吗?
    • @astrak [Suppliers] 表中的ID AutoNumber 字段也需要指定为该表的Primary Key。是你做的吗? (当您在设计视图中查看表格时,该字段旁边应该有一个小“钥匙”图标。)
    • 是的 - 我有。我终于解决了。所以再次非常感谢你!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2023-02-02
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多