2013-08-05 1 views
0

나는 많은 양의 검색을 해왔지만, 내가 찾은 대부분은 같은 스키마를 가진 테이블을 병합하는 것과 관련이있다.이 질문이 너무 개방적이라면 알려주고, 더 자세한 내용을 제공합니다.두 개의 데이터베이스 응용 프로그램 병합. 내가 어느 수준에서 일해야합니까?

나는 두 개의 독립적 인 애플리케이션 같은 일반적인 구조에 내장 된 각이 있습니다

  • 하는 ASP.NET MVC 응용 프로그램;
  • NHibernate에 빌드 된 개체 모델.
  • 저장소 기반 DAL;
  • MSSQL 데이터베이스입니다.

데이터베이스 스키마와 개체 모델은 다르지만 일부 비즈니스 수준의 겹침이 있습니다. 예를 들어 두 응용 프로그램 모두 Customer 객체가 있지만 구조가 다릅니다. 하나에는 존재하지만 다른 하나에는 존재하지 않는 몇 가지 데이터 필드가 있으며 기본 키는 다르게 수행됩니다 (하나는 자동 증가 숫자 필드를, 다른 하나는 GUID). 고객과 같이 각 응용 프로그램마다 고유 한 구현을 갖는 테이블이나 클래스가 10 개 정도있을 수 있습니다.

두 응용 프로그램을 결합하는 중입니다. 최종 목표는 응용 프로그램 1이 응용 프로그램 2 내의 영역이되도록하는 것이며 두 응용 프로그램 모두 동일한 고객 집합을 사용하는 응용 프로그램을 사용하는 것입니다.

제 질문은 10 가지 정도의 "공유"데이터를 처리하는 가장 좋은 방법입니다. 사물?

  1. 데이터베이스/개체 모델 수준에서 결합 하시겠습니까? 각 데이터베이스의 Customer 테이블을 단일 테이블로 병합하고, 객체 모델 클래스를 결합하고, 필요한 경우 뷰 모델로 작업 할 수 있습니다.

  2. 두 세트의 개체를 관리하고 동기화하려고합니까? 데이터베이스의 트리거를 통해 또는 DAL의 두 테이블 세트에 모두 쓰는 것입니다.

  3. 다른 것?

이것은 (나를 위해) 상당히 큰 프로젝트이며 수백 개의 테이블과 많은 컨트롤러 메소드 및 뷰가 있습니다. 단위 테스트가 없으며 이에 대한 문서가 없으므로 조금 어렵습니다. 나는 첫 번째 옵션으로 기대고 있지만, 내가하는 일이 깨지는 것 같아. 제안?

미리 감사드립니다.

답변

0

첫 번째 생각은 당신이 두 번째 옵션을 유지해야한다는 것입니다. 두 개의 개체 모델을 가지고 DAL (트리거를 사용하지 않음)을 통해 "동기화"하십시오.

그러나 이것은 10 개의 엔티티 각각에 대해 2 세트의 테이블을 가지며 유지 관리 관점에서보기에는 좋지 않지만 대부분 데이터베이스에 중복 데이터가 있기 때문입니다. 데이터베이스가 2 개가 아니더라도 데이터는 여전히 2 dbs에 복제되며 2 dbs를 1로 병합하는 것이 가장 좋습니다. "동기화"를 위해 DAL 코드를 작성하는 데 소요되는 시간은 보다 모듈화 된 솔루션으로

두 번째 생각은 10 개의 공통 테이블을 "병합"하여 하나의 db에 배치해야한다는 것입니다. 이렇게하면 데이터 및 동기화 DAL 코드의 중복이 제거됩니다.(이렇게하면 10 개의 엔티티에 대해 2 대신 db를 호출 할 수 있습니다.)

제 3의 생각은 당신이 그것에있는 동안 2 dbs를 1로 병합하는 것입니다. 그러나 응용 프로그램의 복잡성에 따라 이것은 쉽게 수행되었다고합니다.

마무리하려면 10 개의 공통 테이블을 1 db로 병합합니다. 여전히 다른 응용 프로그램에서 부분적으로 사용할 수 있습니다. 이러한 10 개의 개체에 대한 CRUD 작업을 위해 DAL에 추상화를 만들고 특정 응용 프로그램에서 특정 구현을 호출합니다.

관련 문제