Domanda

Ho il seguente schema di tabella in SQL Server 2005 e mi piacerebbe denormalizzare in una vista indicizzata per alcune query che sto scrivendo fino a quando posso fare i cambiamenti strutturali permanenti.

Le tabelle sono i seguenti

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
)

Voglio una tabella con una sola riga per ogni selezionatore / grado combinazione / documento in cui il selezionatore è o selezionatore 1, selezionatore 2, o selezionatore 3

La vista che ho scritto usi UNION, in modo che non index:

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

Il problema è - SQL non è in grado di indicizzare la vista con l'unione ...

È stato utile?

Soluzione

Perché deve essere una vista indicizzata quando si potrebbe utilizzare una tabella corretta:

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

Capisco che probabilmente si desidera la vista in modo da non avere il fastidio di sincronizzazione dei dati. L'unica altra alternativa è quella di non indicizzare la vista ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top