Book 테이블, Page 테이블 및 Element 테이블이있는 삽입 전용 PostgreSQL 데이터베이스가 있습니다. 책은 여러 페이지를 가질 수 있으며 페이지는 여러 요소를 가질 수 있습니다. 데이터베이스는 페이지가 수정 될 때마다 감사를 위해 새 레코드에 해당 페이지의 새 버전이 만들어지기 때문에 삽입 전용입니다.삽입 전용 데이터베이스에 종속 요소가있는 초안 페이지를 작성하는 방법
-------------
Book
-------------
id [PK]
-------------
Page
-------------
id [PK]
book_id [FK]
version
created
-------------
Element
-------------
id [PK]
page_id [FK]
version
created
현재 요소 Page.id하는 외래 키 포인팅을 가지고 있으며, 페이지 Book.id.에 외래 키 포인팅이있다
모든 요소를 포함 할 수있는 독립적 인 페이지 초안 (버전)이 있어야합니다. 새 페이지 초안 (버전)이 만들어 질 때마다 새 초안은 이전 버전의 복제본이어야하며 이전 버전의 모든 요소를 포함해야합니다. 요소 레코드는 삭제되지 않지만 특정 버전의 페이지에 요소를 추가하거나 제거 할 수 있습니다.
확장 성을 위해 요소가 매우 큰 숫자 일 수 있으므로 페이지와 함께 모든 요소를 복제하지 마십시오. 또한 페이지와 요소 사이의 다 대다 관계를 피하는 것이 좋습니다.
필자는 Element.page_id FK를 Element.book_id FK로 대체하여 하나의 요소와 페이지가 서로 느슨하게 결합되도록하려고했습니다. 이렇게하면 페이지를 복제 할 때 모든 요소를 복제 할 필요가 없지만 각 요소를 특정 버전의 페이지와 연관시키는 방법이 필요합니다.
이상적으로는 단일 SQL 쿼리로 해당 버전과 관련된 모든 요소가 포함 된 페이지 버전을 검색 할 수 있어야합니다.
아직 디자인/프로토 타입 단계에 있으므로 데이터베이스의 모든 부분이 요구 사항을 충족하도록 잠재적으로 변경 될 수 있습니다.
위의 요구 사항에 따라 페이지와 요소를 연결하는 가장 좋은 방법은 무엇일까요? 요구 사항이 명확하길 바란다. 그렇지 않다면 질문을하고 명확하게하려고 노력할 것이다.
참고 : "삽입 전용"데이터베이스 란 레코드가 업데이트되거나 삭제되지 않고 삽입되는 데이터베이스를 의미합니다. 이는 감사 용도로 사용되므로 편집 활동에 대한 전체 기록을 보유 할 수 있습니다.
이것은 흥미로운 해결책입니다.하위 페이지에서 요소를 업데이트하려고하지만 부모 페이지에 속하는 경우 동일한 하위 식별자가 있지만 더 최근의 'created'날짜가있는 하위 페이지에 새 요소를 추가 할 수 있습니다. 이 방법으로 하위 페이지의 모든 요소를 쿼리하려면 고유 해시 및 가장 최근에 생성 된 날짜가있는 요소를 사용할 수 있습니다. –