V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huzhikuizainali
V2EX  ›  数据库

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

  •  
  •   huzhikuizainali · 2023-07-20 12:26:52 +08:00 · 598 次点击
    这是一个创建于 492 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    pCHSEaq.png

    villa2935
        1
    villa2935  
       2023-08-08 05:50:08 +08:00 via Android
    你这俩表的关系是什么?
    是只有考过试有成绩的学生才配登记到登记表里嘛?
    如果要是这样,登记表里的学号可以用成绩表里的学号。

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

    “你不能用成绩表里的学号,当做登记表学号的外键。”--------那么针对以上问题应该用什么当作登记表的外键?
    villa2935
        3
    villa2935  
       2023-08-09 00:57:23 +08:00
    登记表不需要外键,如果你只是想保证登记表里学号的唯一性,就用索引限制一下就可以了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:00 · PVG 07:00 · LAX 15:00 · JFK 18:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.