我需要存储一些与某些实体相关的审查标志。每个审核标志只能与单个实体属性组相关。例如表 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?及其相关链接看起来不是很简单,我不想给自己挖坑。感谢野生动物。一旦我多读了一点,我就会回来。
最佳答案
哦,是的。他们的想法更简单,直到你想加强它。鉴于该计划,他们提议如果每个实体需要两次审查会怎样。如果您想附加其他内容(例如注释/注释)怎么办?一旦他们发现他们的想法是多少充气飞镖靶,您需要做什么才能转向更有用的飞镖靶?更不用说您需要某种识别状态字段的方法,例如列名以“_Status”结尾的脆弱垃圾,或者您必须在某处对它们进行硬编码。
正确地完成它并没有那么多的工作,它并不复杂,事实上,在许多方面它更简单,并且它将以低得多的成本应对不可避免的变化。
关于sql - 在数据库中实现审查标志;最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915137/