各ドキュメントが異なる属性を持つ一般的なドキュメント ワークフロー システムを開発していますが、それらは同じアウトラインを共有し、同じワークフローを通過します。
そのため、新しいドキュメント タイプごとにテーブルを作成する代わりに、いくつかの調査と闘争の後、ドキュメント属性の EAV 構造を使用することにしました。その短所は認識していますが、これを達成するための便利な方法は他にないと思います。私ですか?!!
とにかく、私は EAV 構造http://eav.codeplex.com/の codeplax サンプルを使用しました。データベース内の各 EAV「オブジェクト」ごとにビューを作成し、通常のテーブルとして簡単に照会できます。
パフォーマンスを向上できるように、もう少し進んでビューにインデックスを付けることにしました。ここに問題があります。
SCHEMABINDING : 渡されました
左結合: 合格
- MIN 集計関数: を渡すことができませんでした!
ビューにインデックスを付けたり、インデックス付きの結果を取得したりできる方法はありますか!??
最後のビュー クエリは次のとおりです。
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