数据库系统概论(第5版)对外码概念做出了如下叙述:
设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码。
我把这段话理解为:如果F是关系R的码(主属性)的话,那F就不是R的外码
书稍后对参照完整性规则进行了定义:
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。
我不理解的地方在于,既然外码定义时已经说了外码F不是关系R的码(主属性),那么为什么在下列关系引用例子中
学生(学号,姓名,性别,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)
认为"学号"和"课程号"这两符合参照完整性规则中对外码F的取值要求?
这是在说"学号"和"课程号"在选修关系中是外码吗?
但我的理解是,**在选修关系中,"学号"和"课程号"是候选码和主属性,这不符合外码定义中的"外码F不是关系F的码"**,关于主码是不是外码我不理解
求解答!
如果理解有误,请不吝赐教!
选修表里面学号,课程号是组合主键(主属性),同时也是引用学生表和课程表的主键。
所以在选修表里面,学号,课程号是组合主键,同时也是引用(即外键或者叫外码)