2012-11-23 22 views
1

我有2個表。鼓手和鼓手類型。我想要一種方法來管理兩個表之間的關係

DRUMMER_TYPE 
ID  TYPE 
1  A1 
2  A2 
3  A3 

DRUMMER 
ID  NAME TYPE 
1  A  1 
2  B  2 
3  C  1 

我想要一種方法來爲鼓手添加更多的類型。我不想在鼓手錶上添加新表格並保持關係原因已經完成了太多的編碼。有什麼方法可以維護關係(不使用逗號分隔)?

對於逗號分隔它看起來就像這樣(我不想這樣子有任何其他方式):

DRUMMER 
ID NAME TYPE 
1  A  1,2,3 
2  B  2,3 
3  C  1 

回答

0

是設計應該是:

Two tables : 

1) Drummers  : id, name, type 
2) Drummer_type : id, desc 

The Drummers.type will be a reference to Drummer_type.id 

Now IF you want to add more drummer's type, just insert a row in Drummer_type table 

請讓我知道你對此有任何疑問。

+0

謝謝,他們已經有關係。我已經編輯了這個問題,我想要的東西將取代逗號分隔的方式來管理關係。 –

0

您可以使用按位場,更多的信息:http://home.comcast.net/~tolkin.family/bitwise.htm

例如,你可以編寫你的三個DRUMMER_TYPE這種方式:

000 = Nothing 
001 = A1 
010 = A2 
100 = A3 

這樣,如果你可以節省DRUMMER_TYPE A1和A3的鼓手,您可以將值101保存在數據庫中。該技術與權限在unix系統上的工作方式類似。

+0

我不認爲它是多值的。 –

+0

@VivekMuthal,我不明白你,你問:「我想要一種方式來增加更多類型的鼓手」。我很困惑。 – m4t1t0

+2

你加入這個鼓手類型表如何? –

0

如果你有一個多對多的關係,那麼你應該有第三個表,以保持這種關係:

DrummerIs: DrummerId, TypeId 

有這樣做的其他方式(多列,串接值等),但它們都有嚴重的缺陷。幾乎總是建議使用關係表來維護多對多關係,因爲最終它是最簡單的實現和使用。

+0

我沒有多對多的關係。而不想第三張桌我知道這將是我的最後一個選擇,但仍然在等待,如果有人知道任何其他技術。你是正確的多欄,串聯值等都有嚴重的陷阱。 –

+0

你有一對多的關係。一個鼓手可以有很多技能。只需添加一個關係表來模擬這個 - 它確實是最簡單的方法。 –

+0

我忘了它謝謝。現在我正在嘗試這個sql命令「ALTER TABLE鼓手ADD CONSTRAINT FOREIGN KEY fk_type(類型)引用鼓手類型(ID)」並且獲取errno(150)無法創建表。我正在尋找答案,但如果你知道爲什麼會出現這個錯誤,這將會非常有幫助。 –

相關問題