중첩 집합 모델에서 나무 구조 만들기
벌써 자세하게 알고 있는 사람은, 날아 만든 것 까지 부디.
중첩 집합 모델
트리 구조 (계층 구조)를 데이터베이스에 저장하려고 할 때 자신의 테이블에 대한 관계를 만드는 것이 간단하고 이해하기 쉽습니다. 그러나 SQL에서 나무의 일부를 얻는 것이 번거롭거나 사용하기 쉽지 않습니다.
따라서 중첩 집합 모델이라는 생각으로 나무 구조를 보존하는 경우가 있습니다. 계층 구조를 중첩 집합 구조로 간주하여 저장합니다.
내 테이블에 대한 관계가있는 사용하기 쉽지 않은 테이블의 예
ID
이름
상사 ID
1
사토
NULL
2
스즈키
1
3
다카하시
2
4
다나카
2
5
이토
1
6
와타나베
5
중첩 집합 모델의 사고 방식
만들고 싶은 나무 구조
중첩 구조로 간주
중첩 집합 모델의 테이블 예
ID
이름
Left
Right
1
사토
1
12
2
스즈키
2
7
3
다카하시
3
4
4
다나카
5
6
5
이토
8
11
6
와타나베
9
10
중첩 집합 모델을 사용하면 나무의 일부를 꺼내기 쉽습니다.
예를 들면 스즈키씨의 부하가 누군가 알고 싶다면, Left가 2이상, Right가 7이하의 행을 꺼내면, 얼마나 계층이 깊어지려고 몰래 전원 꺼낼 수 있다. 반대로 Left가 2 미만이고 Right가 7을 넘는 행은 스즈키씨의 상사이며, 그 중 Left가 가장 작은 사람이 스즈키씨의 직속의 상사가 된다.
만든 것
전체 프로그램은 여기 → htps : // 기주 b. 이 m / Sh 싶은 r / T Rebull l에서 r / t Ree / Ma s r / T Rebull l에서 r
프로그램의 역할은 중첩 집합 모델 목록에서 트리 구조를 생성하는 것입니다.
그리고 나무 구조로부터 중첩 집합 모델의 Left와 Right를 갱신하는 것.
2개의 인터페이스가 있다.
전체 프로그램은 여기 → htps : // 기주 b. 이 m / Sh 싶은 r / T Rebull l에서 r / t Ree / Ma s r / T Rebull l에서 r
프로그램의 역할은 중첩 집합 모델 목록에서 트리 구조를 생성하는 것입니다.
그리고 나무 구조로부터 중첩 집합 모델의 Left와 Right를 갱신하는 것.
2개의 인터페이스가 있다.
ITreeItem
는 중첩 집합 모델을 나타내기 위해 Left
와 Right
를가집니다.ITreeNode
는 나무 구조를 나타내기 위해 Parent
와 Children
를가집니다.만약 데이터베이스의 모델 클래스를 트리의 노드로서도 사용할 수 있는 경우는, 하나의 클래스에
ITreeItem
와 ITreeNode
를 양쪽 모두 구현할 수도 있습니다.사용법
// 木構造の構築
// ITreeItem を実装するクラスのリストと、 ITreeItem から ITreeNode を生成するメソッドを渡す。
// 渡す ITreeItem のリストは、Left順にソートしてある必要がある。
// 木構造が構築されて、ルートノードのリストが返ってくる。
var roots = TreeBuilder.Rebuild(items, item => new Node(item));
// 木構造を表示したり、何らかの操作を加える
// Left、Rightの更新
// ルートノードのリストと、ITreeNode から ITreeItem を取得するメソッドを渡す。
// ITreeItem はnodeの中に持っておくと便利。もしくはディクショナリにでもしておく。
TreeBuilder.Update(roots, node => node.Item);
테스트용 프로젝트가 리포지토리 안에 있으므로, 그쪽도 참조.
htps : // 기주 b. 이 m / Sh 싶은 r / T Reebui l에서 r
Reference
이 문제에 관하여(중첩 집합 모델에서 나무 구조 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ShTair/items/9447cb053afa2761c582
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 木構造の構築
// ITreeItem を実装するクラスのリストと、 ITreeItem から ITreeNode を生成するメソッドを渡す。
// 渡す ITreeItem のリストは、Left順にソートしてある必要がある。
// 木構造が構築されて、ルートノードのリストが返ってくる。
var roots = TreeBuilder.Rebuild(items, item => new Node(item));
// 木構造を表示したり、何らかの操作を加える
// Left、Rightの更新
// ルートノードのリストと、ITreeNode から ITreeItem を取得するメソッドを渡す。
// ITreeItem はnodeの中に持っておくと便利。もしくはディクショナリにでもしておく。
TreeBuilder.Update(roots, node => node.Item);
Reference
이 문제에 관하여(중첩 집합 모델에서 나무 구조 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ShTair/items/9447cb053afa2761c582텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)