MySQL外键:我应该设置它吗?

时间:2011-04-06 02:05:27

标签: database database-design foreign-keys relational-database foreign-key-relationship

我是否需要为这种情况设置外键? 我在数据库设计方面很弱,尤其是在mysql中..我可能知道如果我想为它们设置外键,我应该为它们设置什么?如果人们删除...所有引用people_id将一起删除,是否可以设置表格太多? 谢谢回复

enter image description here

1 个答案:

答案 0 :(得分:4)

是。外键约束强制实施参照完整性,这是确保数据可靠和高质量的关键原则。否则,您的people_address表可以引用people表中不存在的people_id值,并且可能是孤儿。外键约束可以防止这种情况发生。

所以,就这样做吧。没有充分的理由不这样做。

在people_email表中定义以下外键:

ALTER TABLE people_email ADD CONSTRAINT FOREIGN KEY(people_id)REFERENCES people(id)ON DELETE CASCADE;

这意味着您无法在people_email中输入记录,其中该表中的people_id不存在于人员中。此外,如果删除人员中的父行,则在people_email中引用它的行会自动删除。

我个人更喜欢手动删除子表中的所有行,但不使用级联删除。这是一个额外的应用程序开发工作,但它让我感觉更安全,也让我可以控制锁定并确保查询尽可能高效。