我有一個表「Books」,其中有一列「流派」,我想引用另一個包含流派列表的表。
問題是,想要在列中存儲多個流派。 E.g,從外部表中存儲和檢索多個值
ID | Author | Title | Genres
2 | David Baldacci |Stone Cold | 1,4 (action thriller)
表 「書籍流派」 2列編號和流派。
1動作
2戲劇
3喜劇
4驚悚
5恐怖
能像這樣做呢?或者它不實用,我應該將流派存儲爲簡單的字符串?
我有一個表「Books」,其中有一列「流派」,我想引用另一個包含流派列表的表。
問題是,想要在列中存儲多個流派。 E.g,從外部表中存儲和檢索多個值
ID | Author | Title | Genres
2 | David Baldacci |Stone Cold | 1,4 (action thriller)
表 「書籍流派」 2列編號和流派。
1動作
2戲劇
3喜劇
4驚悚
5恐怖
能像這樣做呢?或者它不實用,我應該將流派存儲爲簡單的字符串?
它可以完成,但不應該。
這是壞數據庫設計 - 你的數據庫應該是normalized。
我建議一個many-to-many table - 與genreId
和bookId
列(每個外鍵,並在一起形成一個複合主鍵)。這將作爲你需要的鏈接(一本書可以有很多流派,每種流派都可以寫很多書)。
給你的書作爲與Book Genres
表的例子,這將是這樣的:
bookId genreId
2 1
2 4
您需要第三個表,或許叫BookGenre充當「分解」爲多對一很多關係。 BookGenre將有兩列,BookID和GenreID。一行將被添加到BookGenre爲每個類型的每本書。
也就會BookGenre兩排爲您提供的示例數據:
BookID GenreID 2 1 2 4
謝謝。 Oded是第一個,所以我應該接受他的回答:) – jullin 2011-04-23 14:36:26
但我該如何「打破」這些流派? – jullin 2011-04-23 14:30:18
@ jullin - 我想我已經解釋過了。我會添加一個例子。 – Oded 2011-04-23 14:31:44