Mysql 混合数据库关系?

Mysql 混合数据库关系?,mysql,database,orm,relational-database,entity-relationship,Mysql,Database,Orm,Relational Database,Entity Relationship,当有三个实体时,Table1Table2和Table3 Table1与Table3 Table2与Table3 Table3有两个组合键,Table1ID和Table2ID 这种关系叫什么?我试图找出如何在ORM中对此进行建模,但因为我甚至不知道这种关系是什么,我甚至不知道从哪里开始。我们通常将其称为自反或双向 在ORM中处理这一点非常重要 如果可以从Table3中删除Table1ID列(删除指向后面的外键),则可以简化模型。但这可能不是你的选择 Hibernate将其称为双向关联;Hibern

当有三个实体时,
Table1
Table2
Table3

Table1
Table3

Table2
Table3

Table3
有两个组合键,
Table1ID
Table2ID


这种关系叫什么?我试图找出如何在ORM中对此进行建模,但因为我甚至不知道这种关系是什么,我甚至不知道从哪里开始。

我们通常将其称为自反或双向

在ORM中处理这一点非常重要

如果可以从
Table3
中删除
Table1ID
列(删除指向后面的外键),则可以简化模型。但这可能不是你的选择

Hibernate将其称为双向关联;Hibernate只会持续该关联的一个“末端”;它不会在两个方向上维护外键


编辑

我查看了模型图(来自您在评论中提供的链接)

它看起来非常像
personVehicle
表是一个关联表,位于
person
vehicle
之间。这与我们在解决多对多关系时看到的模式相同。您的模型看起来像是多对多模型的特例,其中关系的一方仅限于一方

就关键点而言,您的模型如下所示:

person 
  id    PK

vehicle
  id    PK

personVehicle
  person_id  PK, FK->person(id)
  vehicle_id PK, FK->vehicle(id)
如果我理解您的要求,您希望在
车辆
表上表示外键约束,该约束指向personVehicle表中的一行:

vehicle
  id    PK, FK->personVehicle(vehicle_id)
我不知道有哪个ORM会自动在
车辆
表中为您维护这种类型的双向外键。(我不认为不可能在外键列中维护该值,它不仅可以以ORM将在两个方向上维护外键的方式“声明”该关联

(有些数据库(如Oracle)允许我们在插入、更新和删除时延迟外部约束,并将对外键约束的检查延迟到提交,从而创建和维护这样的关系。)

如果有来自
车辆
的外键指向
个人车辆
中的一行,并且要求
个人车辆
中的行必须返回到
车辆
表中的同一行(而不仅仅是某一行)因此,在
vehicle
表中不需要外键。在模型中,
personVehicle
表中的外键已经充分表示了这种关系

如果您需要强制执行一个约束,即车辆最多可与一个人车辆相关,则需要对
个人车辆(车辆id)
进行唯一约束。该约束充分表示模型中的需求

如果这是真正的一对一,并且您需要外键,那么这实际上相当于完全删除
vehicle
表,并将该表中的属性合并到personVehicle表中


编辑

我对自反一词的使用可能是不正确的。我通常指的是一个表,它的外键引用了同一个表中的一列,并且是递归的

就两个表之间的关系而言,其中每个表都有外键,外键指向另一个表……在t1中的行指向t2中的行的情况下,t2中的行指向t1,而不仅仅是任何一行,而是指向引用它的完全相同的行……我认为这是从“反映”的关系来看的回来

这种关系会反射回来。但是我们不使用“反射”这个术语,因为这个术语在Java中有特殊的含义。所以,可能唯一合适的术语是“双向”

典型的双向一对一关系是一个表中的行指向另一个表中的行,该行指向原始表中完全相同的行:

例如:

t1          t2
id  t2_id   id   t1_id
--- -----   ---- ------
1   A       A    1
2   B       B    2
3   C       C    3
t1            t2
id  t2_id     id  t1_id
--- -----     --- ----
1   A         A   2
2   B         B   3
3   C         C   1
另一种形式是,一行不一定引用引用它的同一行。(这通常不限于一对一),但我们仍然有指向两个方向的外键(从t1到t2,从t2到t1)

例如:

t1          t2
id  t2_id   id   t1_id
--- -----   ---- ------
1   A       A    1
2   B       B    2
3   C       C    3
t1            t2
id  t2_id     id  t1_id
--- -----     --- ----
1   A         A   2
2   B         B   3
3   C         C   1
在第一种情况下,我们需要一行具有外键值,该外键值仅引用另一个表中引用回原始行的行

在第二种情况下,我们没有这个要求,如果我从第1行开始,它指向A行,A行指向第2行

就定义数据库中的外键关系而言,约束的定义是相同的。区别通常是外键列可以为NULL,还是必须是唯一的

我认为除了“双向”之外,还有一个术语将第一种情况与更一般的第二种情况区分开来。我认为我使用了“反射性”或“反射性”这一术语,但我可能弄错了


在“递归”关系中,外键指向同一表中的一行,该外键(几乎)总是引用表中的另一行,而不是引用自身。

你想实现什么?对我来说,我看起来像是多对多的特例relation@joshido我的模型是。正如你所看到的,一个人可以有很多辆车,但一辆车只能属于一个人信息和关系。我试过雄辩,我看过《推进》和《教义》,但似乎ORM无法处理这种关系。你有经验吗