5

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

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

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

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

谢谢

4

1 回答 1

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

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

于 2013-11-05T15:22:00.477 回答