工作流程应用程序的数据模型应该是什么?目前我们在SQL Server 2000中使用基于实体属性值的模型,用户能够创建动态表单(在asp.net上),但随着数据的增长,性能下降并且很难生成报告,如果太多则会更糟用户同时查询数据(EAV)。
答案 0 :(得分:3)
您可能已经意识到,EAV模型的问题是表变得非常大,查询变得非常复杂。例如,基于EAV的查询通常需要大量子查询才能获得相同的数据,如果您使用更传统结构的表,则可以轻松选择这些数据。
不幸的是,很难转移到传统结构的关系模型,同时让旧表单可以修改。
因此,我的建议:考虑关闭对已建立的表单的更改,并将其数据移动到标准的规范化表。例如,如果您有一组不太可能更改的运输表单(或者您可以通过更改应用程序来管理其更改,因为它很少发生),那么您可以创建一个固定表,然后将现有数据复制出来你的EAV表。这将A)提高您的报告能力,B)减少现有EAV表中的数据量,C)提高您支持并发用户/提高性能的能力,因为您可以在数据中构建更合适的索引。
简而言之,将动态基于EAV的系统视为收集用户需求的一种方式(他们通过构建表单告诉您)而不是永久存储。随着表单演变为最终形式,您将转换到固定表格,以获得上述讨论的好处。
最后一件事。如果所有这些都不可能,您是否考虑将您的EAV表分割成多个特定于类别的表?例如,将所有运输表单放在一个表中,将人员表单放在一个表中,等等。它不会解决查询结构问题(需要子查询),但它有助于缩小表并提高性能。
我希望这会有所帮助 - 我同情你的困境,因为我自己一直处于类似情况!
答案 1 :(得分:-1)
通常,当您的数据库架构变得非常大并且多个用户尝试以多种不同方式访问相同信息时,将应用Data Warehousing以减少数据库服务器上的主要负载。与传统架构不同,您很可能使用规范化来保持数据完整性,数据仓库针对速度进行了优化,并且存储了多个数据副本。
答案 2 :(得分:-1)
尝试使用数据的关系模型。它有效。