音乐数据库设计
我是一个初学者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
的列表。
如果有人想帮忙。我真的很感激。
`
这样的想法是不是在关系数据库设计感很“关系”。我认为你应该在自己的表中拥有播放列表项目
playlist_item(playlist_id, album_id, track_id)
也就是说,如果track_id不是唯一的!
然后不需要按照您的建议将track_id存储在一个集合中。不需要在您的php代码中爆炸或这样。再多一个JOIN
。
一般建议:在每个表格中始终使用一个简单的主键。根据需要添加自然键作为索引和/或创建约束。
希望track_id是轨道表上的主键,因此可以从playlist_item表中删除album_id。你可能也需要一个play_order列。 –
我会给每个表一个名为“ID”的通用主键列,但它似乎已经失去了兴趣。 – luksch
播放列表跟踪是一个“多对一对多”的关系,所以你需要之间的表:
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;
听起来没问题。设计应该独立于DBMS。如果它被严重优化,那不是你的错。你的工作是设计一个一致的逻辑模式。 – runDOSrun
同一曲目有时可能会出现在多个专辑中。所以,我会使用联结表(曲目,专辑)。 – Strawberry
除了作为一个启动mysql用户,你是一个启动数据库设计师?如果是这样,我建议你先学习基础知识。基本面并不明显,但可以学习。在回答上一个问题时有很多参考文献。如果我能找到那个问题,我会通过它。 –