Postgresql 关于让用户与其他用户共享帖子功能的优化数据库设计

Postgresql 关于让用户与其他用户共享帖子功能的优化数据库设计,postgresql,database-design,left-join,Postgresql,Database Design,Left Join,我想实现一些功能,让用户分享其他用户的帖子,类似于Facebook、Google+共享按钮和twitter转发 有两种选择: 1) 我创建了该帖子的副本,并有一列跟踪原始帖子id,明确这是一篇共享帖子 2) 我有一个单独的表共享post,我在其中保存post id,它是post表中post id的外键 从编程的角度讲,基本上我把指向原始帖子的指针放在一个单独的表中,当需要用户发布帖子和共享帖子时,我会在帖子和共享帖子表上进行左连接 Post(post_id(PK), post_conte

我想实现一些功能,让用户分享其他用户的帖子,类似于Facebook、Google+共享按钮和twitter转发

有两种选择:

1) 我创建了该帖子的副本,并有一列跟踪原始帖子id,明确这是一篇共享帖子

2) 我有一个单独的表共享post,我在其中保存post id,它是post表中post id的外键

从编程的角度讲,基本上我把指向原始帖子的指针放在一个单独的表中,当需要用户发布帖子和共享帖子时,我会在帖子和共享帖子表上进行左连接

    Post(post_id(PK), post_content, posted_by)

    SharedPost(post_id(FK to Post.post_id), sharing_user, sharedfrom(in case someone shares from non owners profile))
我赞成第二选择,但想知道专家们的建议


有一件事,我的webapp上的帖子更多的是facebook大小,而不是tweet大小。

我建议您的系统执行以下两种操作之一: 将引用原始帖子的帖子代码内联(类似于超链接)。我不知道你是否在试图吸引图像或其他媒体。当您遇到这种内联代码时,您的系统可以创建一个超链接来查看原始数据,或者将原始数据拉入共享它的帖子中

或者,您的
posts
表可以有一个
shared\u post
列,该列可以是
post\u id
或指向要共享的外部项目的超链接。然后,您的系统可以识别,如果该值为
null
-1
,则它不是共享帖子,可以正常处理

我不建议创建一个新表来存储共享帖子的副本。它变得更难维护和更新


此外,如果您计划让共享组参与此系统,您很可能需要另一个表,将
post\u id
链接到
sharing\u group\u id

,所以您是说我创建了一个新的帖子,在帖子内容中添加一些链接到原始帖子,当这个链接发挥作用时,显示这个链接指向的原始内容。对吧?这是一个选择。另一个是必须使用链接(跟随/单击)才能转到原始帖子的准备视图。当用户跟随链接时,这不需要额外的db查询吗?然而,带来原始的帖子内容需要自我加入。这是正确的。这完全取决于你的要求。只是想让你知道一些设计选项。