草庐IT

逻辑小组迁移问题

有点胖的瘦子 2023-03-28 原文

最近在做一个系统的数据源变更,从A系统读取改为从B系统读取。其中就遇到了逻辑小组的问题。

背景介绍

我们的系统是牛奶配送系统,负责对学生、学校、小组进行牛奶配送,必须确保每个学生能够拿到牛奶。

系统A负责记录学校、学生、小组信息,用于学校的正常管理,侧重人员管理。

系统B是后来建设的系统,也记录学校、学生、小组信息,也用于学校的正常管理,侧重学风管理。

系统AB记录的学校完全一致、学生也完全一致。

实体关系说明

学生和学校都是一个具体的实体,都有唯一的ID。

一个学校明确包含多个学生,一个学生不可以在多个学校。

小组是个逻辑分组,包括1到多名学生,没有唯一ID,名字无约束。小组仅在一个系统内下的一个学校内不重名。

牛奶配置在支持逻辑小组实,是依据逻辑小组的名字(学校+小组名字)做标识的,并不记录小组下实际学生情况。

迁移目标

对每个学校的学生牛奶配送不能出现数量差异。

    - 基于小组的配送的数量,迁移前后不能发生变化。经过牛奶配送系统管理员确认后,可以发生配置变更。

基于小组的牛奶配送配置尽量保留。

学生、学校的数据迁移没有问题

读取学生、学校的信息没有问题,AB两个系统的学生、学校的数据信息完全一致。

存在问题的逻辑小组

A、B两个系统的逻辑小组可能出现一下问题,注意都是在同一个所学校

- 【同名不同人】:都是叫做先锋小组,但是人员名单不同

- 【没有跨学校的唯一ID】:只有一个名称

- 【你有我没有】:A系统下小学1有文学小组,B系统小学1就没有。

造成以上原因是因为,两个系统的管理角度不同,对于基础单元(学生)做了不同类型的划分。

造成的问题就是牛奶分配系统是基于A系统的逻辑小组,在B系统就无法正常使用。

- 【小组同名不同人】:就会造成具体人员配送错误

- 【你有我没有】:就会造成送不出去

解决问题的方案

方案1:在迁移前对A、B系统下所有逻辑小组进行分析,调整B系统的小组与A系统一致。

    问题:小组的规划是A、B系统由于职责所呈现的逻辑划分,强行将A系统的小组划分逻辑给

系统是不合理。

方案2:牛奶配送系统,取消对逻辑小组的支持。

    问题:逻辑小组可以有效提升配送效率,取消之后只能对个人进行配置,学生太多,非常不方便管理。

方案3:牛奶配送系统,取消B系统中不存在逻辑小组的支持。

    说明:提前检查AB系统逻辑小组匹配情况,决定现有的小组的牛奶配置方案是否变动

        -【AB完全一致的逻辑小组】【有A的小组牛奶配送配置】:牛奶配置方案保留且生效。

        - 【AB同名,但是人员差异的逻辑小组】【有A的小组牛奶配送配置】:默认现有的A的牛奶配送失效,B系统提前人工调整小组,调整到与A人数一致后,B系统人员确认后,现有的牛奶配送才能生效。如果与A人数不一致,可以生效,但是视为牛奶配置发生变更。

        - 【A没有B有的逻辑小组】【无小组配置】:B系统管理员要新创建小组,按需创建牛奶配置。

        - 【A有B没有的逻辑小组】【有A的小组牛奶配送配置】: B系统负责人需要添加到B系统,保持小组名字与A的名称人数一致后,可重新原配置。如果名称一致,人数据不一致,则视为牛奶配置发生变化。名称不一致,人员一致,视为新的小组,重新配置牛奶配送信息(可复制配置信息)。

反思

在做A、B、牛奶配置时,前期是否可以考虑规避此类迁移?

能否把逻辑小组做成像学生、学校一样的标准实体?

首先学校、学生都是具体的实体,具有唯一ID和实体属性,在不同系统下,具有一定的通用性

标准化,但是逻辑小组不是一个具体的实体,一个具体逻辑小组在不同系统下不具有通用性。

例如文学小组,在不同系统体系下具有不同的解释,这样保证了系统自身的灵活性。

也就是说,通过约束系统内建设小组遵循大统一是不合适的。

牛奶配置能否保留完整的组织结构?

目前主要一个问题是牛奶配置指记录了逻辑小组的名字,没有记录小组下学生的ID,导致切换了系统,就无法确定对应的人。

如果保留小组名+小组下学生们,则等于保留了完整的组织结构。逻辑含义由小组名来承担,成员结果由学生ID承担,从而组成一个新的实体,进而拥有新的ID(小组名+学生ID之和的MD5),就叫做小组实体

可以针对这个新的实体,可以单独建立与配送之间的关系,1:N(牛奶配送配置:小组实体ID),1:1(小组实体ID:牛奶配送配置)

在迁移是,发现两个系统的小组实体ID相同(等于名字+学生人),则直接采用历史配置。这里忽略了对同义词的差异。

存在的问题,作为第三方的牛奶配送系统,学生在小组的去留会造成更多影响(比只保留小组名的模式),由于学生的去留是AB系统内部的事情,原则上不需要告诉第三方牛奶配送系统,如果名字上加上学生名,则会每次发生学生的去留,都会造成小组实体的ID的变化。与AB系统的耦合性太强。

如果考虑到牛奶配置要具体到每个学生,强耦合也是合理的。

如果牛奶配送只是到小组整体数量,则提供小组名+整体数据作为唯一ID。

有关逻辑小组迁移问题的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  5. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  6. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  7. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  10. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

随机推荐