我有以下表结构 -
站点:站点主表
组织:组织的主表
用户:用户的主表(每个用户通过 User.OrgId 链接到唯一的组织)
OrgSite:存储一些“特定于组织”的站点详细信息(OrgId、SiteId、SiteName、SiteCode)。不是所有的网站,只有那些可以被 Org 访问的网站。
UserSite:将用户链接到其可访问的站点(UserId、SiteId)。当用户链接到 Org 时,UserSite 将是 OrgSite 表的子集。
ItemSite:存储一些项目和站点特定详细信息的表(ItemID、SiteId、OrgId,...)
现在,我必须从“ItemSite”过滤\显示记录,并且我还需要显示 Sitecode。所以,我看到以下两个选项 -
1. 创建一个视图: vw_ItemSite_UserSite_OrgSite(INNER JOIN 上 SiteId 上的所有表) - 这将使我能够访问“OrgSite”表中可用的所有组织特定详细信息(即 SiteCode 等)。
如果您注意到我必须在视图中包含“OrgSite”,只是因为我想要特定于 Org 的 SiteCode 和 SiteName。因为 UserSite 已经在过滤站点 - 所以我可以“排除” OrgSite 表并消除不必要的 INNER JOIN。
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
我唯一的意图是 - 我相信 INNER JOIN 和 WHERE 将在评估嵌入式 select 语句之前进行评估。那么,这是否可以节省一些性能?或者拥有 vw_ItemSite_UserSite_OrgSite 的想法更好。
选项#1 还是选项#2?
谢谢你。