代码之家  ›  专栏  ›  技术社区  ›  vicatcu

数据库和深度复制

  •  4
  • vicatcu  · 技术社区  · 14 年前

    如果我发现自己想要对存储在关系数据库中的对象进行深度复制,那么我是否必须在体系结构上做一些根本错误的事情?这是一个不同的角度对另一个(更详细)的问题,我问,但没有得到太多的回应 Copying Relational Table Data .

    4 回复  |  直到 7 年前
        1
  •  1
  •   Doc Brown    14 年前

    它取决于关系表所表示的内容,以及将哪些实体组合在一起以构建“业务对象”。例如,如果您有一个内容管理系统的关系模型,其中有一个表“Postings”和一个表“Text\u lines”,其中每个发布都由一个文本行列表组成,那么您的业务对象“Posting”的有效副本很可能是“Postings”实体以及所属文本行实体的深度副本。

    另一方面,有两个表“Department”和“Employees”,一个部门的正确副本很可能不是深度副本(至少,如果每个员工在一个时间点上正好与一个部门关联)。在关系数据库方案中,这些差异通常与分配给关系的引用完整性检查同时发生。“过账”关系“文本行”可以使用具有“ON DELETE CASCADE”完整性的外键约束进行建模(当然,如果您的数据库支持的话)。“部门”->然而,员工不应该对其进行这样的“ON DELETE CASCADE”检查。

        2
  •  2
  •   hvgotcodes    14 年前

    不一定。为了实现版本控制方案,我自己也做了很多成功的工作。基本上可以对整个图进行版本控制(使用compite键,其中键的一部分是thing id,另一部分是版本号),我们可以很容易地访问所有以前版本的图或子图。

        3
  •  2
  •   BenV Langley    14 年前

    通常,如果复制父对象,则只希望复制对子对象的引用,而不希望复制对象本身。但是,在某些情况下,例如在给定的时间点保存对象的状态,需要复制子对象。所以,为了回答你的问题,这个场景应该让你停下来思考,但不一定意味着你做错了什么。

        4
  •  2
  •   Will A    14 年前