我应该将这些表合并为一个,还是将它们分开?

时间:2017-04-25 02:03:09

标签: database postgresql database-design database-normalization

在我作为网站的一部分编写的问题/答案论坛组件中,我有两个理论上看起来像这样的表(也就是说,我希望为每个实体保留所说的数据):

THREAD                 POST
thread_id              post_id   
type_id (question)     writer_id
writer_id              thread_id  
title                  parent_id
body (optional)        post_body
followers              date
merge_id               upvotes
date                   dnvotes
upvotes                replies
dnvotes                views
replies                post_type_id (e.g. answer, comment to an answer etc.)
views
anonymous

这些实体之间唯一真正的区别是merge_id(如果一个问题合并到另一个,这个id将引用所说的question_id),关注者和标题。将它们组合成一个对我来说似乎有点麻烦和臃肿,而且我认为似乎开始有点非规范化。并且,如果他们是一个人,那么身体和头衔都必须是可以为空的,他们不应该这样做(我知道代码中可以有保护措施)。

我还想过线程只包含不在帖子中的属性,如下所示:

THREAD
thread_id (or post_id which would be primary and foreign key refing POST)
title
merge_id
followers

但这也感觉不对。

此外,如果它有所不同,我打算以quora的风格经常显示问题以及排名最高的答案。

非常感谢任何设计建议。

(另外,我保留他们的通用(线程/帖子),以便在需要时我可以将这些表用于博客或其他任何其他内容。)

1 个答案:

答案 0 :(得分:0)

在我看来,这些应该是两个独立的表格。

为了帮助您做出决定,请了解您将如何使用它们。

如果你在SQL查询中对它们进行相同处理,并且你通常不关心某些事情是帖子还是线程,那么使用单个表是有意义的。 如果你以不同的方式对待它们(我期望),请使用两个表格。