【发布时间】:2010-09-12 21:53:07
【问题描述】:
我想知道是否有一种简洁的方式来表示 is-a 关系,如下例所示:
该数据库存储三种类型节目的录制时间:电影、游戏节目、戏剧。在面向对象的意义上,这些中的每一个都是一个程序。这些子类中的每一个都有不同的属性。以下是表格(fk 前缀表示外键):
电影
身份证
名称
fkDirector
gameShow
身份证
名称
fkHost
fk参赛者
戏剧
身份证
姓名
在 OO 术语中,记录表看起来像这样:
记录
身份证
fk程序
开始时间
结束时间
在不违反正常形式的情况下,我能想到的唯一方法是拥有三个记录表,即 recordMovie、recordGameShow 和 recordDrama.
有没有办法在不违反数据库规范化原则的情况下将这些表合并为一个?
这里有一些无效的例子来说明这个想法:
程序
身份证
fk电影
fkGameShow
韩剧
该表违反了第一范式,因为它将包含空值。对于每一行,3 个条目中只有一个不为空。
程序
身份证
fkSpecific ← fkMovie 或 fkGameShow 或 fkDrama
fkType ← 将指示要查看的表
这里我将无法强制执行参照完整性,因为 fkSpecific 可能指向三个表之一。
我只是想节省在这里使用 3 张桌子而不是一张桌子的开销。也许这根本不适用于 RDB。
【问题讨论】:
标签: database-design schema relational oop