外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在 *** 作上的一致性与完整性。
优点:
精简关联数据,减少数据冗余
避免后期对大量冗余处理的额外运维 *** 作。
降低应用代码复杂性,减少了额外的异常处理
相关数据管理全由数据库端处理。
增加文档的可读性
特别是在表设计开始,绘制 ER 图的时候,逻辑简单明了,可读性非常强。
缺点:
性能压力
外键一般会存在级联功能,级联更新,级联删除等等。在海量数据场景,造成很大的性能压力。比如插入一条新记录,如果插入记录的表有 10 个外键,那势必要对关联的 10 张表逐一检查插入的记录是否合理,延误了正常插入的记录时间。并且父表的更新会连带子表加上相关的锁。
其他功能的灵活性不佳
比如,表结构的更新等。
1、外键的概念:外键是关系数据库三个完整性的五个约束条件之一,是表与表之间建立的一种关系。在Oracle数据库的scott/tiger用户中,表Dept和Emp通过外键进行了关联。在这里Dept表叫主表,Emp表叫从表,外键是字段Deptno。\x0d\x0a2、加入外键的条件:a、两个表有相同属性字段,取值范围相同;\x0d\x0a b、外键在主表中是主键或者是唯一字段;\x0d\x0a c、外键可以是多个字段的组合。\x0d\x0a 记住一句话:从表的外键是主表的主键或唯一字段。外键是该表是另一个表之间联接的字段(外键必须为另一个表中的主键)外键的用途是确保数据的完整性。它通常包括以下几种:
实体完整性,确保每个实体是唯一的(通过主键来实施)
域完整性,确保属性值只从一套特定可选的集合里选择
关联完整性,确保每个外键或是NULL(如果允许的话)或含有与相关主键值相配的值
如果你在没有定义数据库的实际外键的情况,试图强制执行关联完整性,那你就会遇到数据库“断列链接”或“孤单记录”的风险。换句话说,数据的完整性会被破坏,你的数据库会含有不良数据,你的用户会很生气(或更糟)。
你从来不能肯定你的前台程序是更改数据库数据的唯一手段。那是太危险了。此外,你在已经建好的数据库上花费不必要及大量的时间和精力来生成逻辑。你在没有合理理由的情况下再发明轮子。
从来不存在“太多的”外键。 或者是业务需求需要的, 或者不需要。如果需要(例如,确保每个定单归属于一个已知的客户),那你必须实施它们。性能不是问题。不进行外键检查,你的查寻可能会快几微微秒,但如果数据库包含不良数据,你的用户会容忍这样的情况持续多久呢?
比如在员工信息表中有部门的编号,部门的信息在另外一个表中,在部门信息表中这个部门编号必须是存在的或者为空,而不能是一个不存在的部门编号。
这个就可以使用外键来限制员工信息表的部门编号的外键为部门信息表的部门编号,这样Oralce就可以自动完成员工信息表中的部门编号必须存在了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)