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无法处理这种关系。你有经验吗