【问题标题】:What would be the best table structure for user post sharing system?用户帖子共享系统的最佳表结构是什么?
【发布时间】:2013-07-20 15:07:40
【问题描述】:

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

| post_id | post_content | post_user | post_date |

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

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

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

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

【问题讨论】:

  • 你能发布你已经创建的表的完整结构吗?
  • 你现在还没有创建任何表?
  • 你可以在上面看到我的帖子表
  • ok... 看起来没有多少表可以开始。在这种情况下,我会说从您拥有的 post 表开始,编写一些使用该表的示例 php 代码,并随着您的应用程序的进展,在需要时添加更多表。基本思想是您的数据库表设计应该取决于您的应用程序需求(而不是相反)。
  • 此外,您可能还想研究 wordpress 的数据库设计,因为您似乎正在尝试在这里做类似的事情。

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


【解决方案1】:

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

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

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

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

现在是分享部分。您希望用户能够关注其他用户。这也是一个 N-M 关系,因为任何用户都可以关注任意数量的用户,并且任何用户都可以被任意数量的用户关注。因此,您将需要一个具有两个外键 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

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多