数据库应该简单重复吗?

时间:2014-04-11 18:17:09

标签: mysql

基本上,我正在创建一个包含用户和帖子的rails应用。我希望能够软删除它们。为此,我需要做的就是在用户上创建一个布尔列deleted,然后使用条件来更改向非管理员用户显示的信息:

(导轨)

def administrated_content
    if !self.deleted && !current_user.is_admin?
        self.content
    else
        "This post has been removed"
    end
end

现在我的问题是,保持数据库简单和重复是最好的吗?因为几天前我会说最好创建第三个表,一个state表,并在用户和状态,帖子和状态之间建立一个has_one belongs_to关系。为什么?因为state是用户和帖子共享的属性。

然而,我意识到这会导致执行更多查询。

所以最好是保持简单并用属性重复自己吗?

2 个答案:

答案 0 :(得分:1)

是的,通常我们会将每个属性保留在它应用的表中,而不是不必要地添加state表。可以让另一个表具有类似的state属性。

这远远超过,这打破了relation的基本定义。正如您所发现的,要求您编写更复杂的查询。

答案 1 :(得分:0)

这取决于您要优化的用例。如果它是你想要达到的速度,那么一点点的非规范化应该没问题(再次,取决于场景)。

我认为你在这里提出的内容在用户和帖子表中都是有意义的,因为它们不会导致重复数据。而且每个人都对用户和帖子都有意义。

state视为userStatepostState。这种方式在每个方面都有意义。也许在将来,用户会获得除删除之外的其他州(例如:'正在删除'),但对于帖子而言则不然。