美文网首页
数据完整性的设计

数据完整性的设计

作者: 承_风 | 来源:发表于2019-07-21 18:35 被阅读0次

    数据完整性概念:能确保存储在数据库中数据的准确性和一致性

    完整性约束的类型

    常用三种类型的约束保证数据完整性:

    • 保证列值符合规定要求:域(列)完整性
    • 要求表中所有的行唯一:实体完整性
    • 要求两表相同字段具有一致性:引用完整性

    实体完整性

    作用:保证实体具有唯一标识
    方法:主键约束、标识列、唯一约束

    主键约束与唯一约束

    • 添加约束的基本语法
    alter table 表名 add constraint 约束名 约束类型 具体的约束说明
    
    • 约束名的取名规则推荐采用:约束类型_约束字段
      主键(Primary Key)约束:如PK_StudentId
      唯一(Unique Key)约束:如UQ_StudentIdNo
    use dbname
    go
    --创建“主键”约束primary key
    if exists(select * from sysobjects where name='pk_StudentId')
        alter table Students drop constraint pk_StudentId
    alter table Students add constraint pk_StudentId primary key(StudentId)
    
    --创建唯一约束unique
    if exists(select * from sysobjects where name='uq_StudentIdNo')
        alter table Students drop constraint uq_StudentIdNo
    alter table Students add constraint uq_StudentIdNo  unique(StudentIdNo)
    

    域完整性

    作用:保证实体属性值符合规范要求
    方法:检查约束、限制数据类型、默认值、非空约束

    检查约束与默认约束

    约束名的取名规则:

    • 检查(Check Key)约束:如CK_Age
    • 默认(Default Key)约束:如DF_StudentAddress
    --创建检查约束
    if exists(select * from sysobjects where name='ck_Age')
        alter table Students drop constraint ck_Age
    alter table Students add constraint ck_Age  check(Age between 18 and 25)
    if exists(select * from sysobjects where name='ck_PhoneNumber')
        alter table Students drop constraint ck_PhoneNumber
    alter table Students add constraint ck_PhoneNumber  check(len(PhoneNumber)=11)
    
    --创建默认约束
    if exists(select * from sysobjects where name='df_StudentAddress')
        alter table Students drop constraint df_StudentAddress
    alter table Students add constraint df_StudentAddress default('地址不详') for StudentAddress
    --使用默认值插入数据
    insert into Students (StudentName,Gender,Birthday,Age,StudentIdNo ,PhoneNumber,
    StudentAddress,ClassId)
    values('李小璐','女','1989-01-12',24,120229198901121315, '13099012876',default,1)
    

    引用完整性

    作用:保证两张表相同属性值的一致性
    约束方法:外键约束

    insert into StudentClass (ClassId,ClassName) values(1,'软件班')
    if exists(select * from sysobjects where name='fk_ClassId')
        alter table Students drop constraint fk_ClassId
    alter table Students add constraint fk_ClassId  foreign key (ClassId) references StudentClass(ClassId)
    

    数据表的使用总结

    主键的选择

    • 最少性原则:尽量选择单个键作为主键。
    • 稳定性原则:尽量选择数值更新少的列最为主键。

    外键使用

    • 要求数据类型、数据长度必须与对应的主键表字段完全一致。
    • 添加数据时,要首先添加主键表,再添加外键表。
    • 删除数据时,要首先删除外键表数据,再删除主键表数据。

    完整数据库创建步骤

    建库→建表→主键约束→域完整性约束→外键约束

    插入数据的过程

    验证主键、主外键关系、检查约束......→插入成功

    相关文章

      网友评论

          本文标题:数据完整性的设计

          本文链接:https://www.haomeiwen.com/subject/rtsvlctx.html