代码之家  ›  专栏  ›  技术社区  ›  Glide

需要关联表的多对多关系

  •  1
  • Glide  · 技术社区  · 14 年前

    在许多数据库设计教程/文章中,它们总是提出这样一个事实:如果两个表共享多对多关系,那么应该创建第三个表作为关联表来链接这两个表。

    然而 ,他们从不提供原因 为什么? 我们应该那样做。我很想知道 以及 可能出现的问题

    5 回复  |  直到 14 年前
        1
  •  2
  •   Jonny    14 年前

    使用关系数据库不能以任何其他方式建立多对多关系。也就是说,如果你有一个名为“person”的表,你就不能创建一个列“friends”并期望在其中放置许多friends的用户id。您必须创建一个单独的表来保存关系本身。

        2
  •  4
  •   nvogel    14 年前

    在关系数据库中,所有关系都只以一种方式表示:关系(关系对应于SQL中的表)。具有两个属性的关系,如R{A,B},表示A和B之间的二进制关系。例如,这种关系可以是一对多或多对多。

    如果由R{A,B}表示的关系是多对多的,这意味着A或B都不是候选键(因为如果其中一个是唯一的,那么很明显,该属性的每个值只允许一个元组)。这意味着第三范式的原理要求依赖于A或B的任何属性进入其他表。原因是非键依赖(依赖于A或B的属性)是一种冗余形式,可能导致异常和不正确的结果。

    因此,并不是说“多对多关系”与其他关系有什么不同。只是规范化通常会导致一种常见的模式,即表具有复合键,而没有其他非键属性。有些人喜欢将这种模式称为关联表——尽管我个人认为这个术语没有多大帮助。

        3
  •  2
  •   Guffa    14 年前

    如果不创建第三个表,就没有地方存储关系。

    能够

        4
  •  1
  •   hasan najeeb    5 年前

    让我们用一个例子来理解它。如果你有两张桌子,一张是苹果桌,另一张是人桌,他们有一种多对多的关系;这意味着一个人可以拥有多个苹果,一个苹果可以被多人分享吃掉。

    enter image description here

    enter image description here

    enter image description here

    参考文献: https://openclassrooms.com/en/courses/2071486-retrieve-data-using-sql/5758019-create-an-association-table

        5
  •  0
  •   Yves M.    14 年前

    维基百科也对此进行了描述。看看吧: http://en.wikipedia.org/wiki/Many-to-many_(data_model)

        6
  •  0
  •   Kaan    14 年前

    如果DB Server可以为您创建第三个表,这将是不灵活的。如果有这样的解决办法,你就不会对我有多大影响

    • 改变关系行为

    • 在关联表中存储其他关联信息

    • 性能增强

    • 存储增强功能