0

我目前正在为一个更大的应用程序构建一个论坛组件,并且我正在考虑对数据库模式的某些部分采用不同的方法。特别是,我正在考虑在一个表格中表示主题和帖子。虽然我认为主题和帖子几乎相同,但我感到有点担心,因为这可能会使未来的事情变得不那么灵活。

当查询特定论坛的主题时,将显示标题和第一篇文章以及一些用户信息(基本上是名称和头像)。在这个应用程序中,除了视图和回复之外,主题和帖子都使用了各种属性;也许还有 title 和 forum_id(forum_id 因为这意味着如果将主题更改为另一个论坛而不是更改主题关系中的 forum_id 属性,则可能需要影响数百条记录)。

这些表格看起来像我在下面的内容:

TOPIC            POST           
topic_id         poster_id   
forum_id         topic_id 
poster_id        content 
title            upvote
views            dnvote
replies          closed
post_id          deleted
                 last_edited
                 last_editor
                 parent_id
                 content
                 post_id

这样做,使用表继承,在主题中生成帖子将需要通过 TOPIC、POST、USER 和 TOPIC_TYPE 进行 4 表连接。

另一方面,如果我决定采用单表方法,如果 topic_type 是常规帖子,我是否应该简单地将视图、回复、标题和 forum_id 属性保留为空?(topic_type 为显示的主题类型引用了一个适当的图标,并将用于统计等)

4

3 回答 3

1

如果您绝对致力于使用关系技术(我也会考虑使用 NoSQL db,例如 Mongo 等),我会按照您的建议将其分成两个表。

您的案例是关系主细节设计或整体部分的基础,我认为两张表是合适的。

于 2012-12-09T04:33:38.577 回答
0

区分“主题”和“主题启动器”可能是值得的。“主题启动器”是不是回复的评论。每个主题只有一个主题起始符,可以由主题表中的外键引用。

除此之外,我同意你的分析和你的设计。

于 2012-12-09T06:26:24.987 回答
0

我认为在这种情况下,简单的标准化是首选。生成不同类型的报告也很有用。虽然可以使用单个表,但正如您在这种情况下设计的表,如果您使用两个更易于管理的表,以避免多次输入相同的值。

于 2012-12-09T04:57:01.687 回答