外键必须是表的候选键(比如table1)?我知道外键引用了其他一些表的主键(比如table2)。但对于table1,是否有必要将它作为候选键?
答案 0 :(得分:4)
根据定义,需要外键来引用目标表中的候选键(问题中的table2)。外键不必是引用表中的候选键,也不必是该表中候选键的一部分。
答案 1 :(得分:2)
没有。你可以有一个1:N的关系,FK要求只是说该字段必须存在于另一个表中。无论该领域是否独特,都无关紧要。
供参考:
候选键是PK的替代,它可以是一个字段或字段组合(如连接键中)
employee_id
的一个很好的替代方案可能是ssn
(社会安全号码) 串联密钥是构成记录唯一性的多个字段,可以替代PK,也可以一起充当PK
因为RDBMS至少遵循1NF,所以表的所有字段都可以用作连接键
注意:这是一个糟糕的选择,仅作为示例
将employee_id
字段视为表格的一个PK,但firstname
,lastname
和startdate
的组合可能会唯一标识员工表中的每个人
注意:这是一个例子,在实践中可能有更好的替代方案