我一直在寻找一种数据库解决方案来允许用户定义字段和值(允许无限数量)。乍一看,EAV 似乎是合适的选择,但经过一番阅读后,我不再确定了。

EAV 的优点和缺点是什么?

是否有替代数据库方法允许用户定义属性/字段和值?

有帮助吗?

解决方案

这并不是一个详尽的答案,而只是该主题的几点。

由于该问题也被标记为 [sql] 标签,让我说一下,一般来说, 关系数据库 不是特别适合使用存储数据 电子AV 模型。您仍然可以用 SQL 设计 EAV 模型,但您将不得不牺牲关系数据库所提供的许多优势。您不仅无法强制执行引用完整性、对值使用 SQL 数据类型以及强制强制属性,而且即使是非常基本的查询也会变得难以编写。事实上,为了克服这一限制,一些 EAV 解决方案依赖于数据复制,而不是连接相关表,正如您可以想象的那样,这有很多缺点。

如果您确实需要无模式设计,“允许无限数量的属性”,那么您最好的选择可能是使用 NoSQL 解决方案。尽管 EAV 相对于关系数据库的弱点也适用于 NoSQL 替代方案,但您将获得传统 SQL 数据库难以实现的附加功能。例如,通常 NoSQL 数据存储比关系数据库更容易扩展,因为它们旨在解决某种可扩展性问题,并且故意删除了使扩展变得困难的功能。

许多云计算平台(例如由 亚马逊, 谷歌微软)具有基于 EAV 模型的数据存储,其中任意数量的属性可以与给定实体相关联。如果您正在考虑将应用程序部署到云中,您可能会认为这既是一种业务优势,也是一种技术优势,因为大供应商之间的激烈竞争正在将价值成本比推向非常高的水平,通过不断提升功能并降低财务和实施成本。

其他提示

看一看posgtres hstore http://www.postgresql.org/文档/ 9.0 /静态/ hstore.html 这将不正是你想要的东西,而不大部分缺点

流平台提出一种基于可替换方式的实际上,它的域模型),的字段和<强>分配实体。

  

是否有其他数据库的方法,以允许用户定义的属性/字段和值?

一个替代方案是基于用户输入来改变数据库模式:当用户希望一个新的领域,例如,再加入相应列到数据库

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top