Oracle 如何进行引用完整性?
我有一个包含三个表的Oracle数据库: 表1:Oracle 如何进行引用完整性?,oracle,relationships,referential-integrity,Oracle,Relationships,Referential Integrity,我有一个包含三个表的Oracle数据库: 表1:车辆 身份证 类型 项目 表2:Car 身份证 烙印 表3:Bus 身份证 公共汽车号码 表1: 如果车辆类型为Car,我希望列项存储Car表中的ID 如果车辆类型为总线,我希望列项存储来自总线表的ID 这会在链接带有外键约束的表时产生问题,因为例如,如果我在车辆表中选择了车辆ID,而该ID在总线表中不存在,Oracle将引发错误 实际上,我所做的是,我处理表时没有任何关系,但我面临着数据不一致的风险,以防表Bus或Car中的一行被
车辆
- 身份证
- 类型
- 项目
Car
- 身份证
- 烙印
Bus
- 身份证
- 公共汽车号码
- 如果车辆类型为
,我希望列Car
存储项
表中的Car
李>ID
- 如果车辆类型为
,我希望列总线
存储来自项
表的总线
李>ID
有人有什么想法吗?因为Oracle支持延迟外键,所以您可以强制“子”行的存在性和排他性。具体技术解释如下:
- 链接帖子的第一部分没有使用显式类型鉴别器,但实现了排他性和存在性。实际上,“反向”FKs的空能力充当类型鉴别器
- 链接文章的第二部分解释了即使不使用延迟外键,如何使用类型鉴别器实现排他性(但不存在)
显然,现在必须在应用程序级别进行更多的强制执行,但这是一种(罕见的)被认为是合理的情况,因为它很简单,并且有可能获得更好的性能—索引更少,因此,DBMS必须进行的索引维护更少,存储和缓存压力更小。外键不能一次引用一个表,另一次引用另一个表。解决方案是在您的基本表上有
CarID
和BusID
,每个都引用Car
或Bus
表,并确保在任何给定时间只有一个可以不是NULL。谢谢朋友,您的答案真的很完整。