Simular la unión para hacer vista indizada
-
25-09-2019 - |
Pregunta
Tengo el siguiente esquema de la tabla en SQL Server 2005 y me gustaría desnormalizar en una vista indizada en algunas consultas que estoy escribiendo hasta que pueda realizar los cambios estructurales permanentes.
Las tablas son las siguientes
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
)
Quiero una tabla con una única fila para cada grado de grado combinación / / documento en el que el grado es o bien grado 1, grado 2 o grado 3
El Vista escribí usos UNION, por lo que no indexa:
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
El problema es - SQL no puede indexar la vista con la unión ...
Solución
¿Por qué tiene que ser una vista indizada cuando se puede utilizar una tabla adecuada:
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
entiendo que probable que desee la vista por lo que no tiene la molestia de la sincronización de datos. La única otra alternativa es no indexa la vista ...