【你也能从零基础学会网站开发】理解关系型数据库中的三类完整性规则,让你的数据表更加规范!
🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注
什么是三类完整性规则?
在我们正式开始学习数据库操作之前,我们有必要先了解一下 设计数据库的一些小细节以及规则规范!
三类完整性规则
在数据库
中指保障数据的正确性
和相容性
的重要约束条件
它们分别是实体完整性规则
、域完整性规则
、参照完整性规则
。
这些规则确保了数据库中数据的准确性
、有效性
和一致性
1.实体完整性规则(Entity Integrity)
前面我们说到了表(table)
结构设计上的核心组成部分, 而其中就有一个组成部分为主键
那么它就是保证实体完整性
的约束之一!
实体完整性规则
要求表
中的主键
字段不能取空值NULL
,且主键
值必须唯一,用于唯一标识表
中的每一行数据。
主键
确保表中的每一行数据都能被唯一识别,不会出现重复的行,从而维护了数据的唯一性
如图
具体的实现方式我们到后面详细讲解SQL语句
的时候再说!
2.参照完整性规则(Referential Integrity)
参照完整性
又称为引用完整性
,是指通过主键
与外键
相联系的两个表或两个以上的表,相关字段的值要保持一致的一种情况!
举个栗子
参照完整性
主要是通过外键约束FOREIGN KEY CONSTRAINT
来实现。
比如: 当外键
所引用的主键
值被修改
或删除
时,根据参照完整性
规则, 如RESTRICT
或CASCADE
策略, 那么外键
所在表
的相应记录也会进行相应的修改
或删除
!
有了这个规则之后,我们就可以执行以下操作了:
更新规则
:当主键
表中的主键值被更新时,外键表中相应的外键值也必须被更新,以保持数据的一致性。
删除规则
:当主键
表中的记录被删除时,外键表中引用该主键值的记录也必须被删除或设置为NULL, 具体取决于参照完整性规则的设置)
插入规则
:在外键表
中插入新记录时,外键的值必须存在于主键表
中相应的主键值集合中,否则插入操作将被拒绝!
所以参照完整性
确保数据库表
之间的数据关系正确性
和一致性
,防止数据孤岛
和数据不一致
问题的出现
如图
以上数据很明显引用是不能为空的,但这里姓名
字段无法相互保证正确性
和一致性
, 因为外键
的值必须存在于主键表
中相应的主键值集合中!
3.用户定义完整性规则 (User-Defined Integrity)
用户定义完整性规则
其实就是数据库里的一些家规
或者业务规矩
,你可以暂时先这样理解!
这些规矩是数据库管理员
或者开发应用程序
的人根据实际需求制定的,用来确保数据库
中的数据是否符合业务逻辑!
举个栗子
比如:你有一个存储学生信息的数据库,你可能会制定一些规矩
来确保数据的正确性:
年龄不能是负数
: 这就像说人不能越活越年轻,回到妈妈肚子里😈😈,在数据库里,你就设置一个规则,不让学生信息的年龄字段出现负数: 0 < age
成绩应该在0到100之间
:考试分数不能超出这个范围,所以在数据库里,你会设置规则来确保成绩字段的值是在0到100之间: score > 0 and score < 100
学号必须是唯一的
: 每个学生都应该有一个独一无二的学号,这样才能区分他们。
所以,你会设置一个规则来确保学号字段里的每个值都是唯一的, 例如:unique约束
学生必须属于某个班级
:这意味着在添加学生信息时,你必须指定他/她所属的班级, 如果尝试添加一个没有班级信息的学生,数据库就会因为违反了这条规则
而拒绝你。
这些就是用户定义完整性规则
的案例, 它们是由人来定义的,目的是确保数据库中的数据是干净、准确且符合业务逻辑的。
不同的数据库和业务场景可能需要不同的规则
,所以用户定义的完整性规则是非常灵活和强大的, 并且保证这些规则被正确查验!
举个栗子
我们可以按照以上规范来创建一个表
结构以及字段
!
比如说我们现在要创建一个企业员工信息库的表, 可能会有以下字段
基本信息:姓名、年龄、身份证号……
工作信息:部门、职位、智能……
其他信息:兴趣、爱好、特长……
那么最初的结构可能会如下形式:
如图
上图中我们包括了所有可能需要的字段在表中!
那么首先按照我们刚刚之前讲过的一些约束,我们应该在表中拥有主键才行! 所以你应该找出哪个字段最可能为主键
把主键
确定出来!
如图
当然我们还可能对表的结构进行更多的优化处理!
比如说把一些字段拆分出来,独立放在一个表中, 然后通过引用关系进行关联!
如图
那么我们通过表的关联关系 拆分成主从关系之后,如下:
虽然这样感觉多出了几张表,但是对于我们后期开发以及维护是有很大利用价值的!
并且我们还可以进一步进行拆分优化,如下图:
在这个例子中,内部编号
既作为员工基本信息表的主键
,又作为外键
和员工扩展信息表
进行关联!
但是这样做的优点和缺点各是什么?有没有改进的办法? 有没有小伙伴想到?可以在评论区回答一下! 😋😋
我们下期继续…😈😈😈
"👍点赞" "✍️评论" "收藏❤️"
欢迎一起交流学习❤️❤️💛💛💚💚
好玩 好用 好看
的干货教程可以
点击下方关注❤️
微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇