序列化是最好的方法吗?
如果说,我有一个音乐数据库,我想根据类型对音乐进行分类。如果我允许给定专辑的多个流派,我是否将它们存储为数组并序列化?喜欢这个?
$array = serialize(array(1,2,3));
//数字是流派的ID
我从另一篇文章中得到了这个。我知道我可以将它们反序列化。我没有得到的是如何编写一个可以检索部分或全部数据的SQL语句。如果我想检索给定专辑的所有类型,我的SQL语句会是什么样的?
答案 0 :(得分:4)
这取决于你想要运行什么查询,但是你应该把这些类型放到它自己的表中:
Genre
id | name
并创建一个表格,将相册与流派相关联:
Album_Genre
album_id | genre_id
答案 1 :(得分:2)
你真的想要规范化数据,并将流派和专辑存储到不同表格中的流派关联。
即:理想情况下,你有三张桌子:
通过这样做,您将能够根据需要轻松添加/删除等类型,并且能够通过连接表来执行查找,而不必执行字符串操作。
答案 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