SQL 创建:如何处理给定键的多个相同类型的属性
SQL Create: How handle multiple attributes of same type for given key
我正在尝试从头开始创建关系数据库。我的问题是如何处理多个相同类型的属性。
我有一个事实table如下
____________________________________________
|Compound Key |Album |Artist |
|Jay-ZThe Blueprint |The Blueprint |Jay-Z |
等等。我查询 table 一张专辑是在哪个标签下发行的,但大多数专辑都是在多个标签下发行的。正确的做法是:
____________________________________________
|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 |
我会推荐艺术家 table、唱片公司 table、专辑 table 和 label/album 外部参照 table。见下文:
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
我正在尝试从头开始创建关系数据库。我的问题是如何处理多个相同类型的属性。
我有一个事实table如下
____________________________________________
|Compound Key |Album |Artist |
|Jay-ZThe Blueprint |The Blueprint |Jay-Z |
等等。我查询 table 一张专辑是在哪个标签下发行的,但大多数专辑都是在多个标签下发行的。正确的做法是:
____________________________________________
|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 |
我会推荐艺术家 table、唱片公司 table、专辑 table 和 label/album 外部参照 table。见下文:
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