"like on posts"关系型数据库如何设计?

How to design "like on posts" in relational databases?

我正在开发一种社交应用程序,用户可以在其中写一个 post,然后在其他 post 上给 like

并且在前端用户可以看到 post 有多少个赞。

在这种情况下,如何处理每个 post 的点赞数?

到目前为止我一直在想的是...

(1)维护主键user_idpost_idpost_likestable。每次用户在 post 上点赞时,都会在 table 上附加一个新行。点赞数是根据 post_likes table.

的相应行数计算得出的

(2) posts table 有一个 like_count 列。每次用户对 post 点赞时,该列的值都会增加 1。点赞数是根据选择 like_count 值计算的。

我认为实施 (1) 会更好,因为用户喜欢 post。但是,它似乎效率低下,因为应该执行 select COUNT(*) 以便在用户请求页面时获得喜欢计数。

在这种情况下最好的方法是什么?

两种方法各有利弊,但我认为方法 (1) 是更好的选择,原因如下:

  • 您可以阻止用户为他们自己的 post 点赞(如果您想要实施)。
  • 您可以允许用户删除他们的赞。
  • 您可以防止一个用户多次点赞post。

如果性能有问题,您可以选择新的 table post_likes_count,它将定期从 post_likes 更新,新的点赞数达到 post。同样,请记住,这取决于您具体想要完成什么。