首页 > 解决方案 > 我对这个数据库感到困惑,我应该创建更多外键还是更多列?

问题描述

我正在创建这个关于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)

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

标签: sqlsql-server

解决方案


1) 由于参与的电影/剧集的演员是 [多对多] 组合,因此有一个单独的映射表是有效的。

2) 您不需要在 Actors 表上引用 Participation,因为 ActorsID 在 Participation 表中被引用

您可以参考下表结构:

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

推荐阅读