我正在尝试为电影分类创建一个数据库模型,其中每部电影都可以从多个评级系统(例如 BBFC、MPAA)中的每一个中获得一个分类。这是当前的设计,包含所有隐含的 PK 和 FK:
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
表的约束条件将允许来自同一系统的多个分类,而理想情况下它应该只允许来自给定系统的零或一个分类。
考虑到以下要求,是否有任何合理的方法来重组它,以便从任何给定系统中精确地具有零或一个分类的电影由数据库约束强制执行?
- 不要复制可以查找的信息(即
ClassificationSystemId
在MovieClassification
表中复制不是一个好的解决方案,因为这可能与表中的值不同步Classification
) - 保持可扩展到多个分类系统(即一个新的分类系统不需要对表结构进行任何更改)?
还要注意该Advice
列 - 电影到分类的每个映射都需要有一个文本描述,说明为什么将该分类给予该电影。任何设计都需要支持这一点。