2011-03-08 60 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。

相关问题