序列化是否是执行此操作的最佳方法?如何在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