数据完整性的设计

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

完整性约束的类型

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

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

实体完整性

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

主键约束与唯一约束

  • 添加约束的基本语法
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)

数据表的使用总结

主键的选择

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

外键使用

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

完整数据库创建步骤

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

插入数据的过程

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

你可能感兴趣的:(数据完整性的设计)