如何在MySQL中的单元格中存储单个项目的多个值

时间:2011-03-08 22:47:33

标签: php mysql

序列化是最好的方法吗?

如果说,我有一个音乐数据库,我想根据类型对音乐进行分类。如果我允许给定专辑的多个流派,我是否将它们存储为数组并序列化?喜欢这个?

$array = serialize(array(1,2,3)); //数字是流派的ID

我从另一篇文章中得到了这个。我知道我可以将它们反序列化。我没有得到的是如何编写一个可以检索部分或全部数据的SQL语句。如果我想检索给定专辑的所有类型,我的SQL语句会是什么样的?

5 个答案:

答案 0 :(得分:4)

这取决于你想要运行什么查询,但是你应该把这些类型放到它自己的表中:

Genre
id | name

并创建一个表格,将相册与流派相关联:

Album_Genre
album_id | genre_id

答案 1 :(得分:2)

真的想要规范化数据,并将流派和专辑存储到不同表格中的流派关联。

即:理想情况下,你有三张桌子:

  1. 相册相册数据
  2. 流派流派数据
  3. 相册 - >流派查找形成每个关联的专辑ID和流派ID
  4. 通过这样做,您将能够根据需要轻松添加/删除等类型,并且能够通过连接表来执行查找,而不必执行字符串操作。

答案 2 :(得分:2)

您应该使用association table规范化数据库。

关于first normal form的维基百科文章有一个很好的例子,涉及有多个电话号码的人。

答案 3 :(得分:2)

您正在尝试模拟多对多关系(Music to Genre)。因此,您应该创建一个单独的表(流派),然后创建一个交叉引用表(Music_Genre),其中包含音乐和流派表中的ID。

答案 4 :(得分:1)

别。

对于多对多关系,您需要第三个表:

songs: id, name, ...

genres: id, name, ...

relation_songs_genres: song_id, genre_id