симулировать объединение для создания индексированного представления - PullRequest
1 голос
/ 18 ноября 2010

У меня есть следующая схема таблицы в SQL Server 2005, и я хотел бы денормализовать ее в индексированное представление для некоторых запросов, которые я пишу, пока не смогу сделать структурные изменения постоянными.

Таблицы следующие

Writing
(
DocumentSerial int
Grader1_ID int
Grade_1 int
Grader2_ID int 
Grade_2 int 
Grader3_ID int 
Grade_3 int
)

Users
(userID int,
firstname,
lastname
)

Я хочу таблицу с одной строкой для каждой комбинации грейдер / класс / документ, в которой грейдер - это 1, 2 или 3

Представление, которое я написал, использует UNION, поэтому оно не индексируется:

select documentSerial,grader1_id as grader_id, grade_1 as grade ,1 as sequence
 from Writing w inner join User U on w.grader1_id=u.userid
UNION
select documentSerial,grader2_id as grader_id, grade_2 as grade ,2 as sequence
 from Writing w inner join User U on w.grader2_id=u.userid
UNION
select documentSerial,grade31_id as grader_id, grade_3 as grade ,3 as sequence
 from Writing w inner join User U on w.grader3_id=u.userid

Проблема в том, что SQL не может индексировать представление с помощью объединения ...

1 Ответ

1 голос
/ 18 ноября 2010

Почему это должно быть индексированное представление, когда вы можете использовать правильную таблицу:

SELECT x.*
  INTO normalized_table
  FROM (select documentSerial,grader1_id as grader_id, grade_1 as grade ,1 as sequence
          from Writing w 
          join User U on w.grader1_id = u.userid
        UNION ALL
        select documentSerial,grader2_id as grader_id, grade_2 as grade ,2 as sequence
          from Writing w 
          join User U on w.grader2_id = u.userid
        UNION ALL
        select documentSerial,grade31_id as grader_id, grade_3 as grade ,3 as sequence
          from Writing w 
          join User U on w.grader3_id = u.userid) x

Я понимаю, что вам, вероятно, нужно представление, поэтому у вас нет проблем с синхронизацией данных. Единственная альтернатива - не индексировать представление ...

...