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



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

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

例如,我试图创建一个关系,显示一个乐器可以在许多CD上播放,而一个CD可以播放许多乐器。

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

感谢

这个表有很多名称:"映射"表、"间接"表等等。它是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

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

最新更新