2009-11-09 4 views
1

테이블이 있습니다. TreeStructures에는 Tree 구조가 있습니다. 이 테이블에는 테이블에 'id, name, left, right, Foreign key TreeId'라는 컬럼이 있으며 'id'라는 컬럼과 트리에 대한 더 많은 정보가 있습니다.테이블의 행 그룹화 - 디자인

이제 'id'가 테이블 트리의 유일한 열인 경우 테이블 트리를 제거하고 외부 키 TreeId를 열로 유지하는 것이 좋을까요?

새 트리를 만들면 TreeId의 가장 높은 값을 확인한 다음 그 값을 하나씩 늘려야 새로운 값을 얻을 수 있습니다. 여기에 동시성의 위험이 있습니다 ...

어쨌든이 상황에서 가장 좋은 방법은 무엇입니까?

답변

1

트리 테이블은 별개의 실체이며, 테이블 모두 "경우에도 자신의 테이블을받을 권리가 키". 나중에 추가 열이있을 수도 있고 없을 수도 있지만이 테이블을 생략하면 데이터베이스가 비정규 화되어 데이터 무결성에 항상 위험 할 수 있습니다.

걱정할 필요가없는 동시성 문제는 대부분의 현대적 데이터베이스 (ID 열에 대해 자동 증가 ID 유형 사용) 및 리프 테이블

1

나는 미래의 사용을 위해 - 나무 테이블을 남겨 두었다고 생각합니다.

나중에 트리 이름이 필요합니까?

당신이 말한 것처럼 작동 할 수 있지만 추천하지 않습니다.

테이블이 매우 커질 경우 매우 비효율적입니다.

+0

Idd에서 MAX (ID) 스캔을 수행해야하므로 실제로 트리 테이블이 없으면 더 나빠집니다. 우리는 이제 트리 테이블에 더 많은 열을 추가했습니다. 그러나 꼭 필요한 것은 아닙니다. –

0

견고한 예제가 없으면 어렵지만 합리적이라고 생각합니다. 현재 스키마에서 name이 무엇을 의미하는지, 트리가 아닌 TreeStructure와 관련된 이유는 확실하지 않습니다.

는 (개인적으로 난 어쨌든 데이터 테이블에 구조 정보를 설정 중첩되어 혼합 일반적으로 아주 행복 해요.)