2011-04-23 55 views
2

我有一個表「Books」,其中有一列「流派」,我想引用另一個包含流派列表的表。
問題是,想要在列中存儲多個流派。 E.g,從外部表中存儲和檢索多個值

ID | Author   | Title  | Genres 
2 | David Baldacci |Stone Cold | 1,4  (action thriller) 

表 「書籍流派」 2列編號和流派。

1動作
2戲劇
3喜劇
4驚悚
5恐怖

能像這樣做呢?或者它不實用,我應該將流派存儲爲簡單的字符串?

回答

1

可以完成,但不應該。

這是數據庫設計 - 你的數據庫應該是normalized

我建議一個many-to-many table - 與genreIdbookId列(每個外鍵,並在一起形成一個複合主鍵)。這將作爲你需要的鏈接(一本書可以有很多流派,每種流派都可以寫很多書)。


給你的書作爲與Book Genres表的例子,這將是這樣的:

bookId genreId 
2   1 
2   4 
+0

但我該如何「打破」這些流派? – jullin 2011-04-23 14:30:18

+0

@ jullin - 我想我已經解釋過了。我會添加一個例子。 – Oded 2011-04-23 14:31:44

1

您需要第三個表,或許叫BookGenre充當「分解」爲多對一很多關係。 BookGenre將有兩列,BookID和GenreID。一行將被添加到BookGenre爲每個類型的每本書。

也就會BookGenre兩排爲您提供的示例數據:

 
BookID GenreID 
2  1 
2  4 
+0

謝謝。 Oded是第一個,所以我應該接受他的回答:) – jullin 2011-04-23 14:36:26

2

解決這個問題的最好辦法是用所謂的鏈接表。

一個鏈接表是這樣的:

ID (optional) | BookID| GenreID 
1    2  1 
2    2  4 

然後每本書可以在這個表中的多個行(或一個)。 (如果您關心表的行級審計或事務審計 - 您可以使用它來唯一標識此行 - 對於您不需要的問題),可選標識將非常有用。

+0

謝謝。 Oded是第一個,所以我應該接受他的回答:) – jullin 2011-04-23 14:36:31

+0

大聲笑,首先用你不明白的答案,然後複製我們更清晰的例子。 – Hogan 2011-04-23 14:44:00