码,主码,候选码,外码以及关系的完整性
关系的码:
1.候选码:
候选码是能够唯一标识关系中某一个元组的一个属性或属性集,也叫候选键,如:学生关系中,学号可以唯一标识学生,班级+姓名也可以唯一标识一个学生, 学号和(班级,姓名)都是候选码
候选码需要满足:
唯一性:唯一标识一个元组(注意不是说候选码只有一个) 最小性:构成候选码的属性个数最少,比如前面的(班级,姓名),再添加一个学号或其他属性就多此一举了
2.主码:
主码是从候选键中选着一个作为查询、插入、删除元组操作的操作变量,也叫主键、主码、关系键、关键字
简单来说就是从候选码中选出的一个最具代表性的主属性:包含在任何一个候选码的各个属性称为主属性(也就是说,之前的(班级,姓名)中,班级和姓名都是主属性)
非主属性:不包含在任何候选码中的属性
3.外码:
关系R1,R2,其中属性集X是R1的非主码属性,但X是R2的主码,则称X是R1的外码(也叫外键、外部关系键),R1为参照关系,R2为被参照关系
外码的取值是由被参照的关系的主码的域决定的,也就是外码的域来自“那个”主码的域(R1的外码和R2的主码必须在同一个域上)
关系的完整性:
为了维护关系数据库中数据与现实的一致性(完整性),需要对数据操作进行一定的约束。
有如下三类:
实体完整性: 主码的值不能为空或部分为空
参照完整性: 外码来自被参照关系的主码,且可以为空,但作为被参考的关系的主码不能为空(外码可以为空时,外码通常是非主属性)
用户自定义完整性: 针对某一具体关系数据的约束条件,比如规定取值范围 总结 关系的码对于后面创建数据库很重要,尤其是外码这一块很容易出错 在寻找主码时通常选择最具代表性的
假设姓名没有重复,姓名学号都可以作为主码,这个时候还是选择学号方便:
第一这样比较通性, 第二,在构建选课关系用学号更便捷