• 数据库完整性约束


    原创


    数据库完整性约束分为三种:实体完整性约束、参照完整性约束、用户定义的完整性

    实体完整性

    规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。所谓空值

    就是”不知道“或”不存在“或”无意义“的值。

    意思十分明显,就是关系中的主码是不能取空值的

    参照完整性

    定义:设F施基本关系R的一个或一组属性,但不是关系R的码,KS是基本关系S的主码。

    如果F与KS相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照

    关系或目标关系。

    规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码KS相对应,则对于

    R中每个元组在F上的值必须:

    • 或者取空值
    • 或者等于S中某个元祖的主码值

    用户定义的完整性

    任何关系数据库系统都应该支持实体完整性和参照完整性。除此之外,不同的关系数据库系统根据

    其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性就是针对某一具体关系数

    据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。


    定义实体完整性

    关系模型的实体完整性在CREATE TABLE中用PRIMARY KEY定义。对单属性构成的码有两种说明方法,

    一种是定义为列级约束条件,另一种是定义为表级约束条件。对多个属性构成的码只有一种说明方法,即

    定义为表级约束条件。

    /*建立Student表*/
    create table Student(
        sno char(9) primary key,    //在列级定义主码
        sname char(20) not null,
        ssex char(2),
        sage smallint,
        sdept char(20)
    );
    /*建立Course表*/
    create table Course(
        cno char(9),
        cname char(20)
        primary key(cno)    //在表级定义主码
    )

    实体完整性检查:

    • 检查主码值是否唯一,如果不唯一则拒绝插入或修改。
    • 检查主码的各个属性是否为空,只有有一个为空就拒绝插入或修改。

    定义参照完整性

    关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用

    REFERENCES短语指明这些外码参照哪些表的主码。

    create table SC(
        sno char(9) not null,
        cno char(4) not null,
        grade smallint,
        primary key(sno,cno)    //在表级定义实体完整性
        foreign key(sno) references Student(sno),    //在表级定义参照完整性
        foreign key(cno) references Course(cno),    //在表级定义参数完整性
    );

    参照完整性违约处理

    • 拒绝(NO ACTION)执行(系统默认)
    • 级联(CASCADE)操作
    • 设置为空值
    create table SC(
        sno char(9) not null,
        cno char(4) not null,
        grade smallint,
        primary key(sno,cno)    //在表级定义实体完整性
        foreign key(sno) references Student(sno),    //在表级定义参照完整性
            ON DELETE CASCADE    //级联删除
            ON UPDATE CASCADE,    //级联更新
        foreign key(cno) references Course(cno),    //在表级定义参数完整性
            ON DELETE NO ACTION    //拒绝删除
            ON UPDATE CASCADE    //级联更新
    );

    用户定义的完整性

    • 属性上的约束条件(列值非空(NO NULL)、列值唯一(UNIQUE)、检查列值是否满足一个条件表达式(CHECK短语))。
    ssex char(2) check(ssex in('','')),
    • 元组上的约束条件
    create table Student(
        sno char(9) primary key,    //在列级定义主码
        sname char(20) not null,
        ssex char(2)
        sage smallint,
        sdept char(20)
        check(ssex='' or sname not like'Ms.%')
    );

    10:50:01

    2018-12-06

  • 相关阅读:
    poj 1860 最短路—Bellman-Ford算法
    poj 3083 dfs+bfs最短路
    poj 2049 Finding Nemo(bfs+优先队列)
    Codeforces 685B 树形dp
    Codeforces 679B
    hdu 5695 拓扑排序裸题
    hdu 5690 矩阵快速幂/循环节
    《概率》第一卷( 修订和补充第三版)施利亚耶夫著 周概荣译本 勘误
    HDU 2124 Repair the Wall
    HDU 1198 Farm Irrigation
  • 原文地址:https://www.cnblogs.com/chiweiming/p/10075422.html
Copyright © 2020-2023  润新知