锚定建模的优缺点是啥? [关闭]
Posted
技术标签:
【中文标题】锚定建模的优缺点是啥? [关闭]【英文标题】:What are the pros and cons of Anchor Modeling? [closed]锚定建模的优缺点是什么? [关闭] 【发布时间】:2012-05-04 22:13:24 【问题描述】:我目前正在尝试创建一个数据库,其中很大一部分数据是临时的。在阅读了许多这样做的技术(大多数涉及 6nf 标准化)后,我遇到了Anchor Modeling。
我正在开发的架构与锚建模模型非常相似,尤其是因为用例(时间数据 + 已知未知数)非常相似,以至于我很想完全接受它。
我遇到的两个最大问题是,我找不到任何详细说明这种方法的负面影响的信息,而且我找不到任何关于在生产中使用它来制作我需要注意的战争故事和陷阱的组织的参考资料.
我想知道这里是否有人足够熟悉,可以简要说明一些负面因素(因为研究论文和他们的网站中已经很好地宣传了正面因素),以及在生产环境中使用它的任何经验。
【问题讨论】:
【参考方案1】:参考anchormodeling.com
以下是我知道的几点
DB 对象的数量太大而无法手动维护,因此请确保始终使用设计器来改进架构。
目前,设计器完全支持 MS SQL Server,因此如果您必须一直移植代码,您可能需要等到完全支持您的目标数据库。我知道它在下拉框中有 Oracle,但是...
不要期望(也不要求)您的开发人员理解它,他们必须通过 5NF 视图访问模型——这很好。问题是表是通过(而不是)视图上的触发器加载的,这可能(或可能不是)性能问题。
预计您可能需要编写一些额外的维护程序(针对每个时间属性),这些程序尚未自动生成。例如,我经常需要一个时间属性的修剪过程——删除两个连续时间事件中相同 ID 的相同值记录。
生成的视图和查询视图很好地解决了问题,您将来编写的任何内容都可能如此。但是,“其他人”将在 view-over-views-over-views 上编写查询——这并不总是能很好地解决。因此,您可能需要比平时更多地监管查询。
遗憾的是,我最近使用这种方法重构了我仓库的一部分,它的工作就像一个魅力。诚然,仓库没有这里列出的大部分问题。
我建议创建一个演示系统并测试、测试、测试...,尤其是第 3 点——通过触发器加载。
【讨论】:
【参考方案2】:关于上面的第 4 点。重述控制几乎完成,这样您就可以防止两个连续的相同值随着时间的推移而发生。
一般来说,加入不一定是坏事。阅读:Why joins are a good thing。
6NF 在锚定建模中的一大优势是非破坏性模式演化。换句话说,数据库模型的每个先前版本都可以作为当前模型的子集使用。此外,由于更改由模式中的扩展(新表)表示,升级数据库几乎是即时的,并且可以安全地在线完成(即使在生产环境中)。这种好处在 5NF 中会丢失。
【讨论】:
【参考方案3】:我没有读过任何关于它的论文,但由于它基于 6NF,我预计它会遭受 6NF 之后的任何问题。
6NF 要求每个表由一个候选键和不超过一个非键列组成。因此,在最坏的情况下,您将需要九个连接来生成一个 10 列的结果集。但是您也可以设计一个使用 200 个 5NF 表、30 个 BCNF 表和 5 个 6NF 表的数据库。 (我认为这将不再是 Anchor Modeling 本身,它似乎将所有表都放在 6NF 中,但我可能错了。)
神话中的人月在这里仍然很重要。
因此,管理问题不在于是否建立试点系统并将其丢弃。你会这样做的。唯一的问题是是提前计划构建一次性产品,还是承诺将一次性产品交付给客户。
Fred ***s, Jr.,The Mythical Man-Month,第 116 页。
构建原型以测试预期的最坏情况的成本有多低?
【讨论】:
猫,并不是说我不同意你在这里所说的,而是模型本身(以及绘制任何此类模型纸的行为)与该模型的实现之间存在差异(定义数据库结构以实现该模型的行为)。是否有任何法律规定“看起来像” 6NF 的概念/非正式模型也必然导致 IS 6NF 的逻辑数据库结构?就个人而言,我的回答更符合当您使用锚建模作为绘制_IN_formal模型的技术时,“实体”中的单个属性(续...) ... 比使用 ER 作为绘图技术时占用更多平方英寸。由于给定纸张尺寸的必然结果,Anchor 建模无法像 E/R 那样传达尽可能多的 (_IN_formal) 信息。究竟是什么阻止了您在 5NF 而不是 6NF 中实现使用锚定绘制的模型?然而,是什么阻止了您以全 6NF 的 E/R crowfoot 绘制模型? @ErwinSmout:没有关系法则规定 6NF 中的概念模型必须生成 6NF 中的数据库。我之前在 Lotus Notes 中实现了 5NF 概念模型——这与您所能获得的 5NF 物理模型 差不多。但我知道在锚建模中,实现锚、属性或结的每个表必须在6NF中。似乎需要 6NF 中的表来支持 Anchor Modeling 的敏捷方法;我认为如果不做一些不再是“锚建模”的事情,你就不能降到 5NF。 (并不是说这有什么问题。) 如果一个锚模型说“每个客户都有一个名字”,并且它说“每个客户都有一个出生日期”,并且它说“每个客户都有一个 foobar”,那么为什么要你费心定义三个或四个 6NF 表来实现这一点?你有更多的约束要定义,检查它们是引擎的更多运行时工作。一个简单的 5NF 设计(客户 ID、姓名、生日、foobar)与 6NF 设计同样满足锚模型的要求,不是吗?那你为什么说“我不再做锚建模”使用我的单一 5NF 表方法? “你为什么要定义三个或四个 6NF 表来实现这一点?”因为他们认为您需要 6NF 表来将他们的敏捷方法与使用当今 SQL 数据库管理系统的时间支持相结合。所有这些东西都在their publications 中。他们的online demo可以生成SQL;具有三个属性的参与者在四个 6NF 表中实现(三个属性各一个,身份一个加一个)。【参考方案4】:在这篇文章中,我将介绍属于数据库的大部分实际业务。数据库在这个大业务领域的解决方案根本无法通过使用“锚定建模”来解决。 在真实的商业世界中,这种情况每天都在发生。就是数据录入的人,输入了错误的数据。
在实际业务中,数据输入级别经常发生错误。数据输入经常会产生大量错误数据。所以这是一个真正的大问题。 “锚定建模”不能解决这个问题。
任何使用“Anchor Modeling”数据库的人都可能输入错误的数据。这是可能的,因为“锚建模”的作者已经写到可以删除错误的数据。
让我通过下面的例子来解释这个问题: 一位数学教授给成绩最差的学生打了最好的成绩。在这所高中,教授在相应的数据库中输入成绩。这名学生为这项刑事服务给了教授钱。这名学生利用这个假成绩成功进入了大学。 一个暑假过后,数学教授回到了学校。从数据库中删除错误的成绩后,教授在数据库中输入了正确的成绩。在这所学校,他们使用“锚建模”数据库。因此,数学教授删除了“锚建模”作者严格建议的虚假数据。 现在,这个犯下这种罪行的数学教授是干净的,这要归功于“锚建模”软件。
这个例子说,使用“锚建模”,你可以通过应用“锚建模技术”来利用数据进行犯罪
在第 5.4 节中,“锚建模”的作者写道:“删除语句仅在应用于删除错误数据时才允许使用。”。 您可以在“锚建模”的作者撰写的论文“使用第六范式用于结构演化数据的敏捷建模技术”中看到此文本。
请注意,“Anchor modeling”曾在第 28 届国际概念建模会议上发表并获得最佳论文奖?!
“Anchor Modeling”的作者声称他们的数据模型可以保持历史!然而这款“Anchor 造型”的样鞋根本无法维持历史。
由于“锚定建模”允许删除数据,因此“锚定建模”具有对数据的所有操作,即:添加新数据、删除数据和更新数据。更新可以通过两个操作来获得:首先删除数据,然后添加新数据。
这进一步意味着 Anchor 建模没有历史记录,因为它有数据删除和数据更新。
我想指出,在“锚模型”中,“必须”删除每个错误数据。在“锚定建模”中,不可能保留错误数据和更正数据。
“锚模型”不能维护错误数据的历史。
在本文的第一部分中,我展示了通过使用“锚定建模”,任何人都可以利用数据进行犯罪。这意味着“锚模型”运行公司的业务,直接陷入灾难。
【讨论】:
我认为从时态数据库中删除数据的能力不一定是一个不需要的功能。作为一个鼓舞人心的例子——如果有人提交了他们没有 IP 权利的代码,源代码存储库需要一种方法来删除分支或签入。 在我的帖子中,我想指出所谓的“锚建模”中的两个灾难性错误。 “Anchor Modeling”在2009年11月的巴西国际大会上获得一等奖。我对“Anchor Modeling”很感兴趣,因为“Anchor Modeling”论文的主要内容是抄袭我的工作。 Anchor Modeling 只是改变了一些无关紧要的东西。我的数据模型中没有数据删除,也没有数据更新。唯一的数据操作是添加新数据。我的数据模型比现有的数据模型好很多。 您的出版物有链接吗?【参考方案5】:我将举一个例子,以便专业人士可以通过真实而重要的例子看到“锚定建模”有多糟糕。
示例 从事数据库业务的专业人士都知道,有成千上万的国际标准已成功地在数据库中用作密钥。
国际标准: 所有专业人士都知道什么是汽车的“VIN”、书籍的“ISBN”以及数以千计的其他国际标准。
国家标准: 各国对护照、个人证件、银行卡、条形码等都有自己的标准
当地标准: 许多公司都有自己的标准。例如,当您付款时,您有一张带有标准密钥的发票,并且该密钥也写入数据库中。
本示例中所有上述类型的密钥都可以通过各种机构、警察、海关、银行信用卡、邮局等进行检查。您可以在互联网上或通过以下方式检查这些“密钥”中的许多使用手机。
我相信,我在本示例中展示的具有标准键实体的这些数据库的百分比超过了 95%。
对于上述所有情况,“锚代理键”都是无稽之谈。 “Anchor建模”独家使用“anchor-surrogate key”
在我的解决方案中,我使用了所有在全局或本地级别上都是标准且简单的键。
弗拉基米尔·奥德尔金
【讨论】:
以上是关于锚定建模的优缺点是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
ajax 请求的 json vs xml 的优缺点是啥? [关闭]
Jade 和 EJS 对于 Node.js 模板的优缺点是啥? [关闭]
Dash by Plotly vs Jupyter Dashboards 的优缺点是啥? [关闭]
git-flow 与 github-flow 的优缺点是啥? [关闭]
将 ES5 JavaScript 用于 Angular 2 应用程序和使用 TypeScript 的优缺点是啥? [关闭]