数据库原理-完整性

什么是数据库的完整性

完整性控制机制

1.完整性约束条件

2.完整性控制

3.SQL Server的完整性

总结:

数据库的完整性是指数据的正确性和相容性,防止不合语义的数
据进入数据库

数据库是否具备完整性关系到数据库系统能否真实地反映现实世
界,因此维护数据库的完整性是非常重要的

(1)完整性约束条件定义机制
-完整性约束条件是数据模型的一个重要组成部分,它约束了数据
库中数据的语义
-DBMS应提供手段让用户根据现实世界的语义定义数据库的完整性
约束条件,并把它们作为模式的一部分存入数据库中

(2)完整性检查机制
-检查用户发出的操作请求是否违背了完整性约束条件

(3)违约反应
-如果发现用户的操作请求使数据违背了完整性约束条件,则采取
一定的动作来保证数据的完整性

完整性
1完整性约束条件
2.完整性控制
3.SQL Server完整性实现

-整个完整性控制都是围绕完整性约束条件进行的完整性约束条件是
-完整性控制机制的核心

对象的状态
静态
-对静态对象的约束是反映数据库状态合理性的约束
-这是最重要的一类完整性约束
动态
-对动态对象的约束是反映数据库状态变迁的约束

(1)静态列级约束(五类)
对一个列的取值域的说明
最常见、最简单、最容易实现
1)对数据类型的约束
–包括数据的类型、长度、单位、精度等
2)对数据格式的约束
3)对取值范围或取值集合的约束
4)对空值的约束
-空值表示未定义或未知的值,它与零值、空格不同
-有的列允许空值,有的则不允许例如规定成绩可以为空值
5)其他约束例:关于列的排序说明,组合列等

(2)静态元组约束
规定组成一个元组的各个列之间的约束关系
静态元组约束只局限在单个元组上

(3)静态关系约束
在一个关系的各个元组之间或者若干关系之间
常见静态关系约束
1)实体完整性约束
2)参照完整性约束
3)函数依赖约束
4)统计约束

统计约束
定义某个字段值与一个关系多个元组的统计值之间的约束关系

(4)动态列级约束
修改列定义或列值时应满足的约束条件
常见动态列级约束
1)修改列定义时的约束
2)修改列值时的约束
–修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件

(5)动态元组约束
修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件

(6)动态关系约束
动态关系约束是加在关系变化前后状态上的限制条件

一、DBMS的完整性控制机制
二、关系系统三类完整性的实现
三、参照完整性的实现

—、DBMS的完整性控制机制
(1)定义功能
-一个完善的完整性控制机制应该允许用户定义各类完整性约束条件
(2)检查功能
-立即执行的约束(Immediate constraints)
·检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查
-延迟执行的约束(Deferred constrainsts)
·有时,完整性检查需要延迟到整个事务执行结束后再进行,如银行转账
(3)违约反应
-拒绝该操作
-其他处理方法

二、关系系统三类完整性的实现
违反实体完整性规则和用户定义的完整性规则的操作
-一般都是采用拒绝执行的方式进行处理
而对于违反参照完整性的操作,
-并不都是简单地拒绝执行
-有时还需要采取另一种方法,即接受这个操作,同时执
行一些附加的操作,以保证数据库的状态仍然是正确的

RDBMS实现参照完整性时需要考虑以下3方面;
(1)外码是否可以接受空值的问题
(2)删除被参照关系的元组时的考虑
(3)修改被参照关系中主码的考虑

(1)外码是否可以接受空值的问题
外码是否能够取空值是依赖于应用环境的语义的
在实现参照完整性时
-系统除了应该提供定义外码的机制
-还应提供定义外码列是否允许空值的机制

(2)删除被参照关系的元组时的考虑
出现违约操作的情形
-需要删除被参照关系的某个元组,而参照关系有若干元组的外码值与被删除的被参照关系的主码值相对应
违约反应:
-级联删除(CASCADES)
-受限删除(RESTRICTED)
-置空值删除(NULLIFIES)
这三种处理方法,哪一种是正确的,要依应用环境的语义来定

违约反应策略
级联删除
-将参照关系中所有外码值与被参照关系中要删除元组主码值相
对应的元组一起删除
受限删除
-只有当参照关系中没有任何元组的外码值与要删除的被参照关
系的元组的主码值相对应时,系统才执行删除操作,否则拒绝此
删除操作
置空值删除
-删除被参照关系的元组,并将参照关系中所有与被参照关系中
被删除元组主码值相等的外码值置为空值

(3)修改被参照关系中主码的考虑
级联修改
-修改被参照关系中主码值同时,用相同的方法修改参照关系中相
应的外码值
受限修改
-拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被
参照关系中某个元组的主码值时,这个元组的主码值才能被修改
置空值修改
-修改被参照关系中主码值,同时将参照关系中相应的外码值置为
空值

参照完整性的实现结论
-RDBMS在实现参照完整性时,除了需要向用户提供定义主码、外码
的机制
-还需要向用户提供按照自己的应用要求选择处理依赖关系中对应
的元组的方法。

SQL语言定义完整性约束条件
CREATE TABLE语句
ALTER TABLE语句

取值唯一的列
参照完整性
其他约束条件

一、SQL Server中的实体完整性
二、SQL Server中的参照完整性
三、SQL Server中用户定义的完整性

一sQL Server中的实体完整性
SQL Server在CREATE TABLE语句中提供了
PRIMARY KEY子句,供用户在建表时指定关系的主码列。
-在列级使用PRIMARY KEY子句
-在表级使用PRIMARY KEY子句

SQL Server中的实体完整性
在用PRIMARY KEY语句定义了关系的主码后,每当用户程序对主码
列进行更新操作时,系统自动进行完整性检查
-违约操作
·使主属性值为空值的操作。
使主码值在表中不唯一的操作
-违约反应
·系统拒绝此操作,从而保证了实体完整性

二、SQL Server中的参照完整性
SQL Server的CREATE TABLE语句允许用户定义参照完整性
-用FOREIGN KEY子句定义哪些列为外码列
-用REFERENCES子句指明这些外码相应于哪个表的主码
-用ON DELETE CASCADE短语指明在删除被参照关系的元组时,同时
删除参照关系中外码值等于被删除的被参照关系的元组中主码值的
元组(没有默认为RESTRICT)
-用ON UPDATE CASCADE短语指明在删除被参照关系的元组时,同时
删除参照关系中外码值等于被删除的被参照关系的元组中主码值的
元组(没有默认为RESTRICT)

三、SQL Server中的用户定义的完整性
SQL Server中定义用户完整性的三种方法
-用CREATE TABLE语句在建表时定义用户完整性约束
-用ALTER TABLE语句添加用户完整性约束
-通过触发器来定义用户的完整性规则

1.用CREATETABLE语句在建表时定义用户完整性约束
-可定义三类完整性约束
·列值非空(NOT NULL短语)
·列值唯一(UNIQUE短语)
·检查列值是否满足一个布尔表达式(CHECK短语)

通过触发器来定义用户的完整性规则
-定义其它的完整性约束时,需要用数据库触发器(Trigger)来实现。
-数据库触发器是一类靠事件驱动的特殊过程,一旦由某个用户定义,
任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发
子,在核心层进行集中的完整性控制。
-定义数据库触发器的语句
CREATE [OR REPLACE TRIGGER

完整性约束条件:
约束条件作用对象(列,元组,关系)
对象状态(静态,动态)

完整性控制:
DBMS的完整性控制机制
RDBMS实现参照完整性考虑:
1.外码是否可以接受空值问题
2.删除参照关系的元组时的考虑(级联删除,受联删除,置空值删除)
3.修改被参照关系中主码的考虑

SQL Server完整性实现:
1.实体完整性
2.参照完整性
3.用户定义的完整性

Original: https://blog.csdn.net/muziiii/article/details/119979080
Author: 木木娅.
Title: 数据库原理-完整性

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/557847/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球