sql - 我对这个数据库感到困惑,我应该创建更多外键还是更多列?
问题描述
我正在创建这个关于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)
我应该创建哪些外键?我应该添加更多列吗?
解决方案
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)
推荐阅读
- azure-devops - Azure DevOps 部署到本地服务器?
- pdf - 运行 OCRmyPDF 的问题:WinError2 和无效的版本号
- angular - 未定义的验证不起作用-角度 11
- mapstruct - 有没有办法在 Mapstruct 映射器中为单个字段指定自定义 getter?
- flutter - 从 Build->Flutter->Build APK 创建构建可以生成没有颜色和数据的构建
- python - 有没有办法从 Python Tkinter 中特定帧的输入框中检索数据?
- typescript - 打字稿:输入数据
= 结果 - elasticsearch - 异常检测 Kibana 插件的配置
- npm - npm 奇怪的 bug,钛 Appc 合金
- sql-server - 通过 HAproxy 使用 Powershell 连接到 MSSQL