Question

J'ai le schéma de la table suivante dans SQL Server 2005 et je voudrais dénormaliser dans une vue indexée pour certaines requêtes, je vous écris jusqu'à ce que je peux faire les changements structurels permanents.

Les tableaux sont les suivants

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
)

Je veux une table avec une seule ligne pour chaque élève de / qualité / combinaison de documents où la niveleuse est soit 1 niveleuse, niveleuse 2 ou 3 niveleuse

Le point de vue que j'ai écrit utilise UNION, donc il ne indexe pas:

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

Le problème est - SQL ne peut pas indexer la vue avec l'union ...

Était-ce utile?

La solution

Pourquoi faut-il être une vue indexée lorsque vous pouvez utiliser une table appropriée:

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

Je comprends que vous voulez sans doute la vue que vous n'avez pas les tracas de la synchronisation des données. La seule autre alternative est de ne pas indexer la vue ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top