复习六——数据库完整性

数据库完整性概念

数据库完整性是指保护数据库中数据的

  • 正确性:数据的合法性
  • 有效性:数据是否在有效范围内
  • 相容性:指表示同一个事实的两个数据应该一致

完整性规则定义

  • 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子句中任何有效的表达式

绑定规则

扫描二维码关注公众号,回复: 1707152 查看本文章
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#));

对断言涉及的数据进行操作后会触发断言;断言为假,操作将会被拒绝。

猜你喜欢

转载自www.cnblogs.com/terieqin/p/9215824.html