### 实现三类完整性约束条件 #### 概述 在关系数据库系统中,数据完整性是确保数据质量和准确性的关键因素之一。数据完整性约束是用于确保数据的正确性和一致性的一组规则。本文档将通过Microsoft SQL Server中的具体示例来探讨三种主要的完整性约束:实体完整性、参照完整性和用户定义的完整性。 #### 一、实体完整性 实体完整性约束是确保表中的主键值唯一且非空,以便每条记录都可以被唯一地识别。这有助于避免数据重复,并确保每条记录的独特性。 **示例代码解析:** ```sql CREATE DATABASE zhang; GO USE zhang; GO CREATE TABLE student ( sno CHAR(9) PRIMARY KEY, -- 学生编号作为主键 sname CHAR(8) NOT NULL, -- 学生姓名不允许为空 ssex CHAR(1) CHECK (ssex IN ('m', 'f')), -- 性别只能是'm'或'f' sage TINYINT CHECK (sage >= 15 AND sage <= 30), -- 年龄限制在15到30之间 sdept CHAR(2) -- 所属部门 ); ``` **解析:** - `CREATE TABLE student` 命令创建了一个名为`student`的表。 - `sno CHAR(9) PRIMARY KEY` 表示`sno`字段是主键,长度为9个字符,且不能为空。 - `sname CHAR(8) NOT NULL` 定义了`sname`字段为学生的姓名,长度为8个字符,不允许为空。 - `ssex CHAR(1) CHECK (ssex IN ('m', 'f'))` 使用`CHECK`约束限制`ssex`字段的值只能为'm'或'f'。 - `sage TINYINT CHECK (sage >= 15 AND sage <= 30)` 也使用`CHECK`约束限制`sage`字段的值在15到30之间。 - `sdept CHAR(2)` 定义了`sdept`字段表示学生所属部门,长度为2个字符。 #### 二、参照完整性 参照完整性约束确保外键引用的主键值存在于相应的表中。这种约束有助于保持不同表之间的关联性,并防止错误的数据引用。 **示例代码解析:** ```sql CREATE TABLE course ( cno CHAR(3) PRIMARY KEY, -- 课程编号作为主键 cname CHAR(20), -- 课程名称 cpno CHAR(3), -- 先修课程编号 ccredit TINYINT, -- 课程学分 FOREIGN KEY (cpno) REFERENCES course(cno) -- cpno 必须引用course表中的cno ); CREATE TABLE sc ( sno CHAR(9), -- 学生编号 cno CHAR(3), -- 课程编号 grade TINYINT CHECK (grade BETWEEN 0 AND 100), -- 成绩范围在0到100之间 PRIMARY KEY (sno, cno), -- 复合主键,由sno和cno组成 FOREIGN KEY (sno) REFERENCES student(sno), -- sno 必须引用student表中的sno FOREIGN KEY (cno) REFERENCES course(cno) -- cno 必须引用course表中的cno ); ``` **解析:** - `CREATE TABLE course` 命令创建了一个名为`course`的表。 - `cno CHAR(3) PRIMARY KEY` 表示`cno`字段是主键,长度为3个字符,且不能为空。 - `cpno CHAR(3)` 和 `FOREIGN KEY (cpno) REFERENCES course(cno)` 定义了`cpno`字段作为外键,必须引用`course`表中的`cno`字段。 - `CREATE TABLE sc` 命令创建了一个名为`sc`的表,用于存储学生选课情况。 - `sno CHAR(9)` 和 `cno CHAR(3)` 分别作为学生编号和课程编号,`PRIMARY KEY (sno, cno)` 定义了复合主键,由`sno`和`cno`组成。 - `grade TINYINT CHECK (grade BETWEEN 0 AND 100)` 使用`CHECK`约束限制`grade`字段的值在0到100之间。 - `FOREIGN KEY (sno) REFERENCES student(sno)` 和 `FOREIGN KEY (cno) REFERENCES course(cno)` 定义了`sno`和`cno`字段作为外键,分别引用`student`和`course`表中的`sno`和`cno`字段。 #### 三、用户定义的完整性 用户定义的完整性是指用户根据业务需求自定义的一些约束条件。这些约束可以是基于值的有效性检查、特定格式的验证等。 **示例代码解析:** ```sql INSERT INTO student VALUES ('200215121', '', 'm', 20, 'cs'); INSERT INTO student VALUES ('200215122', '', 'f', 19, 'cs'); INSERT INTO student VALUES ('200215123', '', 'f', 18, 'ma'); INSERT INTO student VALUES ('200215125', '', 'm', 19, 'is'); -- ... 更多插入语句 ``` **解析:** - 上述示例展示了如何向`student`表中插入数据。 - 注意:由于`student`表中的`sname`字段定义为`NOT NULL`,因此在这里插入空字符串(`''`),如果实际业务场景不允许姓名为空,则应修改表结构或插入具体的姓名值。 总结: 本文档详细介绍了三种主要的数据完整性约束——实体完整性、参照完整性和用户定义的完整性,并通过具体的SQL Server示例进行了阐述。通过实施这些约束,可以有效地确保数据库中的数据质量与准确性。在设计数据库时,合理地利用这些完整性约束对于维护数据的一致性和可靠性至关重要。




























go
use zhang;
go
create table student
( sno char(9) primary key,
sname char(8) not null,
ssex char(1) check ( ssex in ('m','f')),
sage tinyint check ( sage>=15 and sage<=30),
sdept char(2)
);
go
create table course
( cno char(3) primary key,
cname char(20),
cpno char(3),
ccredit tinyint,
foreign key (cpno) references course(cno)
);
go
create table sc
( sno char(9),
cno char(3),
grade tinyint check ( grade between 0 and 100),


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- MATLAB环境下电动汽车续航里程影响因素分析与优化策略研究
- 基于 YOLOV3 算法的目标检测实现方案
- 西门子Smart系列水处理系统:反渗透+精混床除盐水工艺的自动化控制案例
- 基于JSP+Servlet实现的污水处理系统+源码(毕业设计&课程设计&项目开发)
- FPGA实现MIL-STD-1553B协议的BC、BM、RT源码解析及应用 实时通信
- 单周期控制的无桥CukPFC变换器:实现高频率(100k)的稳定电源转换
- Abaqus模拟中水力裂缝与天然裂缝相交的cohesive行为
- 电力电子MATLABSimulink仿真:三相PWM整流器及其多种控制方法的研究
- 基于ASP.NET MVC与SQL Server的C#图书及借阅管理系统的设计与实现 - Entity Framework 高级版
- 目标检测-YOLOV3实现
- 结构光3D测量技术:单双目编码解码与标定重建的应用实现
- 电力电子领域Buck双闭环控制降压电路PI调节器的设计与建模及其应用 Simulink v2.5
- 基于51单片机的测速码表仿真:Keil程序源码与Proteus仿真文件解析
- 基于C++ OpenCV 和 Qt 实现人脸(刷脸)登录+源码+项目文档+数据集(毕业设计&课程设计&项目开发)
- FPGA IP源码解密技术:从加密IP文件恢复Verilog与VHDL源代码的方法与挑战
- 基于CSI的WiFi室内被动式目标检测技术


