外键是否在“链接”表中使用?

时间:2013-09-06 01:28:19

标签: mysql database-design

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

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

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

TLDR:我打算在连接两个表的2列'link'表中使用复合键。应该/我还需要将它们变成外键吗?

1 个答案:

答案 0 :(得分:3)

PKs和FK用于不同的目的。在链接表中,您需要PK来保留数据的唯一性。但是,如果您还没有创建FK,那么最终可能会出现数据完整性问题,因为可以从原始表而不是链接表中删除ID。

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

相关问题