实体属性值(Entity Attribute Value,EAV)框架?

5
我之前在很多场景中见过实体属性值,但当时并不知道它的名称。这种技术通常用于将数据存储在数据库列中而不是翻转数据,使用一个包含实体、属性和值列的表,并且每个数据都成为该表中的一行。有时也称为“开放式模式”。
这对某些事情来说很好,对其他事情来说则不好。这篇维基百科文章对其背后的理论进行了很好的讨论。
看起来像是一种经常使用的技术,应该有框架、引擎、NoSQL数据库或一般软件工具来构建和支持它。
那么,你知道任何相关的吗?我特别关注微软技术栈(.Net、SQL Server等),但也关注其他技术栈。
例如,这里有一个构建ASP.NET EAV引擎的项目,正是我所寻找的,但显然从未开始。
3个回答

7
如果你可以容忍NoSQL数据库的缺点,那么最好的处理EAV模式的方法是使用类似CouchDB或MongoDB这样的NoSQL替代品。这些数据库提供了“无模式”设计,允许每行拥有自己的模式。在传统关系型数据库中使用EAV会带来很大的查询困难和性能下降,因此这种做法不可取。
我过去成功使用的另一种方法是将关系型数据库与NoSQL变体(MySQL和MongoDB)相结合。我使用MySQL存储EAV数据(获得事务完整性),并使用MongoDB作为报告存储库以解决EAV模型的查询问题。

1

你可以将它存储在SQL-XML中,虽然我不知道有没有相应的库,但你可以在.NET中进行序列化和反序列化,然后对其使用X-LINQ。

性能显然也是一个重大问题。


0

我来先给大家提供一个我在这篇博客文章中找到的例子:

一个早期的SQL Server EAV框架的测试版:

http://eav.codeplex.com/
"一个用于SQL Server的样本EAV模式,包括:表和索引、部分引用完整性、部分数据类型、可更新视图(类似普通的SQL表)"

提供一些可以下载的SQL脚本,点击这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接