对于我的课程,我得到了Vinyl商店的一些示例(Postgres)SQL代码。
数据库的一部分是album
表,用于存储有关专辑的信息(标题,流派等),而artist
表用于存储有关专辑的唱片信息(名称,类型)。
您可以在下面查看我正在处理的代码:
create table album
(
albumID varchar(8) primary key,
album_title varchar(50) not null,
album_genre varchar(20) not null,
album_label varchar(25) not null,
album_catalogue_no varchar(15) not null,
album_release_date varchar(4) not null,
album_type varchar(10) not null
);
create table artist
(
artistID varchar(8) primary key,
artist_name varchar(40) not null,
artist_genre varchar(20) not null
);
create table albumartist
(
primary key (albumID, artistID),
albumID varchar(8) references album(albumID),
artistID varchar(8) references artist(artistID)
);
我努力理解的是为什么albumartist
存在?
在artistID
表中放置album
会更容易吗?
(在有人说之前,我现在无法联系我的讲师,这就是我在这里要求的原因)
答案 0 :(得分:2)
为了进一步说明,表albumartist
是一个Associative Entity,这意味着它充当了artist
和album
表之间的多对多桥梁。通过添加此结点表,它可以使一张专辑拥有一个以上的歌手,而一个歌手拥有一个以上的专辑。
看看您对albumartist
表的定义,我倾向于将其更改为该定义,因为在该表中没有包含null
值的行是没有目的的:
create table albumartist
(
primary key (albumID, artistID),
albumID varchar(8) not null references album(albumID),
artistID varchar(8) not null references artist(artistID)
);