外键应该放在哪个表上

MyD*_*ons 3 sql-server

我正在学习数据库。在我非常简单的数据库中,我有 2 个表。

WorkingHoursDetail

ID
NameOfWeek
Hours
Run Code Online (Sandbox Code Playgroud)

WorkingHours

ID
Name
Run Code Online (Sandbox Code Playgroud)

如您所见,它们目前没有关联。

现在,我面临着将它们联系起来的问题。我知道我通过添加一个外键来做到这一点,比如 MyOtherTableID 并将其链接到其他表 ID。

在上面的示例中,我可以向 EITHER 添加外键

WorkingHoursDetail

ID
NameOfWeek
Hours
WorkingHoursId
Run Code Online (Sandbox Code Playgroud)

WorkingHours

ID
Name
Run Code Online (Sandbox Code Playgroud)

或者

WorkingHoursDetail

ID
NameOfWeek
Hours
Run Code Online (Sandbox Code Playgroud)

WorkingHours

ID
Name
WorkingHoursDetailId
Run Code Online (Sandbox Code Playgroud)

我试过这个,它似乎有效,但是这个选项让我害怕。是否有一个“正确”的答案,或者这种变化只会影响数据写入数据库的顺序。如果是这种情况,那么这肯定会决定使用它的程序的流程(用户 GUI)。

Ale*_*lex 5

根据经验,您应该在引用父表的子表上添加外键。在您的情况下,它似乎WorkingHoursDetail是子表和WorkingHours父表。

您可以通过询问哪个表可以独立存在而另一个表不存在来识别父表。在你的情况下WorkingHours可以不存在WorkingHoursDetails(但不是相反,所以WorkingHours似乎是父表。

或者,您可以在插入新记录时查看数据流。如果两个表都是空的,则必须先在 中插入一行WorkingHours,然后在 中插入一条记录WorkingHoursDetail。这使得WorkingHours父表,因此应该在WorkingHoursDetail引用时添加外键WorkingHours