5.1 实体完整性
关系模型的实体完整性在CREATE TABLE 中用PRIMARY KEY 定义,对单属性构成的码有两种说明方法:一种是定义为列级约束条件,另一种是定义为表级约束条件。
对多个属性构成的码只有一种说明方法,即定义为表级约束条件。
例:将Student 表中的Sno属性定义为码
CREATE TABLE Student
(Sno CHAR (9)PRIMARY KEY , //在列级定义主码
Sname CHAR (20) NOT NULL,
Ssex CHAR(2)
Sage SMALLINT,
Sdept CHAR(20)
);
5.2 参照完整性
例:定义SC 中的参照完整性
CREATE TABLE SC
(Sno CHAR (9) NOT NULL,
Cno CHAR(4)NOT NULL,
Greade SMALLINT,
PRIMARY KEY (Sno,Cno), //在表级定义实体完整性
FOREIGN KEY (Sno) REFERENCES Student(Sno), //在表级定义参照完整性
FOREIGN KEY (Cno) REFERENCES Course (Cno) //在表级定义参照完整性
);
5.3 用户定义的完整性
1.不允许取空值
例:在定义SC表时,说明Sno,Cno,Grade属性不允许取空值
CREATE TABLE SC
(
Sno CHAR(9) NOT NULL, // Sno属性不允许取空值
Cno CHAR (4) NOT NULL, //Cno属性不允许取空值
Grade SMALLINT NOT NULL, //Grade属性不允许取空值
PRIMARY KEY (Sno,Cno), //如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值则在列级不允许取空值的定义就不用写了
);
2.列值唯一
例:建立部门表DEPT 要求部门名称Dname列取值唯一 部门编号 Deptno列为主码
CREATE TABLE DEPT
(
Deptno NUMERIC (2),
Dname CHAR(9)UNIQUE, //要求Dname列值唯一
Location CHAR(10),
PRIMARY KEY (Deptno)
);
3.用CHECK短语指定列值应该满足的条件
例:Student表中Ssex只允许取 男 或 女
CREATETABLE Student
(
Sno CHAR(9)PRIMARY KEY,
Sname CHAR(8)NOT NULL,
Ssex CHAR(2) CHECK (Ssex IN (‘男’,‘女’)), //性别属性Ssex只允许取男或女
Sage SMALINT ,
Sdept CHAR(20)
);