我想知道是否有一种干净的方式来表示 is-a 关系,如下例所示:
该数据库存储三种类型节目的录制时间:电影、游戏节目、戏剧。在面向对象的意义上,这些中的每一个都是一个程序。这些子类中的每一个都有不同的属性。以下是表格(fk 前缀表示外键):
电影
ID
名称
fkDirector
gameShow
id
name
fkHost
fkContestant
剧
名
_
在 OO 术语中,记录表看起来像这样:
record
id
fkProgram
startTime
endTime
在不违反常规形式的情况下,我能想到的唯一方法是拥有三个记录表,即 recordMovie、recordGameShow和recordDrama。
有没有办法在不违反数据库规范化原则的情况下将这些表合并为一个?
以下是一些无效的示例来说明这个想法:
程序
id
fkMovie
fkGameShow
fkDrama
该表违反了第一范式,因为它将包含空值。对于每一行,3 个条目中只有一个不为空。
program
id
fkSpecific ← fkMovie OR fkGameShow OR fkDrama
fkType ← 将指示要查看的表
在这里,我将无法强制执行参照完整性,因为 fkSpecific 可能指向三个表之一。
我只是想节省在这里有 3 个表而不是一个的开销。也许这根本不适用于 RDB。