我试图理解一个简单的音乐数据库设计。有些表只包含外键和主键。我不知道如何和何时使用这些表,也不知道要插入什么。设计如下:

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);

10-06 05:41