用户帖子共享系统的最佳表格结构是什么?

时间:2013-07-20 15:07:40

标签: php mysql database-design web-application-design table-structure

我正在创建一个用户可以创建内容的应用,其他用户可以喜欢,评论这些帖子,现在我想实现共享功能。我想知道实现这个的最佳方法是什么。 以下是帖子的表格结构

| post_id | post_content | post_user | post_date |

用户只能看到他们关注的人发帖。

首先,我想我会在上面的帖子表中添加另一行,但这会产生不必要的数据重复,然后我想在我的user_action表中添加行,我在其中存储帖子喜欢和评论,但那就是制作系统复杂..

我搜索了SO,但找不到任何内容,或者可能是我的搜索字词无法访问这些问题。

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

我同意添加另一行包含重复数据并不好。让我们仔细看看你想要做什么。

您有用户,而且您有帖子。这些应该是具有自己的表的独立实体。

'Like'是N-M关系,因为用户可以喜欢任意数量的帖子,并且任何数量的用户都可以喜欢帖子。所以这将是它自己的表,有两个外键,用户和帖子。

评论与帖子类似,但包含一些内容。相同的用户和帖子组合也可以包含多个评论。评论也将是它自己的表,有两个外键,用户和帖子。这两者的组合在评论中将是独一无二的,但在评论中并不是唯一的。

现在分享部分。您希望用户能够关注其他用户。这也是一种N-M关系,因为任何用户都可以关注任意数量的用户,任何用户都可以跟随任何用户。因此,您需要为两个外键(用户和用户)创建另一个表。这两个用户键的组合将是唯一的。

对于给定的用户John,要查找他所关注的所有用户帖子,我们可以使用以下伪查询:

select posts.*
from posts
join user intermediateUser on posts.author = intermediateUser.id
join follow on follow.followee = intermediateUser.id
where follow.follower = John