2012-11-17 2 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의 고유 한 키를 사용하면 동일한 t 음악 항목을 트랙 목록의 여러 지점에서 여러 번 재생 목록에 포함 할 수 있습니다.

외래 키 제약 조건을 추가하도록 편집되었습니다.

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_Byusers(Id) 열을 참조하는 외래 키를 확인합니다.
    • artist 열 대신 music 테이블에 외래 키 ArtistID을 생성합니다 (참조 Artists(ID) 참조).
    • music 테이블의 track_title 열 대신 track_id 열을 만듭니다.
  • 관련 문제