在我的场景中,我想记录用户的活动,例如检查某人的个人资料......我可以通过两种方式执行此操作
第一个有两个表格:
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
我认为拥有更多的表比拥有更多列更好...因为在1000条记录而不是2000条中找到更容易的东西更容易!你的想法是什么?!
答案 0 :(得分:0)
两个表格更好,但不是因为你给出的原因。
原因是您可以正确声明外键关系:
create table post_view as (
user_id int references users(user_id),
post_id int references posts(post_id),
. . .
);
声明的外键关系非常强大。在组合表中,target_id
没有这种关系。
那就是说,出于性能原因,我的实际偏好是针对单个表。这更容易维护(单个表),更容易调查(单个表),更容易添加新类型(单个表)。缺点是保持关系完整性,这有点棘手。