gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:32:57 26 4
gpt4 key购买 nike

我正在创建一个数据库来存储有关乐器的信息。我正在使用 MySQL Workbench 中的 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

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

关于mysql - 为什么要在多对多关系中创建一个新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19792271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com