【问题标题】:Record in one table unique to a record in another table一个表中的记录对另一个表中的记录是唯一的
【发布时间】:2021-12-10 04:00:21
【问题描述】:

让我试着用一个例子让它变得简单。

我正在创建一个包含 2 个表、学校和学生的数据库

具有 2 列 SchoolID(PK) 和 Location 的学校表 包含 3 列 StudentID(PK)、SchoolID(FK) 和 Grade 的学生表

Student 表将包含所有可以通过外键 SchoolID 识别的学校的学生。 StudentID 列对于所有学校的每个学生都是唯一的。到目前为止很好。

我需要 Student 表中的另一列,该列仅在外键值方面是唯一的。我们称这个ID。我需要此列仅对每个 SchoolID 都是唯一的。因此,如果我过滤掉属于特定 SchoolID 的学生,我不应该得到 2 个具有相同 ID 的学生。

我不确定这是否是一个有效的场景。

编辑: 这很好

这不是

【问题讨论】:

  • 为什么无效?如果有需要此列的用例,则它是有效的。我真的不明白你在这里问什么。
  • @GertArnold 我需要学生表中的新列仅在具有相同 SchoolID 的其他学生中是唯一的。这有意义吗?
  • 你只是在重复你的问题。我可以重复我的答案,为什么不呢?只有你可以决定它是否有意义。
  • @GertArnold 对此感到抱歉。这么说吧,如果我将新的“ID”列设置为主要,它不会让 2 个学生具有相同的值,对吧?所以,我需要一个关键约束,允许 2 名学生具有相同的 'ID' 值,但不允许 2 名具有相同 'SchoolID' 的学生拥有相同的 'ID' 值。
  • 只标记您使用的数据库。

标签: sql entity-framework


【解决方案1】:

我认为数据模型有问题。由于您将StudentID 作为学生表中的主键,因此该列在该表中将始终是唯一的。但似乎您正在尝试创建一个 Student-School 表,您可以在其中将同一个学生连接到多个学校(但一个学生不能多次连接同一学校)。我认为您至少需要3张桌子: 学生 (PK StudentID) 学校(PK SchoolId) 学生学校

StudentSchool 表将有两个 FK 列:StudentID 和 SchoolID。为了防止同一学生多次映射到同一所学校,您可以让 PK 包含 StudentId 和 SchoolId 或创建唯一约束。

【讨论】:

    猜你喜欢
    • 2020-12-28
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2014-05-26
    • 2010-09-21
    相关资源
    最近更新 更多