哪个表存储了外键

时间:2014-08-12 10:26:57

标签: sql database sqlite database-design

这可能是一个非常简单的问题,我需要澄清。

如果我有2个表,请说“用户和活动”。用户与活动之间存在一对多关系(用户可以进行多项活动)。

哪个表应该有外键?

2 个答案:

答案 0 :(得分:1)

这样想:

  • 包含FK的表可以在其FK字段中包含多个行,其中包含相同的值。 FK引用一个键但不是本身一个键,所以你可以在那里有重复。
  • FK引用的可以拥有(最多)一行行,该行对应于另一个表中相同的FK值。原因是:FK引用密钥,禁止重复。

所以,假设" 1"用户和"很多"是Activity,Activity应该包含FK。

答案 1 :(得分:0)

外键确保每行在引用的表中都有对应的值。因此,要确定是否需要外键以及在哪里,请问自己以下问题:

  

是否有没有活动的用户?

如果答案为否,则必须在用户表引用活动表中创建FK。

  

没有用户可以进行活动吗?

如果答案是肯定的,请不要创建FK约束。

如果答案为否,则您可能具有m:n关系(除非活动只能有一个用户),因为多个用户可以拥有相同的活动,并且每个活动可以拥有多个用户。然后你需要一个表来解决这个m:n之间的关系。

user_table             user_activity_table        activity_table
id | more_columns      user_id | activity_id      activity_id | more_columns

然后user_table引用user_activity_tableactivity_table引用也只是user_activity_tableuser_activity_table只有这两列。