2010-11-18 32 views
1

我已經在SQL Server 2005中有下面的表模式,我想將它非規範化到一個索引視圖,我正在寫的一些查詢,直到我可以使結構更改永久。模擬聯合使索引視圖

的表是如下

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 
) 

我想與一個單獨的行,每個分級器/級/文件組合,其中平地機或者是分級機1,平地機2,或分級機3

一個表我寫的視圖使用UNION,因此它不會指數:

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 

問題是 - SQL不能索引與工會的看法...

+1

你的意思是你想規範化它(而不是denormalize)? – YWE 2010-11-18 04:46:36

+0

我希望有一個臨時的規範化結構,直到我可以獲取應用程序結構以更新規範化表格。認爲一個觀點會做的伎倆,但唉。 – Caveatrob 2010-11-18 05:41:39

回答

1

爲什麼它必須是一個索引視圖時,你可以使用一個適當的表:

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 

我明白,你可能要視圖,以便您不必同步數據的麻煩。唯一的另一種選擇是不索引視圖...

+0

是的,就是這樣。也許我只是做規範化的表,並寫一個例程來更新它,直到我可以設置應用程序。謝謝! – Caveatrob 2010-11-18 05:42:02