2017-11-08 13 views
0

처음부터 관계형 데이터베이스를 만드는 일은 저에게 맡깁니다. 내 질문은 같은 유형의 속성을 여러 개 처리하는 방법입니다.SQL Create : 주어진 키에 대해 동일한 유형의 여러 속성을 처리하는 방법

나는 등

____________________________________________ 
|Compound Key  |Album   |Artist | 
|Jay-ZThe Blueprint |The Blueprint |Jay-Z | 

그리고 다음과 같이있는 사실 테이블이 있습니다. 앨범이 출시 된 라벨에 대한 조회 표가 있지만 대부분의 앨범은 여러 라벨로 출시됩니다. 이 작업을 수행하는 올바른 방법은 무엇입니까?

____________________________________________ 
|Compound Key  |Label1  |Label2 | 
|Jay-ZThe Blueprint |Roc-A-Fella |Def-Jam | 

또는 이와 비슷합니까?

__________________________________ 
|Compound Key  |Label  | 
|Jay-ZThe Blueprint |Roc-A-Fella| 
|Jay-ZThe Blueprint |Def-Jam | 
+2

레이블은 행입니다. 하지만 당신은 분명히 대리 키를 고려해야하고 Compound 키 대신 관계에서이를 사용해야합니다! 그런 식으로 스펠링 등을 변경하면 기본 키를 변경할 필요가 없습니다 – Matt

+1

두 번째 방법은이를 처리하는 더 좋은 방법입니다. –

답변

1

저는 아티스트 테이블, 라벨 테이블, 앨범 테이블 및 라벨/앨범 외부 참조 테이블을 제안합니다. 아래 참조 :

CREATE TABLE artist (
artistID INT PRIMARY KEY, 
ArtistName VARCHAR(100) 
) 

CREATE TABLE album (
albumID INT PRIMARY KEY, 
AlbumName VARCHAR(100), 
ArtistID INT 

CONSTRAINT FK_ArtistID FOREIGN KEY (ArtistID) REFERENCES artist(artistID) 
) 

CREATE TABLE Label (
LabelID INT PRIMARY KEY, 
LabelName VARCHAR(100) 
) 

CREATE TABLE AlbumLabelXref (
AlbumLabelID INT PRIMARY KEY, 
AlbumID INT, 
LabelID INT 

CONSTRAINT FK_LabelID FOREIGN KEY (LabelID) REFERENCES Label(LabelID), 
CONSTRAINT FK_AlbumID FOREIGN KEY (AlbumID) REFERENCES Album(AlbumID) 
) 

INSERT INTO artist 
VALUES 
(1, 'Michael Jackson') 

INSERT INTO album 
VALUES 
(1, 'Thriller', 1) 

INSERT INTO Label 
VALUES 
(1, 'Epic') 

INSERT INTO AlbumLabelXref 
VALUES 
(1,1,1) 



SELECT 
ar.ArtistName, 
ab.AlbumName, 
l.LabelName 


FROM AlbumLabelXref alx 

INNER JOIN Album ab 
    ON ab.albumID = alx.AlbumID 

INNER JOIN Label l 
    ON l.LabelID = alx.LabelID 

INNER JOIN artist ar 
    ON ar.artistID = ab.ArtistID