我是初学者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
作为服务器端,它将有点慢。因为我们必须使用implode
和looping
来获取所有track_title
的列表。
如果有人想帮忙的话。我真的很感激。
`
答案 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;