我将尝试创建一个电影分类的数据库模型,其中每部电影可以从多个评级系统(例如BBFC、MPAA)中选择一个单一的分类。这是当前的设计,包括所有暗示的主键和外键:
问题出在
是否有合理的方法可以重构这个表格,以便通过数据库约束强制执行电影从任何给定系统获得零个或一个分类,考虑以下要求:
TABLE Movie
(
MovieId INT -- PK
)
TABLE ClassificationSystem
(
ClassificationSystemId TINYINT -- PK
)
TABLE Classification
(
ClassificationId INT, -- PK
ClassificationSystemId TINYINT -- FK
)
TABLE MovieClassification
(
MovieId INT, -- composite PK, FK
ClassificationId INT, -- composite PK, FK
Advice NVARCHAR(250) -- description of why the classification was given
)
问题出在
MovieClassification
表上,它的约束条件允许来自同一系统的多个分类,但理想情况下,它应该只允许来自给定系统的零个或一个分类。是否有合理的方法可以重构这个表格,以便通过数据库约束强制执行电影从任何给定系统获得零个或一个分类,考虑以下要求:
- 不要复制可查找的信息(即在
MovieClassification
表中复制ClassificationSystemId
不是一个好的解决方案,因为这可能与Classification
表中的值不同步) - 保持可扩展性以适应多个分类系统(即新的分类系统不需要对表结构进行任何更改)?
Advice
列 - 每个电影到分类的映射都需要具有说明为什么将该分类赋予该电影的文本描述。任何设计都需要支持这一点。