2013-07-05 2 views
0

시간이 지남에 따라 엔티티와 릴레이션을 저장하는 시스템을 설계하는 중입니다.PostgreSQL 데이터베이스에서 PHP와의 엔티티 관계 버전 관리

각 엔티티에는 속성이 있으며 각 속성의 버전을 지정해야합니다. 따라서 엔티티의 속성이 변경되면 새로운 기록 상태가 추가됩니다. 복잡성은 별도의 엔트리 간의 관계를 버전화해야한다는 사실에도 있습니다. 예 : 엔터티 A이 부모 X에서 부모 Y으로 이동하면 두 엔터티의 관계도 새로운 기록 상태가됩니다.

낮은 수준에서이를 디자인하는 방법에 대한 조언을 찾고 있습니다. 이런 종류의 패턴이나 다른 모범 사례/입증 된 방법에 사용할 수있는 디자인 패턴이 있습니까?

나는 선택적으로 Doctrine을 ORM/DBAL로 사용하여 PHP로 PostgreSQL 데이터베이스를 구축하고 있습니다.

+2

저는 항상 트리거와 같은 것을 만들었습니다. 당신은 동시성 문제에 관해 꽤 열심히 생각할 필요가 있지만, 당신이 어떤 수준의 작업을하고 있더라도 그렇게해야합니다. 종종 부모와 자식 객체에 관한 것들을 잡기 전에 이상한'SELECT .. FOR SHARE' 만 필요합니다. –

+1

여기를 한번보세요 : https://github.com/simplethings/EntityAudit – Florian

+1

참조 : http://en.wikipedia.org/wiki/Slowly_changing_dimension –

답변

1

이 경우 table_log 확장 (https://github.com/psoo/table_log)을 살펴볼 것을 권합니다. 컴파일이 필요하지만 이전 상태로 테이블을 복원하고 변경 사항을 감사 할 수있는 이점이 있습니다.

여기서 한 가지 중요한 세부 사항은 기록 변경 사항이 기본 테이블이 아닌 다른 테이블에 저장된다는 것입니다. 현재 데이터와 외부 감사 추적을 합친 것으로 생각할 수 있습니다. 쿼리를 병합해야하는 경우보기를 만들 수 있습니다.