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

时间:2013-11-05 15:14:46

标签: mysql database relational-database mysql-workbench

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

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

例如,我正在尝试创建一种关系,表明1台乐器可以在许多CD上播放,1张CD可以播放许多乐器。

为什么要创建这个额外的表以及它用于什么?

由于

1 个答案:

答案 0 :(得分:4)

该表有许多名称:“映射”表,“间接”表等。它是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

没有映射表:

  CDs
CD   Instrument
A    E
A    F
B    null
C    G
D    G

为清楚起见,我将解释为什么在一对多关系中不需要另一个表。只能与另一个表中的一个实体相关的表可以将此关系存储在一行中。同一项的多行是不必要的。你可以使用映射表,但是“one”项的列必须是唯一的,这使得额外的表不必要,因为每个项目只能有一行。