【问题标题】:Implementing Review flags in Databases; best practices在数据库中实施审查标志;最佳实践
【发布时间】:2012-06-06 13:24:29
【问题描述】:

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

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

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

问题是我被反驳说不需要Reviews 表,最好只将这些实际评论数据存储在每个实体上。例如,向Parents 添加一个额外的列来保存ParentsStatus。他们认为这是一个更简单的解决方案,而将数据分离出来对于外部场景来说只是“矫枉过正”。

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

空间不是问题。

人们有什么强烈的意见吗?

编辑:

此评论适用于三个答案。共识是关系方法是最好的,但我认为我需要从一些非常基本的阅读Best beginner resources for understanding the EAV database model? 及其相关链接中阅读更多关于 EAV 模型的内容,它似乎不是超级简单,我不想要给自己挖个洞。感谢wildplasser。一旦我阅读更多内容,我将返回。

【问题讨论】:

  • 我不确定我是否理解您的叙述 - 您能否提供一些示例数据,说明您希望在每个表格中看到的内容(希望在正在考虑的两种布局下 - 显示相同的数据建模每种方式)。
  • 我没有看到问题。你所提议的(据我所知)基本上是一个 EAV 数据节点,除了来自一个特殊的类似枚举的域(ReviewPositions 表)的标志
  • @Damien_The_Unbeliver:如果有帮助,我可以做一些示例数据。带我几分钟。
  • @wildpasser。这不是什么大问题,但我被推回去将评论存储在实际实体上,这似乎是个坏主意。我进行了相当多的搜索,但没有找到明确的答案,因此我问道,似乎压倒性的意见是将它们分开。

标签: sql database flags


【解决方案1】:

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

正确地做这件事并没有那么多工作,也没有更复杂,事实上在很多方面它更简单,而且可以以更低的成本应对不可逆转的变化。

【讨论】:

    【解决方案2】:

    标准化总是比过早优化更可取。

    【讨论】:

      【解决方案3】:

      我喜欢单独查看评论表的一个原因是,您可以保留您可能不想显示的更改(因为它尚未经过审核和批准),并且仍然保留旧数据,直到新数据获得批准。不知道你的情况是否需要。

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

      【讨论】:

        猜你喜欢
        • 2010-09-12
        • 1970-01-01
        • 2010-11-07
        • 2015-06-14
        • 2012-02-23
        • 1970-01-01
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        相关资源
        最近更新 更多