数据库1:N表结构,两种方法(一个或多个表)

时间:2017-07-26 08:48:11

标签: database database-design architecture relational-database

我们假设我们有应用页面,帖子和事件。对于此应用程序的每个部分,我们希望有评论。现在让我们来看看我们的数据库表。

1。一个注释表,object和object_id作为外键

Page / Post / Event有很多注释,外键对象,object_id

comments table
+-------------+-------------+-------------+-------------+
| id          | object      | object_id   | text        |
=========================================================
| 1           | Page        | 1           | Comment 1   |
+-------------+-------------+-------------+-------------+
| 2           | Post        | 1           | Comment 2   |
+-------------+-------------+-------------+-------------+
| 3           | Event       | 1           | Comment 3   |
+-------------+-------------+-------------+-------------+

2。多个评论表

页面(帖子,事件)有很多页面注释,外键是page_id

page_comments table
+-------------+-------------+-------------+
| id          | page_id     | text        |
===========================================
| 1           | 1           | Comment 1   |
+-------------+-------------+-------------+

post_comments table
+-------------+-------------+-------------+
| id          | post_id     | text        |
===========================================
| 1           | 1           | Comment 2   |
+-------------+-------------+-------------+

event_comments table
+-------------+-------------+-------------+
| id          | event_id    | text        |
===========================================
| 1           | 1           | Comment 3   |
+-------------+-------------+-------------+

我使用了具体的例子,但这可以适用于任何其他1:N表格,甚至适用于M:N(标签),但对于简单的展示,这应该是好的。

我们应该讨论

  • 表现问题
  • 设计利弊

初步想法

  • 案例1表示DB中的表格更少,更易于阅读,可重复使用的应用程序代码
  • 案例1在对所有评论进行查询时更好(在案例2中必须使用union)
  • 案例2在归一化(3NF)方面更好
  • 情况2更容易备份(转储)系统的部分,例如,页面本身及其评论
  • 案例2的性能应该更好,因为行数越少=>更快

0 个答案:

没有答案