实验五 完整性
一、引言
本次上机实验的目的主要是让学生掌握数据库完整性的三大类型(实体完整性、参照完整性、用户自定义完整性),并通过实际建库建表和数据操作加深理解。
下面将为分别展示 student、course、sc 三个表的创建语句,并设置对应的完整性约束,包括:
-
实体完整性(主键)
-
参照完整性(外键)
-
用户定义完整性(如 CHECK 约束)
二、准备
创建数据库和三张表
-- 创建数据库
CREATE DATABASE student;
GO-- 使用该数据库
USE student;
GO
三、实体完整性
实体完整性确保每一行数据都是唯一且可识别的,通常通过设置 主键(Primary Key)来实现。
# student 学生表
CREATE TABLE student (sno CHAR(8) PRIMARY KEY, -- 学号,主键,实体完整性sname VARCHAR(50) NOT NULL, -- 姓名,不允许为空gender CHAR(2) CHECK (gender IN ('男', '女')), -- 用户定义完整性:性别只能为男或女age INT CHECK (age BETWEEN 16 AND 60), -- 用户定义完整性:年龄范围限制dept VARCHAR(50) -- 所属院系
);
四、参照完整性
参照完整性用于确保表与表之间的关系一致性,主要通过设置 外键(Foreign Key)来实现。
# course 课程表
CREATE TABLE course (cno CHAR(6) PRIMARY KEY, -- 课程号,主键cname VARCHAR(50) NOT NULL, -- 课程名,不允许为空credit INT CHECK (credit > 0) -- 用户定义完整性:学分必须大于0
);
五、用户定义的完整性
用户定义的完整性是指根据实际业务规则,通过 CHECK
约束等方式对字段设置的自定义规则。
例如:
自定义限制字段的取值范围、类型,以及业务相关,例如年龄范围、成绩限制、性别取值等。
# sc 选课表
CREATE TABLE sc (sno CHAR(8), -- 学号cno CHAR(6), -- 课程号grade INT CHECK (grade BETWEEN 0 AND 100), -- 成绩:用户定义完整性PRIMARY KEY (sno, cno), -- 联合主键,确保每个学生一门课只能选一次FOREIGN KEY (sno) REFERENCES student(sno) ON DELETE CASCADE, -- 参照完整性FOREIGN KEY (cno) REFERENCES course(cno) ON DELETE CASCADE
);
六、总结
类型 | 作用对象 | 主要实现方式 | 功能描述 |
---|---|---|---|
实体完整性 | 单表 | 主键约束 | 保证每行数据唯一、非空 |
参照完整性 | 表与表之间 | 外键约束 | 保证外键与主表数据一致 |
用户定义的完整性 | 字段 | CHECK、自定义逻辑 | 满足具体业务要求的数据限制 |
希望这篇文章能帮助到正在进行类似作业的同学,一些有错误的地方还请大家指出