数据库设计 – 图形和版本控制

我有一个有向图数据结构,我试图为每个顶点实现单独的版本控制.这会产生一些有趣的场景,我非常感谢你们有任何想法.具体来说,我希望在遇到所述方案时解决系统的默认行为.

请参见下图:Graph versions

场景1:“空指针悖论”

顶点A回滚到1.0版.由于此回滚将级联其子图,因此C将不再指向D.这可能会造成危险.行为应该是:

> 1.1:删除边C – > D,创建一个破碎的图形
> 1.2:删除D,留下E孤儿
> 1.3:删除D和E.
> 1.4:在删除指向D的所有边(在本例中为E – > D)之前拒绝执行回滚
> 1.X:替代解决方案?

场景2:“间接影响”

顶点D已更新,因此以下内容成立:

> D现在是版本1.2
> E现在是1.1版
> C现在是版本1.3
> A现在是版本1.3

顶点A现在回滚到版本1.2,因此以下内容成立:

> A现在是版本1.2
> C现在是1.2版
> D现在是1.1版

默认行为应该是:

> 2.1:将E回滚到1.0
> 2.2:由于版本危险而拒绝回滚,实际上会影响功能
> 2.X:替代解决方案?

在我看来,这里有一些关于粒度的混淆.如果您只对单个顶点进行版本而不是图形,则回滚单个顶点不应影响图形的其余部分.如果,OTOH,您希望回滚整个图形,那么您还应该对整个图形进行版本控制.

问题是,如果您只对单个顶点进行版本设置,那么您只能为各个顶点提供完整性保证,但不能对整个图形进行完整性保证.因此,如果你描述它,回滚一个单独的顶点“涟漪”整个图形(或至少连接的子图形),那么你不能保证最终处于一致的状态.

似乎与您正在尝试的最接近的研究是关于XML的版本控制,但是,它仅处理强类型树(IOW退化图),而不是一般图.

相关文章
相关标签/搜索