我目前正在为更大的应用程序构建一个论坛组件,我正在考虑对数据库模式的某些部分采用不同的方法。特别是,我正在考虑在一个表格中代表主题和帖子。虽然我认为主题和帖子几乎一样,但我觉得有点担心,因为这可能会使未来的事情变得不那么灵活。
当查询特定论坛的主题时,将显示标题和第一篇文章以及一些用户信息(基本上是名称和头像)。在此应用程序中,除了视图和回复之外,主题和帖子都使用了各种属性;或者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引用显示的主题类型的相应图标,并将用于统计等。)
答案 0 :(得分:1)
如果您肯定致力于使用关系技术(我会考虑使用NoSQL数据库,就像Mongo一样),我会按照您的建议分成两个表。
这里的案例是关系主要细节设计或整体部分的基础,我认为这两个表是合适的。
答案 1 :(得分:0)
我认为在这种情况下,首选简单规范化。生成不同类型的报告也很有用。虽然可以使用单个表,但是如果您使用两个更易于管理的表来避免多次输入相同值,则在这种情况下设计了表。
答案 2 :(得分:0)
区分“主题”和“主题启动者”可能是值得的。 “主题启动器”是不是回复的注释。每个主题都只有一个主题启动器,可以通过主题表中的外键引用。
除此之外,我同意你的分析和你的设计。