1

我是否需要为这种情况设置外键? 我在数据库设计方面很薄弱,特别是在mysql中......我可以知道如果我想为他们设置外键,我应该为他们设置什么?如果人们删除...所有引用people_id将一起删除,是否可以设置,而表太多? THX答复MySQL外键:我应该设置它吗?

enter image description here

回答

4

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

所以,就这样做。真的没有理由不这样做。

定义外键,如在people_email表如下:

ALTER TABLE people_email添加约束外键(people_id)参考文献人(ID)ON DELETE CASCADE;

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

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

+0

我可以知道我应该设置什么吗?例如。将people_address中的people_id设置为primary,然后将外键链接到db.people.id并级联为update和delete?我希望地址在人们删除时会被删除。当人们更新人不会影响地址,除了人们正在编辑地址... – 1myb 2011-04-06 02:22:13

+1

@ spencer-lim我根据你的问题更新了我的答案。 – squawknull 2011-04-06 02:28:53

相关问题