表的外键可以仅仅是另一个表“主键”组的属性之一么?

296 天前
 huzhikuizainali

比如有一个“学生登记表”,将身份证号码定义为这个表的主键(没有将学号定以为主键)

另外一张表是“历次考试排名统计表”。这个表由 ‘学号’‘考试轮次’共同构成主键组。因为有可能 009 号学生,每次考试都考第一。因此 ‘学号’‘考试轮次’可以定义唯一的一条记录。

问题:‘学号’可以被认定为“学生登记表”的外键么? ‘学号’可不是“历次考试排名统计表”的主键! 它只是主键组当中的属性之一!

483 次点击
所在节点    数据库
3 条回复
villa2935
277 天前
你这俩表的关系是什么?
是只有考过试有成绩的学生才配登记到登记表里嘛?
如果要是这样,登记表里的学号可以用成绩表里的学号。

唯一性并不一定是主键,可以用索引来限制列的唯一性。比如登记表里的学号是唯一的。 你不能用成绩表里的学号,当做登记表学号的外键。
huzhikuizainali
277 天前
@villa2935 谢谢回复。
是只有考过试有成绩的学生才配登记到登记表里嘛?---------请教一下,这有什么影响么?后续问题先假设所有学生都参加了每一轮考试,且都被“历次考试排名统计表”收录。(但如果不是所有学生都参加每一轮考试呢?会怎样?)

“你不能用成绩表里的学号,当做登记表学号的外键。”--------那么针对以上问题应该用什么当作登记表的外键?
villa2935
277 天前
登记表不需要外键,如果你只是想保证登记表里学号的唯一性,就用索引限制一下就可以了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/958265

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX