我正在建立一个关键的库存管理数据库。我有5个表,我相信我必须在它们之间建立关系以强制引用完整性。
这是我的问题或我感到困惑的地方:在KEYS表中,我使用了循环向导和选择的ROOM属性(因此在插入新密钥时,您会看到房间名称而不是房间ID),但是我如何将ROOM_ID(从ROOM表)连接到ROOM(来自KEYS)。它们的属性并不完全相同,这会在保持完整性问题时给我带来问题吗?
这就是我的表格。如果我将属性更改为ROOM_ID(因此链接它们是有意义的)那么这个表只会有一堆id值,这意味着很少。
此外,在设置关系时,始终选择CASCADE删除和更新是一个好主意。这是否实用?谢谢。
答案 0 :(得分: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是相同的。
要回答有关列是否属于同一属性的问题,在两个表之间建立关系涉及相互引用彼此的能力,因此我认为这将是一个问题。如果您需要设置更多信息,可以添加另一列。
您可以在此网站上阅读有关约定的更多信息:Here
关于CASCADE删除和更新,它取决于您打算使用数据库的方式。 例如,如果您要删除SIGNIN,那么我认为您不想级联和删除USER。
答案 1 :(得分:1)
(1)你想通过RoomID来做。当您在表格视图中查看它时,它可能没有任何意义,但用户可能会在您执行查找以显示房间名称的表单中使用它。但是,如果用户将使用表格视图,您可以始终使用带有两列下拉列表的查阅字段来显示房间名称,但会存储该ID。
(2)级联更新和删除。我们不能告诉你。这取决于您是否希望在应用程序中进行级联更新和删除。没有普遍的答案。