2010-04-15 2 views
2

리비전으로 데이터를 구조화하고 처리하기위한 아이디어가 필요합니다. 예를 들어 개체 (예 : 자동차)의 데이터베이스가 있습니다. 각 객체에는 여러 속성이 있으며 임의로 지정할 수 있으므로 이러한 객체를 설명하는 스키마가 설정되어 있지 않습니다. 이러한 객체는 아마도 키 - 값 쌍으로 저장됩니다.수정 사항 : 알고리즘 및 데이터 구조

이제 개체의 속성을 변경해야합니다. 완전히 다시 쓰고 싶지는 않습니다. 다시 돌아가서 이러한 속성에 대한 변경 기록을 볼 수 있기를 원합니다. 그래서 새 속성을 추가하고 이전 속성을 유지하려고합니다. (그래서 타임 스탬프는 작업을 수행 할 것입니다. 어떤 부동산이 최신인지 알려주는 것).

동시에 각 속성의 최신 버전 만 사용하여 스냅의 모든 개체에 대한 정보를 얻을 수 있기를 원합니다.

어떤 아이디어가 가장 좋은 방법일까요? 적어도 올바른 방향으로 나를 가리켜주십시오. 감사!

답변

2

하나의 가능성은 개체 및 속성 테이블 (이미 가질 수 있음)을 갖는 것입니다. 는 당신의 문제는 항상 연관 테이블에 추가하고 업데이트하지 않을 것으로 당

(당신이 타임 스탬프 또는 시퀀스 열을 사용하려는 경우 선택에 따라)/version_number는 ID ObjectId가 부동산 ID 값 DATE_ADDED를 포함하는 연결 테이블을 만들 수 있습니다.

최신 개체 속성의 스냅 샷을 얻으려면 date_added/version number로 정렬 된 속성에 대해 DISTINCT 쿼리를 수행해야합니다. 주어진 속성 검사 기록은 간단합니다.

이 정보가 도움이 되었기를 바랍니다.

+0

2 개의 테이블을 사용하는 이유가 표시되지 않습니다. 설명해 주시겠습니까? 같은 테이블에서 행에 대해 DISTINCT를 선택할 수 없습니까? –

+0

@mvblfst 이것은 최신 데이터를 읽는 성능을 최적화하기 위해 두 테이블에서 수행됩니다. 개정 테이블을 읽는 것은 엄청난 작업 일 것입니다 –