ユーザーがグループの入れ子になったセット階層 (役員、地域、部門、チームなど) に格納されるシステムを計画しています。これは、ユーザーが表示できるデータのレベルを決定するために使用されます。何千人ものユーザーが含まれる可能性がある階層を計画する必要があります。
レポート対象のデータは SQL Server 2008 データベースに保存され、該当する各レコードがそのアクション (電話など) を実行したユーザーの ID にリンクされます。
個々のユーザー、または階層からのユーザーのコレクションに適用される合計を収集するには、データベースにクエリを実行する必要があります (たとえば、部門 X のメンバーによって 1 日に行われたすべての通話の数を収集するか、またはすべての会社全体で電話をかける)。
次のクエリを想定します。
SELECT Count(Id) FROM Calls
JOIN
(
SELECT Heirarchy.UserId
FROM Heirarchy
{nested set joins}
WHERE {nested set conditions to get relevant UserIds}
) H1
ON Calls.UserId = H1.UserId
WHERE {conditions}
階層には何千ものユーザーが含まれるため、最上位グループのユーザー (役員会メンバーなど) が上記のクエリを実行すると、すべてのユーザー レコードがサブクエリによって返され、照合されます。
1) これは、そのようなシステムをモデル化するための正しいアプローチですか?
2) 誰でも問題を確認できますか? もしそうなら、改善を提案できますか?
3)上記を達成するための代替方法を提案できる人はいますか?