小编gro*_*tar的帖子

存储具有来自同一外部表的恰好 n 个外键的记录的替代方法,其中关系不能重复

假设有实体称为singulars,实体称为relationships

singulars组成一个relationships实体正好需要两个。

单数不能relationships以任何顺序在中的其他地方重复。

建模它的一种方法可能是这样的:

+----------------+
|relationships   |         +----------+
+----------------+         |singulars |
|id              |         +----------+
|singular_id_1   <---------+id        |
|singular_id_2   <---+     |attribute1|
|pair_description|         |attribute2|
|pair_date       |         |          |
|                |         +----------+
+----------------+
Run Code Online (Sandbox Code Playgroud)

使用这种模式,有必要检查两个外键字段relationships是否存在singulars,它可能在任一侧。顺序无关紧要,但它是在模式中定义的......所以查询最终会得到许多AND/OR组和案例。

扩展这种方法可以为每对存储两条记录,并在singular_id_[n]两侧交换。虽然这解决了一些查询的复杂性,但它会引入额外的复杂性使其不可行。

使用中间表似乎是一种潜在的解决方案:

+----------------+       +-----------------------+
|relationships   |       |singulars_relationships|        +----------+
+----------------+       +-----------------------+        |singulars |
|id              <-------+relationship_id        |        +----------+
|pair_description|       |singular_id            +-------->id        |
|pair_date       |       |                       |        |attribute1|
| …
Run Code Online (Sandbox Code Playgroud)

normalization foreign-key database-theory

6
推荐指数
2
解决办法
282
查看次数