不建议建立,使用外键有利于维持数据完整性和一致性,但是对于开发来说是非常不利的。
每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,而且需要更为复杂的错误捕获机制。
做数据处理时会受到很多的束缚,有些地方本来就可以允许有部分冗余,但是由于设计了外键约束,只能放弃。
出现BUG的时候追踪很麻烦。
数据库的三个层次:
物理数据层是数据库的最内层,是物理存贮设备上实际存储的数据的集合。这些数据是原始数据,是用户加工的对象,由内部模式描述的指令 *** 作处理的位串、字符和字组成。
概念数据层是数据库的中间一层,是数据库的整体逻辑表示。指出了每个数据的逻辑定义及数据间的逻辑联系,是存贮记录的集合。它所涉及的是数据库所有对象的逻辑关系,而不是它们的物理情况,是数据库管理员概念下的数据库。
用户数据层是用户所看到和使用的数据库,表示了一个或一些特定用户使用的数据集合,即逻辑记录的集合。
明确说,不该用。1. 外键属于业务需求
2. 在数据量稍微大点的数据库极大影响性能。
3. 影响业务扩展,并且业务本身能够代替处理一致性关联。
即便业务端忘记处理关联信息的删除,也不影响最终查询结果。比如user和user_info表, user删除了,user_info忘记删除。正常关联user_info表, 左连user结果正常。仅仅增加冗余数据而已。相比检索写入性能的指数级降低,业务处理更好。况且,现在也不会真的删除一条记录,仅仅一个标记。忘记标记某给表,影响不大。
不一定。外键约束毕竟是一个约束,只是保证数据完整性的一个手段。
数据库系统本身约束手段是更可靠的。
对于开发来说,可能觉得建立外键关系没必要,但是到了以后维护阶段,或升级阶段,如果没有这个关系,可能不利维护工作的提升。表关系的建立,也阐述着具体的业务逻辑关系,增加了可读性。
在逻辑性,关联性比较强的时候不妨添加。
其他时候简单的外键约束也是可以的,不需要一有关系就添加,但是要有其他机制保证数据完整性,毕竟外键对于开发有时候还是有限制。
总的来说前期开发可以不管,后期维护尽量转移到数据库本身的约束来建立关系。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)