2014-12-16 3 views
1

이 질문에 대한 설정은 다소 정교합니다. 나와 함께하십시오 :DB 행을 문서로 병합하는 방법은 무엇입니까?

내 시나리오는 데이터를 관계형 테이블 양식에서 문서 수집 양식 ("ETL")으로 마이그레이션하는 시나리오입니다. 내 원본 데이터는 관계형 테이블에 표시되며 각 행은 "사람"과 그 사람의 "주소"중 하나를 설명합니다. (당연히이 표는 정규화되지 않았습니다.)

단순화 된 예는 다음과 같습니다

PersonId PersonName AddressId AddressText 
1  John Doe 1   Somewhere 
1  John Doe 2   Elsewhere 
2  Jane Doe 3   Some other place 

은 행 중 일부는 이전의 기존 값을 업데이트 할 수 있습니다, 일을 복잡. 예 :

PersonId PersonName AddressId AddressText 
1  John Doe 1   A new address 

나는 모든 관련 주소와 특정 사람 개체의 쉬운 검색을 위해 문서 저장소 (DB)에 문서 컬렉션에이 데이터를 마이그레이션하고 싶습니다. 과 같이, 나는 사람 당 하나의 문서를 고려하고 시작하려면

{ 
    "id":"1", 
    "addresses":[ 
     { 
     "id":"1", 
     "text":"A new address" 
     }, 
     { 
     "id":"2", 
     "text":"Elsewhere" 
     } 
    ] 
} 

내 질문은 : 문서에 테이블 행을 병합하는 가장 좋은 방법은 무엇입니까?

부분 업데이트 (MongoDB, RavenDB)를 지원하는 문서 저장소를 사용하고 해당 기능을 사용하는 것이 가장 좋습니다.

또는 문서 DB 전체에서 문서를 가져 와서 비즈니스 로직 계층에서 업데이트하고 전체를 다시 DB에 저장해야합니까?

아니면 데이터의 다른 문서 표현을 모두 목표로해야합니까?

+1

"행을 문서에 병합"하면 관계형 데이터베이스에서 문서 DB로 데이터를 이전하거나 아니면이를 모델링하는 방법에 대해 궁금한가요? –

+0

@ Jaynard 좋은 질문입니다.시나리오는 실제로 데이터 마이그레이션입니다. 매일 예정된 ETL 프로세스입니다. 나는 또한이 세부 사항으로 내 질문을 업데이트 할 것이다. – urig

+0

해결 했습니까? – datasci

답변

1

문서에서 "부분 업데이트"를 원하는 이유는 무엇입니까? 요구 사항이 사람의 주소를 변경/업데이트 할 수 있어야하는 경우 Person 엔터티 ("비즈니스 논리 계층에서 업데이트"라고 말한 것과 같은 종류)에서 해당 동작을 모델링 할 수 있습니다.

주소 정보를 변경하면 도메인 책임자처럼 보이므로 적절하게 모델링해야합니다. C#으로 RavenDb를 사용하여 빠른 예 : 당신이 정말로 부분 문서 업데이트를 수행해야하는 경우

using (var session = _documentStore.OpenSession()) 
{ 
    var person = session.Load<Person>("persons/1"); 
    person.UpdateAddressInformation(someAddressInformation); 

    session.SaveChanges(); 
} 

은, 당신은 할 수뿐만 아니라 RavenDb과 :

http://ravendb.net/docs/article-page/2.5/csharp/client-api/partial-document-updates

// J

관련 문제