关系模型
关系完整性的用于保证数据库中数据的正确性。系统在进行更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。在关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义的完整性,其中实体完整性和参照完整性约束条件,称为关系的两个不变性。
实体
关系数据库的完整性规则是数据库设计的重要内容。绝大部分关系型数据库管理系统RDBMS都可自动支持关系完整性规则,只要用户在定义(建立)表的结构时,注意选定主键、外键及其参照表,RDBMS可自动实现其完整性约束条件。
(1)实体完整性(Entity Integrity)。实体完整性指表中行的完整性。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。
(2)实体完整性规则要求。若属性
A是基本关系
R的主属性,则属性
A不能取空值,即主属性不可为空值。其中的空值(NULL)不是0,也不是空隔或空字符串,而是没有值。实际上,空值是指暂时“没有存放的值”、“不知道”或“无意义”的值。由于主键是实体数据(记录)的惟一标识,若主属性取空值,关系中就会存在不可标识(区分)的实体数据(记录),这与实体的定义矛盾,而对于非主属性可以取空值(NULL),因此,将此规则称为实体完整性规则。如学籍关系(表)中主属性“学号”(列)中不能有空值,否则无法操作调用学籍表中的数据(记录)。
域完整性
域完整性(Domain Integrity)是指数据库表中的列必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等规定。表中的CHECK、FOREIGN KEY 约束和DEFAULT、 NOT NULL定义都属于域完整性的范畴。
参照完整性
参照完整性(Referential Integrity)属于表间规则。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入或删除表间数据的完整性,统称为参照完整性。通常,在客观现实中的实体之间存在一定联系,在关系模型中实体及实体间的联系都是以关系进行描述,因此,操作时就可能存在着关系与关系间的关联和引用。
在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值。
参照完整性规则(Referential Integrity)要求:若属性组
F是关系模式
R1的主键,同时
F也是关系模式
R2的外键,则在
R2的关系中,
F的取值只允许两种可能:空值或等于
R1关系中某个主键值。
R1称为“被参照关系”模式,
R2称为“参照关系”模式。
注意:在实际应用中,外键不一定与对应的主键同名。外键常用下划曲线标出。
用户定义完整性
用户定义完整性(User-defined Integrity)是对数据表中字段属性的约束,用户定义完整性规则(User-defined integrity)也称域完整性规则。包括字段的值域、字段的类型和字段的有效规则(如小数位数)等约束,是由确定关系结构时所定义的字段的属性决定的。如,百分制成绩的取值范围在0~100之间等。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1、 数据完整性:常用三种类型的约束保证数据完整性有域(列)完整性、实体完整性、引用完整性。
2、 实体完整性:能够唯一标识表中的第一个记录。
保证方法有主键约束、标识约束、唯一约束。
主键约束与唯一约束添加的基本语法
Alter table 表名 addconstraint 约束名 约束类型 具体的约束说明
约束名的取名规则:约束类型_约束字段。
比如主键(Primary Key)约束:PK_StuNo,唯一(Unique Key)约束UQ_StuIdNo。
alter table students
add constraint PK_StudentId primary key (StudentId)
alter table Students
add constraint UQ_StudnetNo unique(studentNo)
3、 域完整性:表中特定列数据的有效性,确保不会输入无效的值。
保证方法有检查约束、限制数据类型、默认值、非空约束。
约束名的取名规则:检查(check key)约束:CK_Age;默认(default key)约束:DF_Address。
alter table students
add constraint CK_Age check (age between 15 and 28)
alter table students
add constraint DF_Address default ('地址不详') for Address
4、 引用完整性:维护表间数据的有效性、完整性。
约束方法:建立外键,关联另一表的主键,即外键约束
约束名的取名规则:外键(foreign key)约束:FK_LoginId
alter table students
add constraint Fk_LoginId foreign key(classid) references studentclass(classid)
5、 外键的使用:要求数据类型、数据长度必须与对应的主键表字段完全一致;添加数据时,要首先添加主键表,再添加外键表;删除数据时,要首先删除外键表数据,再删除主键表数据。
6、 完整数据库创建步骤:
建库—》建表—》主键约束—》域完整性约束—》外键约束