在一个表和两个表中表示主题和表?

时间:2012-12-09 04:24:56

标签: database database-design

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

当查询特定论坛的主题时,将显示标题和第一篇文章以及一些用户信息(基本上是名称和头像)。在此应用程序中,除了视图和回复之外,主题和帖子都使用了各种属性;或者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属性保留为null吗? (topic_type引用显示的主题类型的相应图标,并将用于统计等。)

3 个答案:

答案 0 :(得分:1)

如果您肯定致力于使用关系技术(我会考虑使用NoSQL数据库,就像Mongo一样),我会按照您的建议分成两个表。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

区分“主题”和“主题启动者”可能是值得的。 “主题启动器”是不是回复的注释。每个主题都只有一个主题启动器,可以通过主题表中的外键引用。

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