数据库表有两个FK到同一个表

Posted

技术标签:

【中文标题】数据库表有两个FK到同一个表【英文标题】:Database table with two FK to the same table 【发布时间】:2020-07-14 15:13:45 【问题描述】:

我知道将两个 FK 放到同一个表中并不“健康”,但这是我的场景:第一个人运行测试,另一个人将其添加到数据库中。 TestResult 链接到创建结果的人和在数据库中下载的人。对于这种情况,您的解决方案是什么? userInfo 有两个 Fk 可以吗?

当我想使用实体框架生成第二个 FK 时:“无法确定 DataAccessLayer.Entity.TestResult 类型上外键的复合外键排序。在复合外键属性上使用 ForeignKey 数据注释时,请确保顺序由使用 Column 数据注释或 fluent API。"

【问题讨论】:

同一个表的两个外键很常见,而且一点也不“不健康”。在 SQL 中很容易做到。 这对你有帮助吗:***.com/questions/40090288/… ? @mrNone 感谢您的评论,现在正在工作 您研究的 1 个具体的非重复问题是什么? PS如果询问错误消息,您在什么情况下做了什么? PS 引号中的“健康”是什么意思? “链接到”是什么意思?您所遵循的设计方法参考如何没有回答您的问题?它是什么&你被困在哪里?不要要求我们重写它。 How to Ask PS 请use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。 【参考方案1】:

在两个表之间有多个外键是完全正常的。这取决于表之间关系的业务定义。

为什么你觉得不正常?

无论如何,作为一个例子,你可以这样做:

create table UserInfo (
  id int primary key not null,
  name varchar(20),
  password varchar(20),
  role int
);

create table TestResult (
  id int primary key not null,
  added_by int references UserInfo (id),
  created_by int references UserInfo (id)
);

【讨论】:

以上是关于数据库表有两个FK到同一个表的主要内容,如果未能解决你的问题,请参考以下文章

hibernate多对多映射中间表有多余字段问题该如何映射

如何从A表中的数据更新到B表中,两个表中有相同的姓名字段。即A表有姓名字段,B表有姓名字段。

基于 FK 检索关系上的字段

如何从每一行插入到多个表中

ARCGIS中两个属性表有重复的如何把重复的选择出来

将数据插入临时表