我有一个包含三个表的Oracle数据库:
表1:Vehicle
表2:Car
表3:Bus
在表1中:
Car
,我希望专栏Item
存储来自ID
表的Car
; Bus
,我希望专栏Item
存储来自ID
表的Bus
; 使用外键约束链接表时会出现问题,因为例如,如果我选择车载ID 进入车辆表 > 总线表中不存在,Oracle将引发错误。
我实际上在做的是,我处理的表没有任何关系,但我面临数据不一致的风险,如果表格中的一行总线或汽车已删除。
有人有想法吗?
答案 0 :(得分:1)
由于Oracle支持延迟外键,因此您可以强制执行“子”行的存在和排他性。确切的技术解释如下:How to create multiple one to one's
我不确定这是一个非常好的主意 - 在这种情况下,一个较少约束但更简单的模型通常被认为是合理的妥协:
根本没有类型鉴别器 - 通过检查子表中相应的行是否存在,您可以轻松确定父类型是否为给定类型。在没有同时获取特定类型数据的情况下检查类型是很少见的,因此这不太可能影响性能。
显然,现在必须在应用程序级别进行更多的强制执行,但这是(罕见的)由于简单性和更好的性能潜力而被认为合理的情况之一 - 索引较少,因此索引维护较少DBMS必须做更少的存储和缓存压力。