我一直在为即将到来的项目做大量关于数据库设计的研究。
这是典型的内部平台问题,我们的客户基本上想要无限的自定义以及在实体上创建表单和属性的能力,从最终用户那里收集它们的值,并能够在图表上显示收集到的信息。
临床医生将使用一些东西来帮助监测患者,为什么即使使用 EAV 也是一个想法,因为我们需要为不同的试运行收集不同的信息。有时这可能是他们那天吃的东西。其他可能是血糖或血压(实际上是两个数字),有时可能是多个问题(你今天从 1 到 10 的疼痛如何?),所有这些都是我们永远不会真正知道的想法提前说明最终客户将要求什么,或者真正接受的值是什么。
我们还将在整个计划中始终如一地绘制这些数据,并在不太定期的基础上生成更大的报告。
理想情况下,我希望能够尽可能多地对其进行硬编码,因为我们使用的是 SQL,并且坚持关系数据库的最佳实践将简化数据库设计和应用程序设计(我正在编写这两者)。
我们正在进行一些试运行,我的第一个倾向是从科学家那里获得尽可能多的信息,对数据库中的表进行硬编码,然后从那里构建。如果我们发现我们需要使用一个属性表和一个 attribue_value 表来收集这些属性(以及实现有趣的表单构建器,例如下拉菜单 - 因此下拉菜单选项和验证/必需),我们可以这样做稍后推出。
我基本上浏览了所有相关的堆栈溢出帖子;大多数人说避免 EAV,更好地理解应用程序的需求,并且,在某些时候,如果客户真的需要 EAV 实施,那么就去做吧。
有人用过混合模型吗?你能讨论一下吗?
有没有人成功实施过 EAV 模型,您能讨论一下吗?
您是否有过类似的决定,决定不为看起来可能是候选人的项目实施 EAV?结果如何?
以下是我在此过程中发现的一些有趣的读物:
http://decipherinfosys.wordpress.com/2007/01/29/name-value-pair-design/ 存储时间序列数据,关系型还是非关系型? 数据库 EAV 的优点/缺点和替代 实体-属性-值 (EAV) 的替代方案?