音乐数据库设计

时间:2015-07-11 10:52:06

标签: mysql database database-design

我是初学者mysql学习者,想要使用规范化规则设计音乐数据库。

我们有track table存储tracks的详细信息,例如track_id, track_name, artist_name等,但我还要创建一个playlist表,其中一个曲目属于多个一个播放列表,我怎么设计这种类型的数据库。

track_table( track_id, track_title, album_id ) album_table( album_id, album_name, total_track ) playlist( plyalist_id, playlist_name, track_ids )

我应该使用上面的方法,track_ids将是这样的:101, 102, 103, 104, 105,但我认为这不是一个好主意,因为php作为服务器端,它将有点慢。因为我们必须使用implodelooping来获取所有track_title的列表。

如果有人想帮忙的话。我真的很感激。

`

2 个答案:

答案 0 :(得分:0)

这个想法不是很关键"关系"在关系数据库设计意义上。我认为你应该在自己的表格中有播放列表项目

playlist_item(playlist_id, album_id, track_id)

也就是说,如果track_id不是唯一的!

不需要按照建议将track_ids存储在一个集合中。不需要在你的PHP代码中内爆或类似内容。还有一个JOIN

一般建议:在每个表中始终使用简单的主键。根据需要添加自然键作为索引和/或创建约束。

答案 1 :(得分:0)

要跟踪的播放列表是“多对多”关系,因此您需要一个表格:

playlist( plyalist_id, playlist_name)
playlist_tracks (playlist_id, track_id, sequence)

sequence是1,2,...(假设您希望播放列表按特定顺序播放)。

CREATE TABLE playlist_tracks (
    playlist_id ...,
    track_id ...,
    sequence TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY(playlist_id, sequence),  -- for playing them
    INDEX(track_id)   -- in case you want to see which playlists contain a particular track
) ENGINE=InnoDB;