【问题标题】:mysql structure for posts and comments用于帖子和评论的mysql结构
【发布时间】:2012-02-07 03:17:57
【问题描述】:

我已经阅读了几个教程、有关 mysql、数据库结构的文档,而且我已经通过 php 使用它数周了。现在我遇到了一个问题,我不知道如何为帖子和 cmets 形成/组织/创建我的数据库结构。我已经阅读了一些关于此的帖子(在 stackoverflow 上),但我没有发现任何有用的东西。我知道我需要有 2 个用于帖子和 cmets 的表,当我需要使用外键(或 ID)在页面上打印它们时,我“合并”它们(仅在页面上,而不是使用 SQL)。当一个人在查看页面时,他可以正常查看帖子和 cmets,但在“后台”中,所有内容都存储在 2 个表中。

每次有人添加新评论或回复时,我是否需要添加新列?

如果我的问题是真的,这意味着如果一个帖子中有 100 多个 cmets,这意味着我每次都需要 ALTER the TABLE?这意味着如果帖子“A”有 3 个 cmets,而帖子“B”有 150 个 cmets,我的表“cmets”将有 100 多列?

例如:

帖子 | 第 1 列 | 第 2 列 | ... | 列N

A |布拉1 |布拉2 |布拉3 | - 空 | - 空 | ... | - 空 - |

B |布拉1 |巴尔2 |布拉3 |布拉4 |布拉5 |布拉6 | ... | bla100 |

【问题讨论】:

  • 没有。 'alter table' 应该是一个非常少见的东西,只响应“业务需求”的变化。谷歌“数据库规范化”(和一般 RDBMS 理论)来了解如何/为什么更好地构建您的数据库。
  • 不,你说的是 CommentID 和 CommentContent 并为每个评论添加另一行。
  • 我同意@Marc B ...但是快速回答是这样的结构:POSTS(id,title,text);COMMENTS(id,postid,text);。每个帖子在POSTS 中有一行,每个评论在COMMENTS 中有一行。通过使用与帖子的posts.id 匹配的comments.postid,您可以知道哪些cmet 用于哪些帖子。

标签: mysql comments posts


【解决方案1】:

在基本级别上,您的应用程序中的每种“事物”都会有一个表格。在这种情况下,一个用于 Posts 的表和一个用于 Comments 的表。就这么简单:

Post
--------
Id
Content
User
DatePosted

Comment
--------
Id
PostId
Content
User
DatePosted

这将在帖子和评论之间创建所谓的一对多(或实际上是零对多)关系,其中每个帖子可以有零个或多个相关联的 Pomments,但每个评论只能与一个帖子相关联.

在您的代码(完全是另一个主题)中,要显示帖子及其相关评论,您可以做几件事。假设您有所需帖子的Id 作为输入,您可以获得该帖子及其评论:

SELECT `Content`, `User`, `DatePosted` FROM `Post` WHERE `Id` = ?Id
SELECT `Id`, `Content`, `User`, `DatePosted` FROM `Comment` WHERE `PostId` = ?Id

如何处理生成的数据取决于您以及您希望如何在应用程序中使用它。它将作为两个表结果返回,前者有一个记录(如果 Post 存在),后者有零个或多个记录。自然,您会在尝试使用它们之前检查它们是否存在,等等。(因此,如果第一个查询没有返回结果,请不要尝试继续显示帖子。只显示默认响应或错误。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2021-03-14
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多