数据库主码被设为外码

数据库中外码是非码属性,因此可取值为空值或对应参照表的主码值,而我在数据库系统导论这本书中看到一段代码将sno , cno设置为主码,但又将sno,cno设为外码,那岂不是会存在主码取空值的可能?该怎么理解?如图。。。。图片说明

不矛盾。此时,sno和cno组成了联合主码,而作为sno和cno单个非码属性可以作为外码,引用参照表。

一个表的一个字段可以同时是主键和外键。最简单的,比如一个分类表:
id parentid name
这里完全可以让id和parentid关联。通过id找所有的子分类。

这当然可以,只是主键不能为空

sno和cno组成了联合成一个主键

cno和sno都是另外两个表的主码,不能为空的