锚定建模中的非破坏性模式演化是什么意思?

问题描述 投票:0回答:2

假设您有一个锚模型,并将单个名称属性替换为三个属性:FirstName、MiddleName 和 LastName。原始名称属性会发生什么情况?我可以想象其他感觉具有破坏性的模式更改,那么 Anchor Modeling 声称以非破坏性方式演化模式意味着什么?

database-design database-schema anchor-modeling
2个回答
2
投票

破坏性操作影响正常运行时间

它可能指的是它与正常运行时间的相互作用。如果您更改了足够大小的基表,您将暂停对其的请求,直到它完成。使用锚定建模,就不存在这种情况,因为新列是不与基表交互的新实体(就阻止对基表的 I/O 操作而言,除了删除之外,这是没有意义的,因为新列被实现为空表)。

因此,假设您有一个带有 FullName 属性的 Person 基表。然后,您会以非破坏性方式演变为包含 FirstName、MiddleName 和 LastName。 FullName 表可能会继续有用,直到所有代码路径都采用 First、Middle 和 Last。此时,它变成了一种退化器官,继续进化类比。

审核(删除)此表也是非破坏性的。作为一个单独的实体,其生命周期的破坏不会中断任何基础表或属性表的操作。

这可能就是锚模型作者所说的破坏性的意思。

破坏正常运行时间。


0
投票

锚模型由于其集合语义而进行非破坏性模式演化

多属性列是 1NF 违规,其标准化具有破坏性

您的

Name
FirstName
MiddleName
LastName
示例在锚点建模中不起作用的原因是因为多属性属性“Name”不是原子的,因此违反了 1NF,即彻底取消 6NF 的资格。但是 6NF 及其仅具有微不足道的连接依赖性的约束,即。 e.每个表最多需要一个属性才能使锚建模的集合语义发挥作用。这样,您就可以根据需要自由组合列。

此外,规范化可能是一个破坏性的过程,不仅对于 BCNF 如此,对于 1NF 也是如此,因为你现在不再有任何(隐式)内表了。锚建模只允许插入,因此无法处理这种破坏性操作。

对于锚模型,规则是尽可能严格地标准化,并选择不太可能的属性,最多保证永远不必标准化,即。 e.再次分裂。对于一般数据库来说,这也是一个很好的做法。

高度的规范化和形式化使模式维护自动化

锚模型不仅是高度规范化的,而且是高度形式化的,无论是在大量使用集合论的过渡建模理论中,还是在表命名约定中。命名约定使得标准化模式维护和模式演化自动化成为可能,这可以通过在线建模器看到,比手工操作更快、更可靠。

以先前模式作为当前模式子集的模式演化

锚模型是仅插入的,这使得模式的演化具有非破坏性,并且对于集合论在模式演化以及在线更新的可能性方面的工作至关重要。

如果你想很好地了解锚点建模的集合语义,我推荐你 Rönnbäck 的论文“建模、冲突、不可靠和变化的信息”,他在其中定义了过渡建模理论,该理论构成了锚点建模的基础。

模式演化

在锚模型中,每次演化模式时,当前模式都会历史化并成为新模式的子集。这节省了现有客户端系统的维护成本,否则需要更新这些系统,这也是开发锚点建模的主要原因之一。

通过将建模器中更新的模型生成的 SQL 应用于现有数据库,可以轻松完成模式演变。对于不变的属性,这个过程是幂等的。

在线更新

更新本身也可以应用于在线数据库,因为仅插入不会破坏数据,也不会更改其格式。

© www.soinside.com 2019 - 2024. All rights reserved.