我有兴趣在 SQL Server 数据库上使用 EAV 模型。有没有人能给我指出现有模型/模式的文章或框架(我对 Saas 不感兴趣)?
4 回答
EAV 是出了名的问题,因为它会导致严重的部署性能和可扩展性问题。链接中的白皮书由 SQL Server 客户咨询团队发布,试图为部署成功的 EAV 模型提供一些指导。
我没有使用它,但是在这个 codeplex 项目中有一个带有数据的示例 EAV 结构:
http://eav.codeplex.com/
“用于 SQL Server 的示例 EAV 模式具有:表和索引、部分参照完整性、部分数据类型、可更新视图(如普通 SQL 表)”
提供一些可供下载的 SQL 脚本,请点击此处。
此外,这篇博文:“dave 的 eav 指南”
http://weblogs.sqlteam.com/davidm/articles/12117.aspx
...通过 SQL Server 中的 EAV 示例进行工作,其中包含如何实现类型检查和查询的示例,并就理论以及 EAV 为何会导致问题进行了大量讨论。
为什么不创建一个非常简单的表,其中包含一个实体列、一个属性列和一个值列:
CREATE TABLE eav(
entity STRING,
attribute STRING,
value STRING);
然后使用某种脚本填充表格以生成一些测试数据。
INSERT INTO eav ('banana','color','yellow');
INSERT INTO eav ('banana','fluffy','no');
INSERT INTO eav ('banana','origin','Guatemala');
INSERT INTO eav ('orange','origin','USA');
INSERT INTO eav ('orange','origin','Mexico');
INSERT INTO eav ('pear','origin','USA');
INSERT INTO eav ('peach','fluffy','yes');
然后尝试在它上面运行查询,玩转,了解它是如何工作的,等等。
但总的来说,上述数据组织方案与关系数据库理论并不能很好地结合。以上内容更符合文档数据库理论,例如Couch DB。如果您需要在野外存储/管理 EAV 自然的数据,我会对此进行更多研究。
我们在 Github 上有一个非常先进、成熟的 EAV 解决方案 - https://github.com/2sic/eav。不过安装起来相当困难,因为它主要用作名为 2sxc(也在 github 上)的内容管理系统的后端。
由于它非常先进,支持许多数据类型、输入类型、通用输入掩码等等,我相信你会发现它非常鼓舞人心。要试用它,最好的方法是安装 DNN(.net 网络平台)和 2sxc(DNN 的内容管理系统)。我想你会惊讶于什么是可能的。
请注意,整个 UI 都是基于 AngularjS 的,因此它是一个非常现代的设置。您还可以在http://2sxc.org上找到更多博客/视频。