2008-08-20 20 views
2

場工會表我不太清楚,如果這是可能的,或者落入透視表的範疇,但我想我會去的利弊看。查詢與欄目

我有三個基本表:卡,屬性和CardProperty。由於卡片沒有相同的屬性,並且通常對同一個屬性有多個值,所以我決定使用聯合表格的方法來存儲數據,而不是在我的卡片表中有一個非常大的列結構。

屬性表是基本的關鍵字/值類型表。所以你有關鍵字ATK和分配給它的值。還有另一個名爲SpecialType的屬性,一張卡片可以有多個值,比如「Sycnro」和「DARK」

我想要做的是創建一個視圖或存儲過程,該卡片ID,卡片名稱以及分配給卡片的所有屬性關鍵字,作爲指定卡片的ResultSet中的列及其值。所以理想情況下,我會得到如下結果集:

ID NAME     SPECIALTYPE 
1 Red Dragon Archfiend Synchro 
1 Red Dragon Archfiend DARK 
1 Red Dragon Archfiend Effect 

我可以用這種方式來計算我的結果。

我想即使雨衣是簡單地串聯在一起,根據他們的關鍵字的屬性,這樣我就可以產生一個結果,如:

1 Red Dragon Archfiend Synchro/DARK/Effect 

..但我不知道這是可行的。

幫幫我翻譯Kenobi!你是我唯一的希望。

回答

0

不要通過串聯摺疊來存儲數據庫中的相關記錄。它不完全是最佳實踐。

你所描述的是一個數據透視表。數據透視表是。如果可能的話,我建議避開它們。

爲什麼不只是讀你的相關行並在內存中處理它們?這聽起來並不像你打算花太多毫秒這樣做......

0

一種選擇是有屬性有一個屬性類型,所以:

table cards 
integer ID | string name | ... (other properties common to all Cards) 

table property_types 
integer ID | string name | string format | ... (possibly validations) 

table properties 
integer ID | integer property_type_id | string name | string value 
foreign key property_type_id references property_types.ID 

table cards_properties 
integer ID | integer card_id | integer property_id 
foreign key card_id references cards.ID 
foreign key property_id references propertiess.ID 

這樣,當你想設置一個新的屬性值,你可以通過它的類型來驗證它。一種類型可以是具有枚舉值的「特殊類型」。

1

相關,但值的值保存在單獨的列中,你必須知道你的「特殊類型」的時候頭:
SQL query to compare product sales by month

否則我會在存儲過程中做到這一點用光標或預型轉型業務或表示層。

在SQL刺,如果你知道的所有情況:

Select 
    ID,NAME 
    ,Synchro+DARK+Effect -- add a some substring logic to trim any trailing /'s 
from 
    (select 
     ID 
     ,NAME 
     --may need to replace max() with min(). 
     ,MAX(CASE SPECIALTYPE WHEN "Synchro" THEN SPECIALTYPE +"/" ELSE "" END) Synchro 
     ,MAX(CASE SPECIALTYPE WHEN "DARK" THEN SPECIALTYPE +"/" ELSE "" END) DARK 
     ,MAX(CASE SPECIALTYPE WHEN "Effect" THEN SPECIALTYPE ELSE "" END) Effect 
    from 
     table 
    group by 
     ID 
     ,NAME) sub1 
0

我有我的屬性表類型/格式,這樣,我知道如何投/當我處理的是一個整數值評估。我不確定它是否與這個問題有關。