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 ...

¿Fue útil?

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 ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top