关系数据库中的多个多对多连接:许多表具有外键或单个表没有外键



我目前有 2 种实体类型,它们不会相互继承 - 称它们为 A 和 B,我需要在它们之间创建定向多对多关系。在这种情况下,数据库恰好是MySQL。除了我目前列出的内容外,我正在寻找选项 1 和 2 的客观利弊。甚至可能是更可取的选项 3。

选项 1 - 指定硬编码外键的每个实体类型的单独表

Table 1:
- From_A int FK
- To_A int FK
Table 2:
- From_A int FK 
- To_B int FK
Table 3:
- From_B int FK
- To_A int FK
Table 4:
- From_B int FK
- To_B int FK

选项 2 - 每个连接一个表

Table 1:
- From int
- From_Type int FK
- To int
- To_Type int FK
Table 2:
- ID
- Type_Name

专业选项 1/(选项 2 没有这些专业版(:

  • FK 约束可防止不正确的数据插入
  • InnoDB 缓冲池缓存 FK 关系
  • ORM框架将自动获取连接

专业选项 2/(选项 1 没有这些专业选项(:

  • 需要搜索的表更少,以查找实体的所有关系
  • 可伸缩性 - 多对多关系所需的表数量不会二次增长。如果我有 3 个实体类型,我仍然需要 1 个表而不是 9 个。如果我有 4 种实体类型,我将需要 1 而不是 16

我会有一个表格Types.

然后是一个Entity表,类型为 FK。

每个Entity都有 1 种类型(即 1 到 1(。

然后,要将实体链接在一起,请设置链接表。两列,每个实体的两个 FK。这不会为您提供额外的表格,并且非常灵活。

最新更新