是否有必要将某个表的外键作为同一个表的候选键?

时间:2011-07-07 18:25:57

标签: mysql sql database database-design relational-database

外键必须是表的候选键(比如table1)?我知道外键引用了其他一些表的主键(比如table2)。但对于table1,是否有必要将它作为候选键?

2 个答案:

答案 0 :(得分:4)

根据定义,需要外键来引用目标表中的候选键(问题中的table2)。外键不必是引用表中的候选键,也不必是该表中候选键的一部分。

答案 1 :(得分:2)

没有。你可以有一个1:N的关系,FK要求只是说该字段必须存在于另一个表中。无论该领域是否独特,都无关紧要。

供参考:

  • 候选键是PK的替代,它可以是一个字段或字段组合(如连接键中)

    1. 所有这一切都确定了有多种方法可以唯一地识别表的记录
    2. employee_id的一个很好的替代方案可能是ssn(社会安全号码)

  • 串联密钥是构成记录唯一性的多个字段,可以替代PK,也可以一起充当PK

    1. 因为RDBMS至少遵循1NF,所以表的所有字段都可以用作连接键
      注意:这是一个糟糕的选择,仅作为示例

    2. employee_id字段视为表格的一个PK,但firstnamelastnamestartdate的组合可能会唯一标识员工表中的每个人
      注意:这是一个例子,在实践中可能有更好的替代方案