我对此数据库感到困惑,我应该创建更多的外键还是更多的列?

时间:2019-05-29 09:12:03

标签: sql sql-server

我正在创建有关Movies, Series and Actors的数据库。 Movies部分已经完成,但是我对Series+Actors部分感到困惑。我的目标是要有4张桌子,一般来说是1张,其中1张带有季节和剧集的数量,1张带有演员信息(已经通过外键与电影表连接)。

我创建了以下表格:

SeriesData (
  SerieID int PK,
  SerieName varchar(50),
  SerieDescription text,
  SerieCategory varchar(50),
  SerieYear varchar(4),
  ActorID int FK);

ActorsData (
  ActorID int PK,
  ActorName varchar(50),
  ActorAge varchar(3),
  MoviesParticipated varchar(50))

暂时可以,但是现在我感到困惑。 我需要再创建2个表吗?季节和情节表,因为我们不能在第一个表中放入该类型的数据,因此我需要一个MoviesParticipated表。我该如何做才能获得“每个季节有几集?”的数据。

这是我当前的SeasonsEpisodes表,但这只能告诉我该系列有多少季和几集?

SeasonsEpisodes (
  SerieID int PK,
  SerieSeasons int,
  SerieEpisodes int

“ MoviesParticipated”表是这样的(我的目标是输出他参与的每个电影/系列)?

MoviesParticipated (
ActorID int PK
MovieID varchar(50) FK,
SerieID varchar(50) FK)

我应该创建哪个外键?我应该添加更多列吗?

2 个答案:

答案 0 :(得分:2)

1)由于参加电影/系列电影的演员是[多对多]组合,因此有效地使用单独的表格进行映射。

2)您不需要在Actors表上引用“参与”,因为在“参与表”中引用了ActorsID

您可以参考以下表格结构:

--Series Table
SeriesData (
SeriesID int PK,
SeriesName varchar(50),
SeriesDescription text,
SeriesCategory varchar(50),
SeriesYear varchar(4));

--Actors Table
ActorsData (
ActorID int PK,
ActorName varchar(50),
ActorAge varchar(3))

--SeasonsnEpisodes
SeasonsEpisodes (
SeasonsEpisodesId in PK,
SeriesID int FK,
SerieSeasons int,
SerieEpisodes int)

按@ADyson的评论进行编辑

--MoviesParticipated
MoviesParticipated (
MoviesParticipationId int PK
ActorID int FK
MovieID varchar(50) FK)

--SeriesParticipated
SeriesParticipated (
SeriesParticipationId int PK
ActorID int FK
SeriesID varchar(50) FK)

答案 1 :(得分:0)

由于表 Series 和表 Episode 之间的关系是[1到N] 您不一定需要第三张桌子。只需在指向系列主键的情节中添加外键即可。

对于系列,您应该得到这样的东西:

  Series (
  SerieID int PK,
  SerieName varchar(50),
  SerieDescription text,
  SerieCategory varchar(50),
  SerieYear varchar(4));

对于

  Episodes (
  SerieID int PK,
  SeasonNumber int,
  EpisodeNumber int,
  EpisodeLength int,
  ...
  SeriesID FK)

关于系列-演员关系,您需要第三个表格。

相关问题