你走在正确的轨道上,我想。我认为像下面这样的表设置应该可以满足您的需要(这不是我的想法,所以请原谅任何语法问题):
DROP TABLE IF EXISTS tPlaylist;
CREATE TABLE tPlaylist (
playlistId INT,
/* ... Other Data ... */
PRIMARY KEY (playlistId)
);
DROP TABLE IF EXISTS tMusic;
CREATE TABLE tMusic (
musicId INT,
/* ... Other Data ... */
PRIMARY KEY (musicId)
);
DROP TABLE IF EXISTS tPlaylistMusicMap;
CREATE TABLE tPlaylistMusicMap (
mapId INT,
playlistId INT,
musicId INT,
trackNumber INT,
PRIMARY KEY (mapId),
/* ... Other Data ... */
FOREIGN KEY (playlistId) REFERENCES tPlaylist (playlistId),
FOREIGN KEY (musicId) REFERENCES tMusic (musicId),
UNIQUE KEY (playlistId, musicId, trackNumber)
);
其基本要点是让用户在 tPlaylist 表中创建他们的播放列表(每个用户播放列表单行),将所有音乐曲目数据放在 tMusic 中,映射表 tPlaylistMusicMap 是每个播放列表中各个曲目的存储位置. playlistId、musicId 和 trackNumber 上的唯一键允许相同的 tMusic 条目在曲目列表的不同位置多次出现在播放列表中。
编辑添加外键约束。