Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有索引视图的sqleav结构_Sql_Sql Server_Indexing_Entity Attribute Value_Sql View - Fatal编程技术网

具有索引视图的sqleav结构

具有索引视图的sqleav结构,sql,sql-server,indexing,entity-attribute-value,sql-view,Sql,Sql Server,Indexing,Entity Attribute Value,Sql View,我正在开发一个通用的文档工作流系统,每个文档都有不同的属性,但它们共享相同的大纲,并且执行相同的工作流 因此,我没有为每种新的文档类型创建一个表,在经过一些研究和斗争后,我决定对文档属性使用EAV结构,我知道它们的缺点,但我认为我没有其他方便的方法来实现这一点,我是我 无论如何,我使用了EAV结构的codeplax示例,它们在数据库中为每个EAV“对象”装箱一个视图,可以作为普通表轻松查询 我决定更进一步,为视图编制索引,以便获得性能,问题如下: 方案绑定:通过 左连接:通过 最小聚合函数:无

我正在开发一个通用的文档工作流系统,每个文档都有不同的属性,但它们共享相同的大纲,并且执行相同的工作流

因此,我没有为每种新的文档类型创建一个表,在经过一些研究和斗争后,我决定对文档属性使用EAV结构,我知道它们的缺点,但我认为我没有其他方便的方法来实现这一点,我是我

无论如何,我使用了EAV结构的codeplax示例,它们在数据库中为每个EAV“对象”装箱一个视图,可以作为普通表轻松查询

我决定更进一步,为视图编制索引,以便获得性能,问题如下:

  • 方案绑定:通过

  • 左连接:通过

  • 最小聚合函数:无法通过
我是否可以为视图编制索引或获取索引结果

最后一个视图查询是:

        CREATE VIEW [dbo].[vComputer1]
    WITH SCHEMABINDING 
    AS
    SELECT       
O.ObjectID, MIN(O.Name) AS Name, 
MIN(CASE WHEN V.AttributeID = 4 THEN V.Value ELSE NULL END) AS Make, 
MIN(CASE WHEN V.AttributeID = 5 THEN V.Value ELSE NULL END) AS  Model, 
MIN(CASE WHEN V.AttributeID = 6 THEN V.Value ELSE NULL END) AS Type,  
MIN(CASE WHEN V.AttributeID = 7 THEN V.Value ELSE NULL END) AS CPU, 
MIN(CASE WHEN V.AttributeID = 8 THEN V.Value ELSE NULL END) AS Drive,  
MIN(CASE WHEN V.AttributeID = 9 THEN V.Value ELSE NULL END) AS Video, 
MIN(CONVERT(INT, CASE WHEN V.AttributeID = 10 THEN V.Value ELSE NULL END))  AS RAM,
 MIN(CASE WHEN V.AttributeID = 11 THEN V.Value ELSE NULL END) AS Optical,
 MIN(CASE WHEN V.AttributeID = 12 THEN V.Value ELSE NULL END) AS Battery,
 MIN(CASE WHEN V.AttributeID = 13 THEN V.Value ELSE NULL END) AS Screen, 
 MIN(CASE WHEN V.AttributeID = 14 THEN V.Value ELSE NULL END) AS OS,
 MIN(CASE WHEN V.AttributeID = 15 THEN V.Value ELSE NULL END) AS PurchaseDate
    FROM            dbo.Object AS O INNER JOIN
                             dbo.Value AS V ON ISNULL(V.ObjectID, 1) = O.ObjectID INNER JOIN
                             dbo.Category AS C ON ISNULL(C.CategoryID, 2) = O.CategoryID
    WHERE        (C.Name = 'Computer')
    GROUP BY O.ObjectID

你需要做的第一件事就是阅读。在您选择的路径中有许多陷阱


对于索引视图,限制记录在,其中非常明确地禁止
MIN
MAX
。在

中解释的原因是,您是否考虑过使用大多数文档类型的单个文档表?除非每个文档类型都与一组与所有其他文档类型截然不同的属性相关联,否则这可能是一个比EAV更好的解决方案。是的,我有一个包含共享属性的主表,但我们正在为每个文档类型添加新的文档类型,所以我决定使用动态!我明白了,有很多东西我会在路上绊倒,但我还没有放弃,我会给它一个机会:)P