假设有实体称为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)