Pergunta

Eu tenho o esquema de tabela a seguir no SQL Server 2005 e gostaria de desnormalizá -lo em uma visualização indexada para algumas consultas que estou escrevendo até que eu possa tornar as mudanças estruturais permanentes.

As mesas são as seguintes

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
)

Eu quero uma mesa com uma única linha para cada série de alunos/grau/documentos, onde a grade é a grade 1, a grade 2 ou a grade 3

A visão que escrevi usa Union, para que não indexe:

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

O problema é: o SQL não pode indexar a visão com a Union ...

Foi útil?

Solução

Por que tem que ser uma visão indexada quando você pode usar uma tabela adequada:

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

Entendo que você provavelmente deseja a visualização para não ter o incômodo de sincronizar dados. A única outra alternativa é não indexar a visualização ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top