在子类型中实现引用完整性
问题
在子类型结构中实现引用完整性的建议解决方案涉及创建重复表和附加约束。这种方法似乎不必要地复杂和低效。
简介
在关系数据库中实现引用完整性需要正确理解关系模型及其相关标准。 IDEF1X 表示法为子类型及其关系建模提供了一个全面的框架。
实现子类型的引用完整性
子类型结构有两种类型:
独占子类型: 在这种情况下,每个基本类型行必须恰好有一个子类型行。基本类型通常具有标识现有子类型的鉴别器列。
非独占子类型: 在这种情况下,基本类型行可以有零个或多个子类型行。子类型的存在是通过子类型表的存在性检查来验证的。
带鉴别器的独占子类型
鉴别器列
- A检查约束确保鉴别器列的值在允许的范围内
- 基本类型的唯一 PK 确保仅存在一个基本类型行。
子类型引用完整性
- A FK子类型中的约束引用基类型的 PK。
- A UDF 用于查询基类型是否存在 PK 以及正确的鉴别器值。
- 子类型中的 CHECK CONSTRAINT 调用 UDF 以确保基类型存在正确的子类型。
非独占子类型
- 没有鉴别器列必需。
- 子类型的存在是通过使用基类型 PK 检查子类型表来确定的。
- 子类型中的 PK、FK 和范围检查约束足以保证引用完整性。
对提议的批评解决方案
- 复制表和创建额外的约束会导致不必要的数据膨胀和额外的复杂性。
- 建议的解决方案不能有效地强制基类型和子类型之间的引用完整性。
建议
- 使用上述标准 IDEF1X 方法在子类型中实现引用完整性。
- 考虑使用存储过程或事务来管理基类型和子类型表中的插入和更新,以保持引用完整性。
- 强制执行授权规则并使用安全的 API 端点来防止未经授权的数据库修改。
以上是如何在数据库子类型中有效实现引用完整性?的详细内容。更多信息请关注PHP中文网其他相关文章!