【数据库】基础知识总结

数据库完整性

为了维护数据库完整性DBMS需要提供:
1. 提供定义完整性约束条件的机制
2. 提供完整性检查方法:一般在INSERT UPDATE DELETE语句执行后开始检查或者在事物提交之前进行检查
3. 违约处理机制:比如拒绝,级联或者其他操作

实体完整性

用PRIMARY KEY进行定义,对于单属性,实体完整性可以定义为列级约束也可以定义为表级约束;对于多个属性构成的码,只能定义为表级约束。

例如:
定义为列级约束(列级主码)


    CREATE TABLE S(
        Sno CHAR(9) PRIMARY KEY,
        Sname CHAR(20) NOT NULL,
        .....
    );

定义为表级约束(表级主码)


    CREATE TABLE S(
        Sno CHAR(9) ,
        Sname CHAR(20) NOT NULL,
        .....
        PRIMARY KEY(Sno)
    );

检查和违约处理:
1. 检查主码值是否唯一,如果不唯一就拒绝插入或者修改(全表扫描或者在DBMS为主码建立的索引上进行查找,例如B+树索引)
2. 检查主码值对应的各个属性是否为空,如果存在为空的属性,那么拒绝插入或者修改

参照完整性

在创建表的时候使用FOREIGN KEY 定义外码,用REFERENCES短语指定这些外码参照哪些表的主码。和主码类似,外码也同样可以定义表级和列级参照完整性。不过感觉没什么区别

例如:


    CREATE TABLE SC(
    Sno CHAR(9) NOT NULL,
    Cno CHAR(4) NOT NULL,
    .....
    PRIMARY KEY(Sno, Cno),
    FOREIGN KEY (Sno) REFERENCES Sudent(Sno),
    FOREIGN KEY (Cno) REFERENCES Course(Cno),
    );

破坏参照完整性的情形以及违约处理:
1. SC表中插入一个元组但是该元组的Sno属性在被参照表Student中是不存在的
2. SC表中更新一个元组但是该元组的Sno属性在被参照表Student中是不存在的
3. Student表中删除一个元组,导致参照表SC中某些元组的Sno在Student表中不存在
4. Student表中更新一个元组,导致参照表SC中某些元组的Sno在Student表中不存在

发生不一致的时候一般采取的措施是:
1. 拒绝执行
2. 级联操作:删除或者修改被参照表导致不满足参照完整性的时候,级联删除惨遭表中所有的不一致元组
3. 设置空值(这也引起一个问题就是在定义外码的时候是否允许外码列为空,如果不允许为空,那么就不能按3来处理)

至于采用哪种处理策略,可以在建表的时候显式指定


    CREATE TABLE SC(
    Sno CHAR(9) NOT NULL,
    Cno CHAR(4) NOT NULL,
    .....
    PRIMARY KEY(Sno, Cno),
    FOREIGN KEY (Sno) 
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值