0

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

| post_id | post_content | post_user | post_date |

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

首先,我想我会在上面的帖子表中添加另一行,但这会造成不必要的数据重复,然后我想在我的 user_action 表中添加行,我在其中存储帖子喜欢和评论,但这使系统变得复杂..

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

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

4

1 回答 1

0

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

你有用户,你有帖子。这些绝对应该是具有自己表的单独实体。

“点赞”是一种 NM 关系,因为用户可以点赞任意数量的帖子,并且帖子可以被任意数量的用户点赞。所以这将是它自己的表,有两个外键,用户和帖子。

评论类似于帖子,但包含一些内容。相同的用户和帖子组合也可以包含多个评论。评论也将是它自己的带有两个外键的表,用户和帖子。这两者的组合将是唯一的like,但非唯一的评论。

现在分享部分。您希望用户能够关注其他用户。这也是一种 NM 关系,因为任何用户都可以关注任意数量的用户,并且任何用户都可以被任意数量的用户关注。因此,您将需要一个具有两个外键 user 和 user 的关系的表。这两个用户密钥的组合将是唯一的。

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

select posts.*
from posts
join user intermediateUser on posts.author = intermediateUser.id
join follow on follow.followee = intermediateUser.id
where follow.follower = John
于 2013-07-20T17:44:46.073 回答