数据库 - 评估,评论等多个实体(博客,状态,照片等)

时间:2014-01-20 17:20:06

标签: social-networking database-schema

我们将离开用户和其他社交媒体机制(例如通知,朋友等)。我们希望关注用户可能发布的内容以及其他用户如何与之互动。

到目前为止,我们将为每个实体提供表格。

我认为我们将为每个实体 - 交互组合提供表格,以跟踪哪个记录的评级,评论等。例如,对于Blog,我们会有BlogRatings,BlogComments,BlogFlags,BlogLikes和BlogShares。

但是对于我们稍后添加的每个实体{E},我们需要为{E}评级,{E}评论,{E}标志,{E}喜欢和{E}股创建表格。然后,如果我们想出一个新的交互,我们需要编写与已存在的实体一样多的新表,以便用户可以对所有内容执行新的交互。这看起来真的很乏味。

我如何计划这样的表来最小化/简化维护?

1 个答案:

答案 0 :(得分:0)

这是使用单表继承的解决方案,但在这种情况下您可能希望查看类表继承。

--postgres syntax

create table nodes (
  node_id serial primary key,
  type varchar(20) not null check (type in ('BLOG_POST','PHOTO','STATUS_UPDATE') ),
  blog_title text null,
  blog_body text null,
  status_body text null,
  ...
);

create table comments (
  comment_id serial primary key,
  node_id int not null references nodes(node_id),
  comment text not null,
  parent_comment_id int null references comments(id)
  ...
);

您还可以将评论视为一种节点。您可以将喜欢,评级,旗帜和可能的分组分组为“反馈”类型