欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

数据库设计之外键的思考

程序员文章站 2024-01-16 09:52:34
...

关于是否使用外键在业界也没有统一的标准,大家争论的焦点是数据一致性和性能上。 支持使用外键方 ,强调如果不使用外键,数据一致性无法保证,性能消耗可以忽略。 反对使用外键方 ,数据一致性可以通过程序保证,性能有大问题,数据维护很麻烦,如果是大系

关于是否使用外键在业界也没有统一的标准,大家争论的焦点是数据一致性和性能上。

支持使用外键方,强调如果不使用外键,数据一致性无法保证,性能消耗可以忽略。

反对使用外键方,数据一致性可以通过程序保证,性能有大问题,数据维护很麻烦,如果是大系统,整个外键的关系就像编制的一张大网。再者开发人员很难真正用好外键。

其实两种观点我都支持,现状是我基本没用过外键。没使用外键会出现什么问题呢?

1.数据一致性无法保证。出现这种情况最多的情况是,如A表示基础表,它被很多模块引用,B表是业务表,A表中删除了数据,B表的数据关联A的信息没有删除,导致写SQL时会出现大量的外连接。

2.从表上没有建索引。如果从表上有外键,这种情况悲剧就要发生了。请看参考我之前写的 外键不加索引引起的性能问题

3.使用外键在后台修改数据非常麻烦,当然这个不是外键的问题,只是系统自身的问题。

你看任何一本涉及到数据库设计的书籍,都会告诉你一定要使用外键,但理想和实现总是有点差距,如何选择,我的建议:

1.如果你对数据一致性要求非常高,关乎人命,钱,一定要加外键,像财务系统等。反之,可以牺牲一下,换取方便。

2.如果不加外键,基础的表(就是会被引用的表)要做逻辑删除(加一个删除的标识位),可以避免大量的外连接。

3.不管是否加外键,一定要索引。