序列化是否是執行此操作的最佳方法?如何在MySQL的單元中存儲單個項目的多個值
如果我說我有一個音樂數據庫,我想按流派對音樂進行分類。如果我允許給定專輯的多個流派,我是否將它們作爲數組存儲並序列化它們?喜歡這個?
$array = serialize(array(1,2,3));
//數字流派
我收到來自另一張貼在這裏的標識。我知道我可以反序列化它們。我沒有得到的是我將如何編寫一個將檢索部分或全部數據的SQL語句。如果我想要檢索給定專輯的所有流派,我的SQL語句會是什麼樣子?
序列化是否是執行此操作的最佳方法?如何在MySQL的單元中存儲單個項目的多個值
如果我說我有一個音樂數據庫,我想按流派對音樂進行分類。如果我允許給定專輯的多個流派,我是否將它們作爲數組存儲並序列化它們?喜歡這個?
$array = serialize(array(1,2,3));
//數字流派
我收到來自另一張貼在這裏的標識。我知道我可以反序列化它們。我沒有得到的是我將如何編寫一個將檢索部分或全部數據的SQL語句。如果我想要檢索給定專輯的所有流派,我的SQL語句會是什麼樣子?
你確實想要規範化數據,並將流派和專輯存儲爲不同表格中的流派關聯。
即:你會非常有三個表:
通過執行th你將能夠按照未來的需要輕鬆地添加/刪除等流派,並且能夠通過連接表來執行查找,而不必執行字符串操作。
這取決於你要運行的查詢,但你應該把風格到它自己的表:
Genre
id | name
,並創建一個相冊與流派相關聯的表:
Album_Genre
album_id | genre_id
+1和按類型拉專輯的SQL是'SELECT *從流派內部加入Album_Genre genre_id = id WHERE name ='reagge'' – 2011-03-08 22:54:33
您應該使用association table來標準化您的數據庫。
關於first normal form的維基百科文章有一個很好的例子,涉及多個電話號碼的人。
哦,我看到.....好文章。 – sehummel 2011-03-08 22:55:23
不要。
對於一個多對多的關係,您需要第三個表:
songs: id, name, ...
genres: id, name, ...
relation_songs_genres: song_id, genre_id
你試圖將許多一對多的關係(音樂流派)模型。因此,您應該創建一個單獨的表(流派),然後創建一個交叉引用表(Music_Genre),該表具有音樂和流派表中的ID。
或者我應該以另一種方式存儲我的數據,因爲我將有一長串流派。 – sehummel 2011-03-08 22:49:06
如果我只想從序列化數組中獲得其中一個值,該怎麼辦? – sehummel 2011-03-08 22:50:35
非常相關的問題:http://stackoverflow.com/questions/2145255/storing-multiple-values-in-a-single-cell-in-mysql – gparis 2011-03-08 22:54:02