我一直在寻找一种数据库解决方案,允许用户定义字段和值(允许无限数量).乍一看,EAV似乎很合适,但读了一些之后,我不再确定了.
EAV的优点和缺点是什么?
Is there an alternative database method to allow user defined attributes/fields and values?
我一直在寻找一种数据库解决方案,允许用户定义字段和值(允许无限数量).乍一看,EAV似乎很合适,但读了一些之后,我不再确定了.
EAV的优点和缺点是什么?
Is there an alternative database method to allow user defined attributes/fields and values?
这不是一个详尽的回答,只是这个主题的几个要点.
由于这个问题也用[sql]
标记,我想说,一般来说,relational databases不是特别适合使用EAV模型存储数据.您仍然可以用SQL设计EAV模型,但您将不得不牺牲关系数据库提供的许多优势.您不仅不能强制引用完整性、对值使用SQL数据类型和强制强制属性,而且即使是最基本的查询也可能变得难以编写.事实上,为了克服这一限制,几个EAV解决方案依赖于数据复制,而不是连接相关表,正如您可以想象的那样,这有很多缺点.
如果您确实需要无模式设计,"允许无限数量的属性",那么您最好的 Select 可能是使用NoSQL个解决方案.尽管EAV相对于关系数据库的弱点也适用于NoSQL替代方案,但是您将获得传统SQL数据库难以实现的附加功能.例如,通常NoSQL数据存储的伸缩性比关系数据库容易得多,原因很简单,因为它们旨在解决某种可伸缩性问题,而且它们故意删除了使伸缩性变得困难的特性.
许多云计算平台(例如由Amazon、Google和Microsoft提供的平台)以基于EAV模型的数据存储为特征,其中任意数量的属性可以与给定实体相关联.如果您正在考虑将您的应用程序部署到云上,您可能会将其视为业务优势和技术优势,因为大型供应商之间的激烈竞争通过不断提高功能和降低财务和实施成本,将价值成本比推到了非常高的水平.