【问题标题】:Access table relationships访问表关系
【发布时间】:2012-12-26 17:48:52
【问题描述】:

我正在建立一个关键的库存管理数据库。我有 5 个表,我相信我必须在它们之间创建关系以强制执行参照完整性。

这是我的问题或我感到困惑的地方:在 KEYS 表中,我使用了循环向导并选择了 ROOM 属性(因此在插入新密钥时,您会看到房间名称而不是房间 ID),但是我如何将 ROOM_ID (来自 ROOM 表)连接到 ROOM (来自 KEYS )。它们不是完全相同的属性,这会在保持完整性问题时给我带来问题吗?

这就是我的桌子的样子。如果我将属性更改为 ROOM_ID(因此链接它们是有意义的),那么该表将只有一堆 id 编号,这意味着很少。

此外,在设置关系时,始终选择 CASCADE Delete and Update 是否是个好主意。实用吗。谢谢你。

【问题讨论】:

    标签: database ms-access database-design foreign-keys entity-relationship


    【解决方案1】:

    (1) 你想通过 RoomID 来做。当您在表格视图中查看它时,它可能没有任何意义,但用户可能会以您会查找以显示房间名称的形式使用它。但是,如果用户将使用表格视图,您始终可以使用带有两列下拉列表的查找字段来显示房间名称,但存储 ID。

    (2) 级联更新和删除。我们不能告诉你。这取决于您是否希望在应用程序中发生级联更新和删除。没有通用的答案。

    【讨论】:

    • @Batman 您的设计有很多问题,其中最重要的是您将数字存储在文本数据类型中,这导致了许多不是特别有用的问题。如上所示,带有数字数据的文本 KEY_ID 是一个非常糟糕的主意。除了自动编号之外的任何 ID 都需要一些理由。
    【解决方案2】:

    首先,我认为您应该为表和列遵循一些常见的命名/样式约定。例如,很难区分 ROOM_ID 是否引用 KEY_ID,反之亦然。

    如果表和列是:
    ROOM.id (PK)、ROOM.room。
    KEY.id (PK), KEY.room_id (FK), KEY.drawer, KEY.notes

    假设一个房间可以有多个钥匙,会有唯一的 KEY.id 但相同的 KEY.room_id。

    要回答关于列是否不是同一个属性的问题,在两个表之间建立关系涉及到连贯地相互引用的能力,所以我相信这会是一个问题。如果您需要设置更多信息,则可以添加另一列。

    您可以在此网站上阅读有关约定的更多信息:Here

    关于 CASCADE 删除和更新,这取决于您打算使用数据库的方式。 例如,如果您要删除 SIGNIN,那么我认为您也不想级联和删除 USER。

    【讨论】:

    • Room_ID 没有引用 Key_ID。它附加到房间(在钥匙表中)。但是当有人在看 KEY 表时,我更希望他们看到房间名称,而不仅仅是对他们毫无意义的数字。这是可行的还是我应该使用连接/查询/报告来解决这个问题?
    • 对不起,我的解释不是很好,关于混淆列名,但这不是一个真正的问题。使用联接/查询将是获取所需信息的最佳方法。
    • 我很担心,因为我计划使用带有子表单的表格,它们最终会准确显示表格中的内容,因此数字不会提供任何相关信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多