在物化路径上实施参照完整性?

时间:2009-08-07 04:38:49

标签: sql database tree hierarchical-data referential-integrity

我正在尝试使用此处描述的物化路径模型实现树状结构:http://www.dbazine.com/oracle/or-articles/tropashko4

是否可以在[path]字段上强制执行参照完整性?我不知道SQL如何做到这一点,我是否必须在DAL中手动完成?

4 个答案:

答案 0 :(得分:3)

是的,当您对分层数据使用物化路径或嵌套集解决方案时,您必须自己在DAL中强制执行数据完整性。

Adjacency List支持参照完整性,对于我称之为“Closure Table”的设计也是如此(Tropashko将此设计称为“传递闭包关系”)。

答案 1 :(得分:3)

Vadim Tropashko在那篇文章中提出的“物化路径”,将秩序概念引入关系(“琼斯是第二个成员”。)。

“物化路径”只不过是传递闭包上的“某种形式的物化视图”,因此遇到与所有其他“物化视图”完全相同的问题,除了因为参与而在算法上更加严重关闭。

当关闭时的约束正在发挥作用时,SQL几乎完全无能为力。 (意思是:是的,SQL要求你自己完成所有事情。)这是RM显示其几乎无限功率的最大值的区域之一,但SQL非常糟糕,并且大多数人错误的SQL是如此的遗憾为了关系。

(@ Bill Karwin:我希望能够给你+1关于树的深度和性能结果之间的关系的评论。没有已知的算法来计算表现良好的闭包具有“疯狂”深度的树的情况。这是一个算法问题,不是SQL也不是关系问题。)

修改

是,RM =关系模型

答案 2 :(得分:1)

在物化路径模型中,您可以使用任意字符串(可能是unicode字符串以允许超过256个子节点)而不是形式为“x.y.z”的特殊字符串。父节点的id是直接子节点的id,删除了最后一个字符。您可以使用像(我的示例适用于PostgreSQL)

之类的检查约束轻松实施此操作
check(parent_id = substring(id from 1 for char_length(id)-1)),

在create table命令中。如果你坚持使用“x.y.z”形式的字符串,你将不得不使用正则表达式,但我猜想有可能找到相应的检查约束。

答案 3 :(得分:0)

是的,我们可以“在[路径]字段上强制执行参照完整性”。几年前我就这样做了,在这里描述:

Store your configuration settings as a hierarchy in a database