【问题标题】:MySQL Foreign keys: should i set it up?MySQL外键:我应该设置它吗?
【发布时间】:2011-04-06 02:05:27
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    是的。外键约束强制执行参照完整性,这是确保数据可靠和高质量的关键原则。否则,您的 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 中引用它的行将自动删除。

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

    【讨论】:

    • 我可以知道我应该为它设置什么吗?例如。将 people_address 中的 people_id 设为主要,然后将外键链接到 db.people.id 并级联为 update 和 delete ?我希望当人们删除时地址会被删除。当人们更新人们不会影响地址,除非人们正在编辑地址......
    猜你喜欢
    • 2019-10-04
    • 1970-01-01
    • 2015-03-12
    • 2010-11-05
    • 2011-12-22
    • 2012-04-09
    • 2015-10-05
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多