关联 table 的优缺点是什么?

What are the pros and cons of associative table?

在 RDBMS 中,我相信有几种方法可以设计 table 之间的关系。因此,我想问一下 proscons 在创建关系 with associative table 没有关联 table。是否有正式的解决方案来决定两者?

使用泛型tables,下面我演示我的意思:

示例 #1(无关联 table)

用户

+----+-------+
| id | name  |
+----+-------+
|  1 | John  |
|  2 | James |
|  3 | Jacob |
+----+-------+

评论

+----+-----------------------------+---------+
| id |            text             | user_id |
+----+-----------------------------+---------+
|  1 | Lorem ipsum dolor sit amet. |       1 |
|  2 | Praesent ultricies libero.  |       2 |
|  3 | Donec eget blandit nunc.    |       3 |
+----+-----------------------------+---------+

注:评论作者的引用存储在comments.

示例 #2(具有关联 table)

用户

+----+-------+  
| id |  name |  
+----+-------+  
| 1  |  John |  
| 2  | James |  
| 3  | Jacob |  
+----+-------+  

评论

+----+-----------------------------+  
| id |                        text |  
+----+-----------------------------+  
| 1  | Lorem ipsum dolor sit amet. |  
| 2  |  Praesent ultricies libero. |  
| 3  |    Donec eget blandit nunc. |  
+----+-----------------------------+  

comment_user

+----+--------------+-----------+
| id | comment_id   | user_id   |
+----+--------------+-----------+
| 1  | 1            |        1  |
| 2  | 2            |        2  |
| 3  | 3            |        3  |  
+----+--------------+-----------+

注意:评论作者的引用存储在comment_user.

您使用的术语 "pivot table" 不正确。中间有各种说法table;常用名称包括结点 table 和关联 table。优点和缺点也很奇怪——你在征求意见,这在 Stack Overflow 上是明确不允许的。但是,你的问题相当误导。因此,值得回答。

你的两个选项做不同的事情。第一个实现 1:n 关系。一个给定的用户可以有很多评论。但是一条评论只能属于一个用户。

第二个实现 m:n 关系。一个给定的用户可以有很多评论。给定的评论也可以有很多用户。

显然,1:n 关系可以作为 m:n 关系的特例来实现。然而,这是矫枉过正且效率低下。

用户和评论之间的关系通常是 1:n,因此第一个结构似乎更自然。

没有什么正式的,没有。

优点:

  • 关联 tables 可以处理一对一、一对多和多对多关系,具体取决于您定义的键。
  • 您可以在没有用户的情况下发表评论(不使用 NULL)。
  • 可以将关联 table 添加到现有数据库,而无需修改现有 table。

缺点:

  • 额外的 table 会使您的架构有点混乱。
  • 查询时的额外连接有点复杂,可能会影响性能。
  • 确保每个评论都有一个用户(如果这是一个要求)更复杂。

顺便说一句,comment_user table 中的 id 列似乎毫无意义。