2009-12-27 1 views
1

엔티티 있음 : CollectionItem. 각 컬렉션에는 많은 항목이 있습니다. CollectionItem은 모두 응용 프로그램의 모든 사용자가 공동으로 편집 할 수 있습니다. 나는 변화를 되돌릴 방법을 제공해야한다. 버전 관리 Item 레코드는 간단하며, 어려운 부분은 CollectionItem 사이의 관계 버전을 버전하는 것입니다.실행 취소 목적으로 데이터베이스에서 큰 컬렉션의 버전 제어

  • 컬렉션에 허용되는 동작은 : 주어진 위치에서 아이템을 삽입 에 항목 제거 및 삽입에서 볼 수있다리스트 (내 아이템의 위치를 ​​변경 에 position + 이전 위치 쌍에서 삭제).
  • 삽입 작업이 자주 호출됩니다. 때때로 일괄 처리 가져 오기는 수천 개의 항목을 컬렉션에 삽입 할 수 있습니다. 이러한 가져 오기를 되돌릴 수 있어야하며 실행 취소에 많은 시간이 걸리지 않아야합니다.
  • 목록은 20,000 개 이상의 항목으로 구성 될 수 있습니다. 각 변경 사항에 대해 전체 컬렉션을 복사 할 여유가 없습니다.
  • 특정 버전의 콜렉션 상태를보고 개정 된 변경 사항을 발견 할 수 있어야합니다.

어떻게 이것을 관계형 데이터베이스에서 모델링 할 수 있습니까?

다중 값 Temporal Property을 사용하려고 생각했습니다. CollectionItem 옆에는 vt_fromvt_to 타임 스탬프가있는 링크 테이블이 있습니다. 아마도 CollectionVersion 엔티티도 생성해야하며, vt_fromvt_to 속성도 사용해야합니다. 이러한 버전은 컬렉션의 "기록"페이지에 나열됩니다. 그러나, 나는 변화를 되돌리기위한 일반적인 알고리즘을 제시하지 못했다. 어쩌면 그 목적으로 사용될 CollectionVersion에 연결된 diff 목록 (추가/제거)을 가지고 있어야합니까?

답변