0

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

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

在此处输入图像描述

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

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

4

2 回答 2

1

首先,我认为您应该为表和列遵循一些常见的命名/样式约定。例如,很难区分 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。

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

您可以在此网站上阅读有关公约的更多信息:这里

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

于 2013-01-12T04:51:41.767 回答
1

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

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

于 2013-01-12T05:42:02.510 回答