2012-11-17 116 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列。