我在系统的设计中发现了一个问题,我正试图找出正确的语言来描述问题的原因,这样我就可以向管理人员报告,并解决问题。
问题是,通过将学生注册表中的更改(基于上一编辑列的日期时间)从一个系统复制到另一个系统,我们有一个web服务同步数据。但是,因为源系统删除了当学生放弃某门学科时的行,所以下降并不是同步的。
要能够检测删除,系统需要保持复制到第二个系统的内容的状态,这样它就可以识别行何时被删除,或者需要验证它们的表是否同步,但我不确定如何描述这些数据,并引用特定的最佳实践或方法来备份我的论点。
有人知道在设计中防止这种逻辑错误的最佳实践或数据完整性规则的名称吗?
发布于 2017-06-05 04:09:22
这是一个数据完整性问题。您有两个系统应该反映相同的数据,但它们没有。
从概念上讲,一个系统中的事务直到应用到这两个系统之后才能真正完成。有几种方法可以做到这一点:复制可能是最全面的,但同时具有一定的系统开销和人工开销。
您使用的方法涉及异步应用事务。您在一个系统中完成,并定期赶上另一个系统。您已经发现的问题是,某个类型的事务没有被捕获,因此永远不会应用于远程系统。
这意味着,就目前情况而言,整个数据库系统(至少在本表中将两个系统作为一个系统)不能兼容ACID。
它不是原子的;主系统中的delete事务无法完成,因此事务永远不会完成,也永远不会完成。
这是不一致的(上面有充分的说明)。
如果你愿意的话,你也许可以为不孤立或不持久而提出一个论点。
而且,请注意,各个系统可能都很好;这是因为您已经创建了一个混合系统,问题就在这里。
有很多解决办法。我知道一个已经在进行中,但我会提到一个为我的公司工作的:我们使用一个删除触发器来记录已删除的记录,并将删除已删除的记录作为同步过程的一部分。
关键在于你有一个混合的,本土的数据库系统。这没有什么问题(因为少量的数据、复制或日志传送整个DB以获得一个表都是过度的),但是在构建这样一个系统时可能会忽略一个方面,而且您的系统对它的关注将比Oracle、MySQL或MySQL少。
希望这能帮上忙。
https://dba.stackexchange.com/questions/174790
复制相似问题