我正在创建有关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)
我应该创建哪个外键?我应该添加更多列吗?
答案 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)
关于系列-演员关系,您需要第三个表格。