一个表中的记录对另一个表中的记录是唯一的

Posted

技术标签:

【中文标题】一个表中的记录对另一个表中的记录是唯一的【英文标题】: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' 值。 只标记您使用的数据库。 【参考方案1】:

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

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

【讨论】:

以上是关于一个表中的记录对另一个表中的记录是唯一的的主要内容,如果未能解决你的问题,请参考以下文章

如何为 BigQuery 表中的记录生成唯一键值?

如何加入表中的最新记录?

SQL - 为表中的每个货币代码(在两个定义的日期之间)创建一个具有唯一日期和货币记录的表

SQL 表中记录的唯一组合(从节点表中获取边)

如何根据查询结果返回表中的随机记录?

MySQL 从具有重复引用条目的联合表中选择唯一记录