【发布时间】:2011-02-17 14:47:47
【问题描述】:
我正在尝试为电影分类创建一个数据库模型,其中每部电影都可以从多个评级系统(例如 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 表,其约束允许来自同一系统的多个分类,而理想情况下它应该只允许来自给定系统的零或一个分类。
在满足以下要求的情况下,是否有任何合理的方法来重构它,以便通过数据库约束强制执行来自任何给定系统的具有零或一个分类的电影?
- 不要复制可以查找的信息(即在
MovieClassification表中复制ClassificationSystemId不是一个好的解决方案,因为这可能与Classification表中的值不同步) - 保持可扩展到多个分类系统(即新分类系统不需要对表结构进行任何更改)?
另请注意Advice 列 - 电影到分类的每个映射都需要有文字说明,说明为什么将分类给予该电影。任何设计都需要支持这一点。
【问题讨论】:
-
@Marcelo - 刚刚添加了明确的注释
标签: sql-server database-design sql-server-2008 normalization referential-integrity