私は次のテーブル構造を持っています-
サイト:サイトのマスターテーブル
組織:組織のマスターテーブル
ユーザー:ユーザーのマスターテーブル(各ユーザーはUser.OrgIdを介して一意の組織にリンクします)
OrgSite:「組織固有の」サイトの詳細(OrgId、SiteId、SiteName、SiteCode)を保存します。すべてのサイトではなく、Orgにアクセスできるサイトのみ。
UserSite:ユーザーをアクセス可能なサイト(UserId、SiteId)にリンクします。ユーザーが組織にリンクされると、UserSiteはOrgSiteテーブルのサブセットになります。
ItemSite:アイテムとサイト固有の詳細(ItemID、SiteId、OrgId、...)を格納するテーブル
ここで、「ItemSite」からレコードをフィルター処理して表示する必要があります。そのため、サイトコードも表示する必要があります。したがって、次の2つのオプションが表示されます-
1.ビューを作成します: vw_ItemSite_UserSite_OrgSite(SiteIdのすべてのテーブルに内部結合)-これにより、「OrgSite」テーブルで利用可能なすべての組織固有の詳細(つまり、SiteCodeなど)にアクセスできます。
組織固有のSiteCodeとSiteNameが必要なため、ビューに「OrgSite」を含める必要があることに気付く場合。UserSiteはすでにサイトをフィルタリングしているため、OrgSiteテーブルを「除外」して、不要なINNERJOINを削除できます。
2.上記の注意に基づいて-2番目のオプションはVIEWを作成することです:vw_ItemSite_UserSiteそしてVIEWの'SELECT'ステートメントに次のようなSELECTを埋め込むことができます-
CREATE VIEW vw_ItemSite_UserSite AS
SELECT ItemSite.SiteID,
(SELECT TOP 1 [SiteCode] FROM OrgSite WHERE OrgId = ItemSite.OrgId) AS SiteCode,
...
FROM ItemSite INNER JOIN UserSite ON ItemSite.SiteId = UserSite.SiteId
私の唯一の意図は、埋め込まれたselectステートメントの評価の前にINNERJOINとWHEREが評価されると信じていることです。それで、これは私にいくらかのパフォーマンスを節約しますか?または、vw_ItemSite_UserSite_OrgSiteを使用する方が良いという考えです。
オプション#1またはオプション#2?
ありがとうございました。