我试图理解一个简单的音乐数据库设计。有些表只包含外键和主键。我不知道如何和何时使用这些表,也不知道要插入什么。设计如下:
Track:
id primary key
title
duration
live-performance (true or false)
year
Artist:
id primary key
name
ArtistTrack:
id primary key
artistID
trackID
Album:
id primary key
title
AlbumTrack:
id primary key
albumID
trackID
track-number
Genre:
id primary key
name
GenreTrack:
id primary key
genreID
trackID
例如,如果我在
Track
表中插入一个曲目,在Artist
表中插入一个艺术家,那么我应该在ArtistTrack
表中插入什么?我假设ArtistTrack
表中的属性是与各自表中的主键相同的数字?我已经看到了一些类似的设计,但我就是不明白。我知道一个外键把表连接在一起。有人能给我举个如何使用这些桌子的例子吗?
最佳答案
ArtistTrack
表是连接表,表示m:n关系的经典方法。如果在trackId
表中引用Artist
,则意味着每个艺术家最多只能有一个曲目。假设这不是一个管理一次性奇迹的数据库,那就错了。如果在artistId
表中引用Track
,则每个曲目最多只能由一名艺术家组成。如果您希望允许在此数据库中进行协作,那也是错误的。
解决方案是有一个ArtistTrack
表,正如您所注意到的,它只引用了相关的艺术家和曲目。例如。:
-- Insert the track:
INSERT INTO Track VALUES (1, 'some track', 10, false, 1999);
-- Insert a couple of artists:
INSERT INTO Artist VALUES (1, 'Jay');
INSERT INTO Artist VALUES (2, 'Silent Bob');
-- Make them collaborate on this track
INSERT INTO ArtistTrack VALUES (1, 1, 1);
INSERT INTO ArtistTrack VALUES (2, 2, 1);