本题基于the thread .
如果我们有一对多的数据结构,我们需要有一个“帮助表”来存储例如一个人的电话号码。很多人不能拥有相同的电话号码。
我期待着解释为什么我们需要两个多对多关系之间的“帮助表”。这方面的一个例子是一个问题网站,许多用户可以在其中添加相同的标签:
alt text http://files.getdropbox.com/u/175564/db/db-55.png
为什么我们需要表 Question-Tag-xref
和 Question-Tags
?
为什么我们不能像下面这样只有一张标签表?
Question_id | tag
1 C
1 C++
2 Java
2 C
为什么两个不同的问题具有相同的标签是计算机的问题?
最佳答案
那只是一张“额外”的 table 。
因为同一个问题可能有很多标签。
而且因为同一个标签可能被很多问题使用。
您需要在某处存储 (questionId, tagId) 并确保没有重复项。
我一直没有关注你关于这个主题的问题,但看起来这里的设计有些糟糕。我以为你只有一张额外的 table ,因为我假设你有一个合理的结构。你没有。
为什么 Question-Tags 同时具有标签字符串和标签 ID?这对我来说意义不大。
我不想回顾问题的顺序。尽管如此,我还是想尝试说明我在说什么。因此,我使用 NORMA 创建了 StackOverflow 的这一部分的非常简单的对象角色建模模型。工具:
这生成了以下 ER 图:
请注意,“额外”表是我们需要为标签保留的全部内容,只是因为没有保留有关标签的其他信息。此外,无需存储作为标签表外键的标签 ID,因为标签名称已经是唯一的。如果我们保留关于标签的额外数据,那么可能会有一个单独的标签表,主键仍然是标签名称。如果它成为性能问题,可以将其更改为使用整数 ID,在这种情况下,标签名称仍会在其上获得唯一索引。
关于database - 为什么多对多数据结构需要额外的两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185626/