在数据库中实现Review标志;最佳做法

时间:2012-06-06 13:24:29

标签: sql database flags

我需要存储一些与某些实体相关的评论标记。每个评论标志只能与单个实体属性组相关。例如,表Parents具有ParentsStatus标志,表Children具有一组ChildrenStatus标志。

在目前的设计方案中,我有三个表:

  • ReviewTypes:存储标志及其相关的属性。
  • ReviewPositions:存储标志可以拥有的值。
  • Reviews:存储交易数据,实际评论。它就像UsersToFlags:Flags in a database rows, best practices

问题是我正在回击说没有必要拥有Reviews表,最好只将这个实际审核数据存储在每个实体上。例如,在Parents添加一个额外列以保留ParentsStatus。他们认为这是一个更简单的解决方案,将数据分离出去仅仅是“过度杀戮”。

我不喜欢这个想法,因为这意味着每次我们想要添加新的评论标志时,我们需要更新核心实体表来保存该标志。

空间不是问题。

人们有什么强烈意见吗?

编辑:

此评论适用于三个答案。共识是关系方法是最好的,但我认为我需要阅读更多关于EAV模型的内容,从一些非常基本的阅读Best beginner resources for understanding the EAV database model?及其相关链接看起来并不是非常直接的,我不喜欢我想挖一个洞。感谢wildplasser。一旦我读了一点,我就会回来。

3 个答案:

答案 0 :(得分:3)

哦,是的。他们的想法更简单,直到你想要增强它。鉴于该计划,他们提议如果每个实体需要两次审核。如果您想附加其他内容(如注释/注释),该怎么办?一旦他们发现了他们的想法是多少的充气飞镖,你有什么需要转向更有用的?更不用说你需要一些识别状态字段的方法,像列名这样的脆弱垃圾以“_Status”结尾,或者你必须在某处硬编码。

正确地做到这一点并不是更多的工作,它并不复杂,实际上在很多方面它更简单,它将以更低的成本应对可改变的变化。

答案 1 :(得分:2)

归一化总是优于过早优化。

答案 2 :(得分:1)

我将评论表分开的一个原因是您可以保留您可能不想显示的更改(因为它尚未经过审核和批准),并且在新的批准之前仍然保留旧的数据。我不知道你的情况是否需要。

为了使将来的编程更简单,当您想要显示更改时,您可以编写一个显示旧数据和新数据的视图。

相关问题