更多表VS更多列

时间:2018-01-19 01:35:35

标签: sql database-design

在我的场景中,我想记录用户的活动,例如检查某人的个人资料......我可以通过两种方式执行此操作

第一个有两个表格:

post_view:

        user_id | post_id | times | created_at | updated_at
           1    |    1    |  13   | 2018-01-19 | 2018-01-19

user_view:

         user_id | video_id | times | created_at | updated_at
            1    |    2     |  11   | 2018-01-19 | 2018-01-19

注意:

甚至可以更多..!

第二个有一张桌子:

观点:

        user_id | target_id | view | times | created_at | updated_at
           1    |     1     | post |  13   | 2018-01-19 | 2018-01-19
           1    |     2     | user |  11   | 2018-01-19 | 2018-01-19

enter image description here

我认为拥有更多的表比拥有更多列更好...因为在1000条记录而不是2000条中找到更容易的东西更容易!你的想法是什么?!

1 个答案:

答案 0 :(得分:0)

两个表格更好,但不是因为你给出的原因。

原因是您可以正确声明外键关系:

create table post_view as (
    user_id int references users(user_id),
    post_id int references posts(post_id),
    . . .
);

声明的外键关系非常强大。在组合表中,target_id没有这种关系。

那就是说,出于性能原因,我的实际偏好是针对单个表。这更容易维护(单个表),更容易调查(单个表),更容易添加新类型(单个表)。缺点是保持关系完整性,这有点棘手。