实体完整性
关系模型的实体完整性:
CREATE TABLE中用PRIMARY KEY定义
[例 5.1]将Student表中的Sno属性定义为码
1)在列级定义主码
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
2)在表级定义主码
CREATE TABLE Student
(Sno CHAR(9),
Sname CHAR(20) NOT NULL
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY(Sno)
);
[例 5.2]将SC表中的Sno,Cno属性定义为码
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY(Sno,Cno) /* 只能在表级定义主码 */
);
插入或更新操作时,DBMS按照实体完整性规则自动进行检查
- 检查主码是否唯一,如果不唯一则拒绝插入或修改
- 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
参照完整性
关系模型的参照完整性定义
- 在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码
- 在REFERENCES酸雨指明这些外码参照哪些表的主码
例如,关系SC中,(Sno,Cno)是主码。Sno,Cno分别参照Student表的主码和Course表的主码
[例 5.3]定义SC中的参照完整性
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),/* 在表级定义实体完整性*/
FROEIGN KEY(Sno) REFERENCES Student(Sno),/* 在表级定义参照完整性*/
FOREIFN KEY(Cno) REFERENCES Course(Cno)/* 在表级定义参照完整性*/
);
表 5.1 可能破坏参照完整性的情况及违约处理
[例 5.4]显式说明参照完整性的违约处理示例
CREATE TABLE SC
(Sno