2012-11-17 118 views
3

我正在创建音乐数据库。MySQL创建音乐数据库

我想我需要3个表格,playlist,music和一个表格来将它们连接在一起。

Playlist table: 
play_id PK, 
Created_By, 
play_name 

music table: 
music_id PK, 
track_title, 
artist, 
album 

我想要一个用户创建他们想要的尽可能多的播放列表。他们可以根据需要为播放列表添加尽可能多的曲目。我理解表中的播放列表部分,但是当它从音乐表格中将音轨添加到播放列表表格时,就会变得模糊。如果我的音乐桌上充满了曲目,我可以让我们说2首曲目出现在一个播放列表中?

我有点不确定如何做到这一点,如果我的表结构是好的,或者我需要添加更多的字段。我不确定它是否与主键和外键有关,我假设我需要一个单独的表来链接它们。任何帮助,将不胜感激。

回答

1

我想,你走在了正确的轨道上。一个表设置类似下面应该做你需要什么,我认为(这是从我的头顶,所以请原谅任何语法问题):

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条目在曲目列表中的不同位置多次加入播放列表。

编辑添加外键约束。

2

如果我有充满音乐的音乐表我怎么可以让我们说 2首曲目出现在一个播放列表中?

你应该是这样的:

Tracks

  • TrackId
  • Title
  • ...

PlaylistsTracks

  • Id
  • PlayListId
  • TrackId
  • ...

对于你已经拥有了其他两个表:

播放表:play_id PK,CREATED_BY,play_name

音乐表:music_id PK,TRACK_TITLE,艺术家,专辑

这些表格有问题。你的表格不是normalized。您应该创建两个额外的表:

Users

  • Id
  • Name
  • ...

Artists

  • ID
  • Name
  • ...

然后:

  • 充分利用Created_By引用users(Id)列的外键。
  • music表中创建外键ArtistID而不是artist列,参考Artists(ID)
  • 使track_id列代替music表中的track_title列。