是否在数据库中使用“外键”的讨论!

来源:互联网 发布:it领域 编辑:程序博客网 时间:2024/06/05 09:46
  今天在群里和一个资深开发者讨论是否使用外键,对方是某大数据公司的技术骨干,十分反感使用外键,当然网上也有很多人这么认为,我就很奇怪不用外键你怎么确定数据行和行之间的关系了,他们说这叫“逻辑关系”,首先看一下“外键”的定义(参考百度词条)

外键的定义:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

外键的作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。

阻止执行:
从表插入新行,其外键值不是主表的主键值便阻止插入;
从表修改外键值,新值不是主表的主键值便阻止修改;
主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。

级联执行:
主表删除行,连带从表的相关行一起删除;
主表修改主键值,连带从表相关行的外键值一起修改。两种方法提供给用户选择。无论选取哪种方法,从表里都不会有多余行。从另一个角度理解,用拒绝同一事物在从表中的标志与主表不一致来实现与主表中的标志一致。

        不管怎么看外键都是必须要使用的,那为什么这位网友和网上的帖子都反对使用“外键”了?仔细看了下我和他的对话,我发现问题在这里,首先描述数据行和行的关系,并且保持约束是利用“外键”或者说“逻辑关系”来完成,这一点肯定是没错,那么问题在那了?为什么会有2种不同的理解?我查了网上好像都没有人能说清楚。

      真正的原因在这里,由数据库自带功能完成约束操作的方式是不可取的,不利于扩展,这一点是没有争议的。应该由软件或者说逻辑上完成约束操作,才是最佳做法,所以对方说的“逻辑关系”也没错。网上说的不用“外键”是指不用数据库自带的功能完成外键的约束。结论是“外键”在逻辑上还是存在,而且这个字段在表中是必须有的。

终于说清楚了,以后就不用争论了!!!
阅读全文
0 0