에 모범 사례 나는 가능한 한 명확 노출하려고합니다)DB 디자인 : 계층 구조
글쎄, 난 더와 부모> 자식 관계로 자신에게 linket 수있는 몇 가지 데이터를 저장할 필요가 없습니다 - 깊은 곳에서.
내 첫 번째 시도했다 :
entry_id | parent_id | value
1 | NULL | Foo //foo is the grand parent
2 | 1 | Bar //bar is child of Foo
3 | 1 | Baz //baz too
4 | 2 | Bho //bho is child of Bar
5 | 4 | Som //som is child of Bho
6 | NULL | Git //another grand parent
7 | 6 | Tim //Git's child
.. 그리고 등등.
이 구조는 작동하지만, 불가능합니다 (또는 적어도 통과 할 수 없습니다) 단지 1 개의 쿼리만으로 모든 Foo 하위 및 '하위 하위'를 찾으십시오. 이것은 루프가 필요합니다.
내 목표는 구조가 SELECT 질의에 최적화 된 것으로, 즉 나에게 한 번에 모든 관계를 제공 할 수 있습니다, 뭔가 같은 :
SELECT "ALL SONS OF Bar"
출력 :
entry_id | parent_id | value
1 | NULL | Bar
4 | 2 | Bho
5 | 4 | Som
하지만이 구조 나던 내가 그렇게하도록 내버려 뒀다.
아이디어가 있으십니까? 중요 할 수 있다면, 내가 PostgreSQL을 실행할 수 있습니다
은 (내가 배열 필드 유형을 사용하는 것으로 생각하지만, 쿼리는 늘 훨씬 빨리)
필립 주석에 대한 편집 : 내 특정의 데이터 야해 너무 자주 변경되지만 데이터를 여러 번 업데이트 할 수있는 동일한 작업 - 다른 작업에도이 구조를 사용해야 할 것입니다.
얼마나 자주 데이터가 변경되며 변경 될 것입니다 (분기 추가, 분기 노드 교체, 고아와의 거래 등). 간단한 시스템은 바로 가기를 허용 할 수 있지만 심각한 유연성이 필요한 경우 상황이 까다로워 질 수 있습니다. –
값 0이 잘못되었으므로이 값과 함께 entry_id가 없습니다. 외래 키 제약 조건은 실패합니다. 부모가없는 경우 NULL을 사용하십시오. –
@ 프랭크 : 너 맞아. – Strae