复习六——数据库完整性
数据库完整性概念
数据库完整性是指保护数据库中数据的
- 正确性:数据的合法性
- 有效性:数据是否在有效范围内
- 相容性:指表示同一个事实的两个数据应该一致
完整性规则定义
- D(Data):约束作用的数据对象
- O(Operation):触发完整性检查的数据库操作,立即检查还是延迟检查。
- A(Assertion):数据对象要满足的断言或语义规则
- C(Condition):受A作用的数据对象值的谓词
- P(Procedure):违反完整性规则时触发的过程
完整性约束按约束作用类型分类
域完整性
域是一组具有相同类型的值的集合。SQL支持域的概念。通过以下语句创建域,并对其中的限制命名。
create Domain GenderDomain char(2) constraint chkGD check (value in ('男','女')); # 使用域,sex的取值来自GenderDomain create Table student ( Sno char(10), sex GenderDomain, Sname char(20) )
实体完整性
关系模式R的主码不可为空
参照完整性
参照关系R的任一个外码值必须等于被参照关系S中所参照的候选码的某个值,或者为空
完整性的实施途径
约束(Constraint)
- 主键约束(Primary Key)
- 唯一键约束(Unique)
- 外键约束(Foreign Key)
- 检查约束(Check)
- 默认值约束(Default)
触发器(Trigger)
与特定表关联的存储过程。当在该表上执行DML操作时,可以自动触发该存储过程执行相应的操作
规则(Rule)
创建规则
create rule rule_name as condition_expression # rule_name:是新规则的名称。 # condition_expression:是定义规则的条件。规则可以是where子句中任何有效的表达式
绑定规则
sp_bindrule 'rule_name','object_name';
举例
create rule r1_email as @val like '%@%' sp_bindrule 'r1_email','student.Email'
个人感觉这样的规则跟域的作用差不多
断言(Assertion)
create assertion asser1 check(60>=all (select count(*) from sc group by c#));
对断言涉及的数据进行操作后会触发断言;断言为假,操作将会被拒绝。