18

我目前正在尝试创建一个数据库,其中很大一部分数据是临时的。在阅读了许多这样做的技术(大多数涉及 6nf 标准化)后,我遇到了Anchor Modeling

我正在开发的模式与锚建模模型非常相似,特别是因为用例(时间数据 + 已知未知数)非常相似,以至于我很想完全接受它。

我遇到的两个最大问题是,我找不到任何详细说明这种方法的负面影响的东西,而且我找不到任何关于在生产中使用它来制作我需要注意的战争故事和陷阱的组织的参考资料。

我想知道这里是否有人足够熟悉来简要阐述一些负面因素(因为积极因素在研究论文及其网站中得到了很好的宣传),以及在生产环境中使用它的任何经验。

4

5 回答 5

16

参考anchormodeling.com

以下是我知道的几点

  1. DB 对象的数量太大而无法手动维护,因此请确保您一直使用设计器来改进模式。

  2. 目前,设计器完全支持 MS SQL Server,因此如果您必须一直移植代码,您可能需要等到完全支持您的目标数据库。我知道它在下拉框中有 Oracle,但是......

  3. 不要期望(也不要求)您的开发人员理解它,他们必须通过 5NF 视图访问模型——这很好。问题是表是通过(而不是)视图上的触发器加载的,这可能(或可能不是)性能问题。

  4. 预计您可能需要编写一些额外的维护程序(针对每个时间属性),这些程序尚未自动生成。例如,我经常需要一个时间属性的修剪过程——删除两个连续时间事件中相同 ID 的相同值记录。

  5. 生成的视图和对视图的查询可以很好地解决,将来您编写的任何内容都可能如此。但是,“其他人”将在 view-over-views-over-views 上编写查询——这并不总是能很好地解决。因此,预计您可能需要比平时更多地对查询进行监管。

遗憾的是,我最近使用这种方法重构了我仓库的一部分,它就像一个魅力。诚然,仓库没有这里列出的大部分问题。

我建议必须创建一个演示系统并测试、测试、测试……,尤其是第 3 点——通过触发器加载。

于 2012-05-06T15:39:12.943 回答
8

关于上面的第 4 点。重述控制几乎完成,这样您将能够防止随着时间的推移出现两个连续的相同值。

和一般评论,加入不一定是坏事。阅读:为什么加入是一件好事

6NF 在 Anchor Modeling 中的一大好处是无损模式演化。换句话说,数据库模型的每个先前版本都可以作为当前模型的子集使用。此外,由于更改由模式中的扩展(新表)表示,升级数据库几乎是即时的,并且可以安全地在线完成(即使在生产环境中)。这种好处在 5NF 中会丢失。

于 2012-05-21T09:40:41.980 回答
5

我没有读过任何关于它的论文,但由于它是基于 6NF 的,我预计它会遭受 6NF 之后的任何问题。

6NF 要求每个表由一个候选键和不超过一个非键列组成。因此,在最坏的情况下,您将需要九个连接来生成一个 10 列的结果集。但是您也可以设计一个使用 200 个 5NF 表、30 个 BCNF 表和 5 个 6NF 表的数据库。(我认为这将不再是 Anchor Modeling 本身,它似乎将所有表都放在 6NF 中,但我可能错了。)

神话中的人月在这里仍然很重要。

因此,管理问题不在于是否建立试点系统并将其丢弃。你会这样做的。唯一的问题是是否提前计划构建一次性产品,或者承诺将一次性产品交付给客户。

Fred Brooks, Jr.,在The Mythical Man-Month中,第 116 页。

您能以多低的成本构建原型来测试您预期的最坏情况?

于 2012-05-04T22:59:23.327 回答
-5

在这篇文章中,我将介绍属于数据库的大部分实际业务。数据库在这个大业务领域的解决方案,根本无法用“锚建模”来解决。在现实的商业世界中,这种情况每天都在发生。那就是数据录入者输入错误数据的情况。

在现实世界的业务中,错误经常发生在数据输入级别。数据输入经常会产生大量错误数据。所以这是一个真正的大问题。“锚定建模”不能解决这个问题。

任何使用“Anchor Modeling”数据库的人都可能输入错误的数据。这是可能的,因为“锚建模”的作者已经写到可以删除错误的数据。

让我用下面的例子来解释这个问题:一位数学教授给了成绩最差的学生最好的成绩。在这所高中,教授在相应的数据库中输入成绩。这名学生为这项刑事服务给了教授钱。这名学生利用这个假成绩成功进入了大学。一个暑假过后,数学教授回到了学校。从数据库中删除错误的成绩后,教授在数据库中输入了正确的成绩。在这所学校,他们使用“锚建模”数据库。因此,数学教授删除了“锚建模”作者严格建议的虚假数据。现在,这位犯下这种罪行的数学教授是干净的,这要归功于“锚建模”软件。

这个例子说,使用“锚建模”,你可以通过应用“锚建模技术”来利用数据进行犯罪。


在第 5.4 节中,“锚建模”的作者写道:“删除语句仅在应用于删除错误数据时才被允许。”。您可以在“锚建模”的作者撰写的论文“使用第六范式用于结构演化数据的敏捷建模技术”中看到此文本。

请注意,“Anchor modeling”在第 28 届国际概念建模会议上发表并获得最佳论文奖?!


“Anchor Modeling”的作者声称他们的数据模型可以保持历史!然而这款“Anchor 造型”的样鞋根本无法维持历史。


由于“锚定建模”允许删除数据,那么“锚定建模”具有对数据的所有操作,即:添加新数据、删除数据和更新数据。更新可以通过两个操作来获得:首先删除数据,然后添加新数据。

这进一步意味着 Anchor 建模没有历史记录,因为它有数据删除和数据更新。


我想指出,在“锚建模”中,每个错误数据“必须”被删除。在“锚定建模”中,不可能保留错误数据和更正数据。

“锚定建模”不能维护错误数据的历史。

在这篇文章的第一部分,我展示了通过使用“锚建模”,任何人都可以利用数据进行犯罪。这意味着“锚模型”运行公司的业务,直接陷入灾难。

于 2018-08-24T18:24:27.407 回答
-5

我将举一个例子,以便专业人士可以看到真实而重要的例子,“锚定建模”有多糟糕。

示例 从事数据库业务的专业人士都知道,有成千上万的国际标准已在数据库中成功用作关键。

国际标准:所有专业人士都知道什么是汽车的“VIN”、书籍的“ISBN”以及数以千计的其他国际标准。

国家标准:各国对护照、个人证件、银行卡、条形码等都有自己的标准

当地标准:许多公司都有自己的标准。例如,当您付款时,您有一张带有标准密钥的发票,并且该密钥也写入数据库中。

本示例中所有上述类型的密钥都可以通过各种机构、警察、海关、银行信用卡、邮局等进行检查。您可以在互联网上或使用电话检查其中的许多“密钥” .

我相信这些数据库中的百分比超过了 95%,这些数据库具有标准键的实体,并且我在这个示例中已经展示过。

对于上述所有情况,“锚代理键”是无稽之谈。“Anchor建模”独家使用“anchor-surrogate key”

在我的解决方案中,我使用了所有在全局或本地级别上都是标准的并且很简单的键。

弗拉基米尔·奥德尔金

于 2018-08-25T09:30:15.787 回答