为什么在多对多关系中创建一个新表?

jam*_*802 5 mysql database relational-database mysql-workbench

我正在创建一个数据库来存储有关乐器的信息。我在 MySQL 工作台中使用 EER 图来可视化每个表之间的关系。

当我创建多对多 (n:m) 关系时,会创建一个新表,其中包含新关系中涉及的表的两个主键。其他关系,如一对多 (1:n),只是将第二个表的主键作为外键添加到原始表中,并没有创建额外的表。

例如,我试图创建一个关系,表明 1 种乐器可以出现在多张 CD 上,而 1 张 CD 可以出现多种乐器。

为什么要创建这个额外的表,它的用途是什么?

谢谢

Exp*_*lls 5

该表有很多名称:“映射”表、“间接”表等等。它是CD和乐器之间关系的纽带。

如果仪器有 CD 列,则仪器只能引用 CD,反之亦然。

如果您的同一仪器在多行中具有不同的 CD,则架构将被非规范化。您需要 CD 行中存在相同的关系,但不能保证这一点。

相反,您可以使用此表来标识 CD 和乐器之间的关系。相同的乐器或 CD 可以在此表中出现多次,从而允许 CD 属于多个乐器,反之亦然。

带有映射表:

CDs    Mappings    Instruments
A       A <-> E        E
B       A <-> F        F
C       C <-> G        G
D       D <-> G
Run Code Online (Sandbox Code Playgroud)

没有映射表:

  CDs
CD   Instrument
A    E
A    F
B    null
C    G
D    G
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,我将解释为什么在一对多关系中不需要另一个表。只能与另一个表中的一个实体相关的表可以将这种关系存储在一行中。同一项目的多行是不必要的。您可以使用映射表,但是“一个”项目的列必须是唯一的,这使得附加表变得不必要,因为无论如何每个项目只能有一行。