【发布时间】:2011-04-06 02:05:27
【问题描述】:
我需要为这种情况设置外键吗? 我在数据库设计方面很薄弱,尤其是在 mysql 中。我可以知道我是否想为它们设置外键,我应该为它们设置什么?如果人员删除...所有对people_id的引用将一起删除,是否可以在表太多时设置? 谢谢回复
【问题讨论】:
标签: database database-design foreign-keys relational-database foreign-key-relationship
我需要为这种情况设置外键吗? 我在数据库设计方面很薄弱,尤其是在 mysql 中。我可以知道我是否想为它们设置外键,我应该为它们设置什么?如果人员删除...所有对people_id的引用将一起删除,是否可以在表太多时设置? 谢谢回复
【问题讨论】:
标签: database database-design foreign-keys relational-database foreign-key-relationship
是的。外键约束强制执行参照完整性,这是确保数据可靠和高质量的关键原则。否则,您的 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 中的记录。此外,如果您删除 people 中的父行,则在 people_email 中引用它的行将自动删除。
我个人更喜欢手动删除子表中的所有行,但不使用级联删除。这是一些额外的应用开发工作,但它让我感觉更安全,也让我能够控制锁定并确保查询尽可能高效。
【讨论】: