基本上,我正在创建一个包含用户和帖子的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
是用户和帖子共享的属性。
然而,我意识到这会导致执行更多查询。
所以最好是保持简单并用属性重复自己吗?
答案 0 :(得分:1)
是的,通常我们会将每个属性保留在它应用的表中,而不是不必要地添加state
表。可以让另一个表具有类似的state
属性。
这远远超过polymorphic-associations,这打破了relation的基本定义。正如您所发现的,要求您编写更复杂的查询。
答案 1 :(得分:0)
这取决于您要优化的用例。如果它是你想要达到的速度,那么一点点的非规范化应该没问题(再次,取决于场景)。
我认为你在这里提出的内容在用户和帖子表中都是有意义的,因为它们不会导致重复数据。而且每个人都对用户和帖子都有意义。
将state
视为userState
和postState
。这种方式在每个方面都有意义。也许在将来,用户会获得除删除之外的其他州(例如:'正在删除'),但对于帖子而言则不然。