2011-03-08 55 views
0

序列化是否是執行此操作的最佳方法?如何在MySQL的單元中存儲單個項目的多個值

如果我說我有一個音樂數據庫,我想按流派對音樂進行分類。如果我允許給定專輯的多個流派,我是否將它們作爲數組存儲並序列化它們?喜歡這個?

$array = serialize(array(1,2,3)); //數字流派

我收到來自另一張貼在這裏的標識。我知道我可以反序列化它們。我沒有得到的是我將如何編寫一個將檢索部分或全部數據的SQL語句。如果我想要檢索給定專輯的所有流派,我的SQL語句會是什麼樣子?

+0

或者我應該以另一種方式存儲我的數據,因爲我將有一長串流派。 – sehummel 2011-03-08 22:49:06

+0

如果我只想從序列化數組中獲得其中一個值,該怎麼辦? – sehummel 2011-03-08 22:50:35

+0

非常相關的問題:http://stackoverflow.com/questions/2145255/storing-multiple-values-in-a-single-cell-in-mysql – gparis 2011-03-08 22:54:02

回答

2

確實想要規範化數據,並將流派和專輯存儲爲不同表格中的流派關聯。

即:你會非常有三個表:

  1. 專輯專輯數據
  2. 流派流派數據
  3. 相冊 - >類型查找相冊ID和流派形成每個關聯的id

通過執行th你將能夠按照未來的需要輕鬆地添加/刪除等流派,並且能夠通過連接表來執行查找,而不必執行字符串操作。

+0

我可以存儲多個流派專輯嗎? – sehummel 2011-03-08 22:53:45

+0

@ shummel7845是的。您只需在該專輯的相冊 - >流派查找表中輸入兩個條目。 – 2011-03-08 22:54:58

+0

明白了。感謝middaparka。 – sehummel 2011-03-08 22:56:51

4

這取決於你要運行的查詢,但你應該把風格到它自己的表:

Genre 
id | name 

,並創建一個相冊與流派相關聯的表:

Album_Genre 
album_id | genre_id 
+0

+1和按類型拉專輯的SQL是'SELECT *從流派內部加入Album_Genre genre_id = id WHERE name ='reagge'' – 2011-03-08 22:54:33

2

您應該使用association table來標準化您的數據庫。

關於first normal form的維基百科文章有一個很好的例子,涉及多個電話號碼的人。

+0

哦,我看到.....好文章。 – sehummel 2011-03-08 22:55:23

1

不要。

對於一個多對多的關係,您需要第三個表:

songs: id, name, ... 

genres: id, name, ... 

relation_songs_genres: song_id, genre_id 
2

你試圖將許多一對多的關係(音樂流派)模型。因此,您應該創建一個單獨的表(流派),然後創建一個交叉引用表(Music_Genre),該表具有音樂和流派表中的ID。

相關問題