database-design - 图形和版本控制

标签 database-design version-control data-structures graph graph-theory

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

见下图: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 退化图),而不是一般图。

    关于database-design - 图形和版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060645/

    相关文章:

    mysql - 如果电子邮件地址是我网页的登录名——我应该如何设计它背后的非常简单的数据库?

    sql - 许多实体的一个地址表?

    php - 将面向对象的数据直接编码为关系数据库中的单行是否被认为是错误的形式?

    version-control - 为什么 Kiln 基于 Mercurial,而不是其他 (D)VCS

    mysql - 用于存储个人资料图片的最佳数据库设计

    version-control - 使用 Mercurial checkin 单个文件?

    version-control - hg 到 git sync 的一种方法

    data-structures - Zipper 数据结构是什么?我应该使用它吗?

    c++ - 自定义数据类型是否是可变大小效率的可能且可行的选择?

    c - 将数据结构保存到文本文件