Я хотел бы упростить свои данные с помощью таблицы MainView
, но мне сложно это понять.Таблица таблиц по языку/клиенту/статусу
У меня есть таблица Fact
, которая относится к клиентам, языку и статусу. Идентификатор в таблице Fact
происходит из таблицы FactLink
, которая имеет только столбец FactLinkID
. В таблице Status
имеется столбец Order
, который должен отображаться в виде совокупности вместо StatusID
. Моя таблица Main
ссылается на таблицу Fact
в нескольких столбцах.
Конечной целью будет иметь возможность запросить таблицу данных составного индекса LanguageID
, StatusOrder
, более просто, чем я был раньше, захватывая самый большой ClientID
указанный StatusOrder
и указанный ClientID
или ClientID
1. Итак, что это то, что я надеялся упростить с помощью таблицы представлений.
Так,
Главная
ID | DescriptionID | DisclaimerID | Other
----+---------------+--------------+-------------
50 | 1 | 2 | Blah
55 | 4 | 3 | Blah Blah
Факт
FactID | LanguageID | StatusID | ClientID | Description
-------+------------+----------+----------+------------
1 | 1 | 1 | 1 | Some text
1 | 2 | 1 | 1 | Otro texto
1 | 1 | 3 | 2 | Modified text
2 | 1 | 1 | 1 | Disclaimer1
3 | 1 | 1 | 1 | Disclaimer2
4 | 1 | 1 | 1 | Some text 2
FactLink
ID
--
1
2
3
4
Статус
ID | Order
---+------
1 | 10
2 | 100
3 | 20
MainView
MainID | StatusOrder | LanguageID | ClientID | Description | Disclaimer | Other
-------+-------------+------------+----------+---------------+-------------+------
50 | 10 | 1 | 1 | Some text | Disclaimer1 | Blah
50 | 10 | 2 | 1 | Otro texto | NULL | Blah
50 | 20 | 1 | 2 | Modified text | NULL | Blah
55 | 10 | 1 | 1 | Some text 2 | Disclaimer2 | Blah Blah
Вот как я реализовал это всего лишь один столбец, который ссылается на таблицу Fact
:
DROP VIEW IF EXISTS dbo.KeywordView
GO
CREATE VIEW dbo.KeywordView
WITH SCHEMABINDING
AS
SELECT t.KeywordID, f.ClientID, f.Description Keyword, f.LanguageID, s.[Order] StatusOrder
FROM dbo.Keyword t
JOIN dbo.Fact f
ON f.FactLinkID = t.KeywordID
JOIN dbo.Status s
ON f.StatusID = s.StatusID
GO
CREATE UNIQUE CLUSTERED INDEX KeywordIndex
ON dbo.KeywordView (KeywordID, ClientID, LanguageID, StatusOrder)
Мой предыдущий запрос запрошен для всего, кроме этого StatusOrder
. Но добавление в StatusOrder
, кажется, усложняет ситуацию. Вот мой предыдущий запрос без StatusOrder
. Когда я создал представление на таблице только с одним связанным столбцом Fact
, он значительно упростил ситуацию, но распространение этого на два или более столбца оказалось трудным!
SELECT
Main.ID,
COALESCE(fDescription.Description, dfDescription.Description) Description,
COALESCE(fDisclaimer.Description, dfDisclaimer.Description) Disclaimer,
Main.Other
FROM Main
LEFT OUTER JOIN Fact fDescription
ON fDescription.FactLinkID = Main.DescriptionID
AND fDescription.ClientID = @clientID
AND fDescription.LanguageID = @langID
AND fDescription.StatusID = @statusID -- This actually needs to get the largest `StatusOrder`, not the `StatusID`.
LEFT OUTER JOIN Fact dfDescription
ON dfDescription.FactLinkID = Main.DescriptionID
AND dfDescription.ClientID = 1
AND dfDescription.LanguageID = @langID
AND dfDescription.StatusID = @statusID
... -- Same for Disclaimer
WHERE Main.ID = 50