3

关于数据库设计的快速问题!在这个例子中,有用户和时间表。每个用户可以有许多日程表,每个日程表可以属于许多用户。

我有两个表,“user”和“schedule”,每个表都有一个唯一的标识符/主键(user_id 和 schedule_id):这些表具有多对多的关系。

这是我不确定/缺乏经验的地方:为了将它们连接在一起并遵守良好的数据库设计,我想创建一个包含两列 user_id 和 schedule_id 的链接表。我计划制作这两个主键(因此是复合键)。但是,我是否还添加了两个外键,一个在 user_id 上链接到 'user' 表,一个在 schedule_id 上链接到 'schedule' 表?

TLDR:我计划在连接两个表的 2 列“链接”表中使用复合键。我应该/是否还需要将它们变成外键?

4

1 回答 1

3

PK 和 FK 有不同的用途。在链接表中,您需要 PK 来保持数据的唯一性。但是,如果您不同时创建 FK,那么您最终可能会遇到数据完整性问题,因为 ID 可能会从原始表而不是链接表中删除。

有时人们认为他们可以在没有 FK 的情况下逃脱,因为他们将通过应用程序强制执行数据完整性。这几乎总是因为当约束不允许他们做他们想做的事情时,他们会觉得很烦人。当然,这是约束的目的,防止用户和开发人员做他们不应该做的事情。必须通过数据库保持数据完整性;冒险让应用程序处理它太重要了。我已经看到了来自数百个数据库的大量数据,而那些数据最差的数据总是开发人员认为他们可以通过应用程序管理诸如表关系之类的东西。当你这样做时总会有漏洞,最终它们会回来咬你,然后它们很难正确修复。

于 2013-09-06T11:03:32.010 回答