在RDBMS中,我相信有几种方法可以设计表之间的关系。因此,我想问一下,在创建带有关联表的和没有关联表的之间,的优缺点是什么?和的缺点是什么?有没有一个正式的解决方案来决定两者?
使用泛型表格,下面我演示了我的意思:
示例#1 (无关联表)
用户
+----+-------+
| 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 (带关联表)
用户
+----+-------+
| 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
中。
发布于 2018-06-13 00:34:36
没有正式的东西,没有。
优点:
根据您定义的键,
表可以在不修改现有表的情况下将其添加到现有数据库中。
缺点:
额外的表会使你的模式变得有点混乱。当查询比较复杂的时候,一个额外的连接可能会影响到performance.
的(
顺便说一句,comment_user表中的id列似乎毫无意义。
发布于 2018-06-09 03:32:14
您错误地使用了术语“数据透视表”。中间表有多种术语;常用名称包括连接表和关联表。优点和缺点也很奇怪--您正在征求意见,这在Stack Overflow上是明确不允许的。但是,你的问题是相当误导的。因此,这是值得回答的。
你的两个选项做了不同的事情。第一个实现了1:n关系。一个给定的用户可以有很多评论。但是一个评论只能属于一个用户。
第二个实现了m:n关系。一个给定的用户可以有很多评论。一个给定的评论也可以有许多用户。
显然,1:n关系可以作为m:n关系的特例来实现。然而,这是过度杀伤力和低效的。
用户和评论之间的关系通常是1:n,因此第一种结构看起来更自然。
https://stackoverflow.com/questions/50767249
复制相似问题