2017-11-08 4 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

2番目の方法はこれを処理するより良い方法です。 –

答えて

1

アーティストテーブル、ラベルテーブル、アルバムテーブル、ラベル/アルバムxrefテーブルをお勧めします。下記を参照してください。

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 
関連する問題