如何在桥接表中定义唯一关系,以便数据模型强制执行?

发布于 2024-10-23 12:45:01 字数 356 浏览 7 评论 0原文

这是我遇到的一个面试问题

给定三个表

  • GRADUATE - 毕业生名册
  • HONORS - 荣誉科目
  • GRADHONS - 将研究生与特定荣誉科目联系起来的桥表

问题 - 应该如何在数据模型中定义 GRADHONS,以便数据模型强制执行以下约束:毕业生可能只有一个荣誉科目?

面试官不太喜欢我的建议

  • 仅使用研究生密钥作为 GRADHONS 表中的 PK
  • 更改数据模型并参考荣誉作为研究生表的一部分。

我的问题与原始面试问题相同 - 您如何在桥接表中定义唯一的 1-1 关系,以便由数据模型强制执行?

This is an interview question I came across

Given THREE tables

  • GRADUATE - Graduate roll
  • HONOURS - Honours Subjects
  • GRADHONS - Bridge table to link Graduate with a particular Honours subject

The question - How should GRADHONS be defined in the datamodel so the datamodel enforces the constraint that a graduate may only have a single Honours subject?

The interviewer was not terribly enamoured of my suggestions

  • Use just the Graduate Key as PK in the table GRADHONS
  • Change the datamodel and reference Honours as part of the Graduate table.

My question is the same as the original interview question - How would you define a unique-1-1 relationship in a bridge table so it is enforced by the datamodel?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜扑 2024-10-30 12:45:01

您的两个建议听起来都很合理。如果您希望在 GRADHONS 中有一个单独的列来引用 GRADUATE,则使 GRADHONS 具有对 GRADUATE 的外键引用,并使该列唯一。因此,对于任何毕业生,GRADHONS 中只能有一行。

Both your suggestions sound reasonable. If you'd prefer to have a separate column in GRADHONS to reference GRADUATE, then make GRADHONS have a foreign key reference to GRADUATE, and make that column unique. Therefore there can only be a single row in GRADHONS for any GRADUATE.

寂寞美少年 2024-10-30 12:45:01

最简单的方法是在连接表中的 GRADHONS(由graduateID 和 HonorsID 字段组成的主键)上创建一个复合主键,该连接表由毕业生和荣誉 FK 组成。

如果您打算使用 LINQ to SQL 或其他 ORM 解决方案(例如 RoR 中的 ActiveRecord),请注意它们往往不喜欢这些类型的 PKey。在这种情况下,您最好在连接表 GRADHONS 上创建 PK 自动增量,然后在两个 FKey 字段上创建唯一索引。

The easiest way is to create a composite primary key on GRADHONS (a primary key that is composed of both GraduateID and HonoursID fields) in your join table which consists of Graduate and Honours FKs.

If you're going to use LINQ to SQL or other ORM solutions like ActiveRecord in RoR be aware that they tend to dislike these types of PKeys. In that case you would be best to instead create a PK autoincrement on the join table GRADHONS and then a unique index on the two FKey fields.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文