Database design 构建两个独立数据库集成的最佳方法?

Database design 构建两个独立数据库集成的最佳方法?,database-design,architecture,entity-framework-4,integration,facade,Database Design,Architecture,Entity Framework 4,Integration,Facade,我在工作中遇到了以下问题,我没有经验或知识来回答这些问题,我希望你们中的一些聪明人能够为我指出正确的方向,任何答案都将不胜感激 场景 我们的业务有两个方面,使用单独的数据库,即人力资源和运营领域(家庭护理)。 人力资源部负责跟踪公司员工、轮班模式、缺勤、工资等。家庭护理部负责跟踪客户信息、家访、探访日期以及负责提供探访的员工 这两个系统是分开的,我们目前正在寻找整合它们的方法 此外,我们正在研究如何将查看这两个数据库的代码组织到可重用的、有组织的库中 我们有三个应用程序重新使用HumanReso

我在工作中遇到了以下问题,我没有经验或知识来回答这些问题,我希望你们中的一些聪明人能够为我指出正确的方向,任何答案都将不胜感激

场景

我们的业务有两个方面,使用单独的数据库,即人力资源和运营领域(家庭护理)。
人力资源部负责跟踪公司员工、轮班模式、缺勤、工资等。家庭护理部负责跟踪客户信息、家访、探访日期以及负责提供探访的员工

这两个系统是分开的,我们目前正在寻找整合它们的方法

此外,我们正在研究如何将查看这两个数据库的代码组织到可重用的、有组织的库中

我们有三个应用程序重新使用HumanResources.dll,负责与库中包含的EF 4对象上下文通信。对象上下文几乎是数据库的镜像

问题


我们将添加第四个应用程序,该应用程序将使用人力资源数据库中的数据。

我们是否:

创建一个新的EF数据模型, 负责提供信息 只有应用程序需要,而 复制一些常见的实体,例如 作为员工

将新的实体/表添加到 已经是大型号,接受它的 会变大的


长期而言,我们需要将人力资源数据库中的轮班模式信息与第五个应用程序中运营区域(家庭护理)数据库中的客户访问联系起来。

我们对我们能做什么有了想法;我们得出以下结论:

创建一个位于 人力资源对象上下文和 Homecare对象上下文,负责 用于连接两组数据 一起


还有其他方法对我们有益吗?

听起来您需要进行一些认真的数据建模

你肯定需要它的长期,这样你就不会陷入严重的冲突。(如果有一件事会对您支持/扩展系统和支持业务增长的能力产生重大影响,那就是数据管理)。(业务)数据的好处在于,您的业务涉众将(或应该)对它有很好的理解,并有适当的动机支持您。这样的练习将带来的价值应该是一个轻松的销售。在短期内落实一些措施也会有所帮助

软件包产品(商用现货-COTS)附带的数据源在不使这些系统处于风险的情况下不会开放进行更改,但这并不意味着您不能使用ETL和其他数据库来创建将不同数据集中在一起的数据集市。在这种方法中,数据建模和系统之间的数据映射非常重要,但时间也很重要

你可以更灵活地使用内部应用程序,但除非你有一个非常令人信服的理由,否则你可能会抵制策略性的改变,否则你可能不得不重新使用它们

作为这个练习的一部分,你将要考虑每一个数据的来源——它来自哪里?谁拥有它?您可以从高层开始,通过绘制概念数据模型,这可能会更多地处理逻辑数据集,而不是特定的“列”

使用此信息指导进一步的决策

就您的直接方法(以及您的问题)而言:一般来说,它会考虑在您的系统和数据之间放置一层抽象层,以便应用程序在发生变化时得到缓冲

创建一个新的EF数据模型,负责提供只有应用程序需要的信息,同时复制一些常见的实体,如员工

复制的最大问题是使数据进入一种浑浊的状态——这是“真实的”记录。这很容易杀死你。在您的环境中,这种方法的好处是什么?你会从保障性的角度来做这件事吗?易于开发?

实施 facade基本上是一个复杂子系统的适配器。由于您有两个子系统,我建议创建三个具有以下功能的类:

  • HumanResourcesFacade
    :封装所有“人力资源”功能的类。此类的工作是公开执行人力资源应用程序负责的每个工作单元的方法,而不向客户机公开任何有关人力资源应用程序的信息

  • HomecareFacade
    :封装所有“Homecare”功能的类。此类的工作是公开执行Homecare应用程序负责的每个工作单元的方法,而不向客户端公开任何有关Homecare数据库的信息

  • ApplicationFacade
    :一个类,它包装了
    HumanResourcesFacade
    HomecareFacade
    ,并为客户端提供公共方法,这些方法不需要了解两个嵌套Facade中任何一个的内部工作原理。这个类的任务是了解:(a)两个嵌套Facade中的哪一个负责每个客户端调用,(b)通过调用嵌套Facade上的适当方法来执行ApplicationFacade的客户端调用,以及(c)将从嵌套外观接收的数据转换为客户端可用的格式,并且不依赖于任何一个嵌套外观的数据格式

  • 我建议使用POCO对象模型来创建不依赖于t的数据的公共代码表示