关系数据库中有3种完整性约束,它们是实体完整性、参照完整性和用户定义的完整性。
实体完整性的基本含义:关系数据库的每张表中不允许存在完全相同的行。因为每一行对应一个客观事物,即一个实体,而现实世界不存在完全相同的实体。通过在关系中设计唯一索引、主关键字(即主键、主码)来保证实体完整性。
参照完整性的基本含义:表中某些列的值必须与主键表中的值一致。例如,能选课的学生必须是学生表中存在的学生(可理解成“已注册的学生”),因此课程表中的学号必须已经存在于学生表中。同理,选课表中的课程号必须是已经开设的课程,即在课程表中找得到的。通过在关系模式中设计外键来实现参照完整性。
用户定义的完整性的基本含义:在关系数据库的表中,列的值往往必须限定在一定范围,例如,性别列就只能取值“男”或者取值“女”。成绩列的值也有相应的取值范围,如0~100分。用户定义的完整性就是根据这些语义要求针对具体数据库定义的约束条件。
SQL Server中提供了一系列的技术措施让用户实现数据的完整性。主键、唯一约束、唯一索引等可用来实现实体完整性,外键用来实现参照完整性,数据类型、规则、默认等用来保证域的完整性。域完整性是根据用户需求由用户定义的,因此属于“用户定义的完整性”。
下面结合任务背景等材料对“教学管理数据库”的关系模型进行完整性设计。
(1)学生关系Student(Sno,Sn,Sex,BirthDay,Dept,Class)
学号Sno:主键,字符型(长度7位)。
姓名Sn:字符型(长度10位)。仅限5个汉字以内的情况。不允许为空。
性别Sex:字符型(长两位,容纳一个汉字)。限制取值为“男”或“女”)。
出生日期Birthday:日期型。
系部Dept:字符型(长度20位),外键(参照“系部”实体的主键Dept)。
班级Class:字符型(长度10位)。
(2)教师关系Teacher(Tno,Tn,Sex,BirthDay,Dept)
教师号Tno:主键,字符型(长度5位)。
教师名Sn:字符型(长度10位),不允许为空。
性别Sex:字符型(长两位,容纳一个汉字)。限制取值为“男”或“女”。
出生日期Birthday:日期型。
系部Dept:字符型(长度20位),外键(参照“系部”实体的主键Dept)。
(3)课程关系Course(Cno,Cn,Credit,Ct)
课程号Cno:主键,字符型(长度5位)。
课程名Cn:字符型(长度20位),不允许为空,不允许重名。
学分Credit:数字型(整数部分两位,小数部分一位),0~20。
学时Ct:整数型,8~320。
(4)系部关系Department(Dept,Office,Phone,DeptHead,Dorm)
系部Dept:主键,字符型(长度20)。
办公地址Office:字符型(长度30位),不允许为空。
联系电话Phone:字符型(长度8位),限制为0~9数字型字符,不允许为空。
系主任DHead:字符型(长度10位)。
宿舍区Dorm:字符型(长度20位)。
(5)宿舍区关系Dormitory(Dorm,Phone,Resp,Totalroom)
宿舍区Dorm:主键,字符型(长度20位)。
联系电话Phone:字符型(长度8位),限制为0~9数字型字符,不允许为空。
负责人Resp:字符型(长度20),不允许为空。
宿舍房间数Totalroom:整数型。
(6)选修关系SC(Sno,Cno,Score)
学号Sno:字符型(长度7位),与Cno组合为主键。外键,参照学生关系Student的主键Sno。
课程号Cno:字符型(长度5位),与Sno组合为主键。外键,参照课程关系Course的主键Cno。
成绩Score:整数型,0~100。
(7)授课关系TC(Tno,Cno,Dct)
教师号Tno:字符型(长度5位),与Cno组合为主键。外键,参照教师关系Teacher的主键Tno。
课程号Cno:字符型(长度5位),与Tno组合为主键。外键,参照课程关系Course的主键Cno。
实际学时Dct:整数型,0~320。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。