안녕하세요.. BaSTaD 입니다..
로컬에서 트리구조로 데이터를 유지하고 관리합니다.
이것을 디비에 넣고, 다시 필요할때 사용하려고하는데요...
트리구조를 디비에 넣을때 어떻게 넣는게 효율적인지 궁금하네요..
이론이 없는 넘이라..걍 꾸역꾸역 생각해낸게..
그룹목록을 유지하는 테이블하고 + 실제 노드 데이터 테이블하고 두개로
나눠봤는데요.. 더 좋은 방법있음 조언해주시면 감사드리겠습니다.
group schema..
-------------------
gid/ integer(autoinc) // key
gname/ varchar(50)
parentgid/ integer // 부모 그룹 아이디
=====================
node data schema..
--------------------
nid/ integer(autoinc)
nname/ varchar(50)
parentgid/ integer // 부모 그룹 아이디
=======================
고수님들의 조언 부탁드리겠습니다. 혹시 이론이나 공부가 될만한 자료나 키워드도 같이 주시면 감사드리겠습니다. (_ _ )
by KDDG 만수 ㅔ 이
몇가지 방법을 구사하게 됩니다..
1. 형식을 가진 Tree 구조
2. 부모를 무조건 가지는 Tree 구조
로 크게 나누어집니다..
말로하면, 실제 엇비슷하다고 생각될 수도 있겠군요..
예를들어서, 설명하지요..
1번의 경우의 DB에서는
code(코드), name(code의 노드명)
필드 2개만 달랑 만들어서..
code자리에
10000 1- 레빌
11000 1에 종속된 레벨
12000
11100 1-1에 종속된 레벨
로 해석하여 Table을 구성하게 됩니다..
다시말해서, 각 코드의 1번째자리,2번째자리,3번째자리등이
중요한 의미를 지닌다는 방법입니다.
Tree 표현하면,
10000
------------------------
| |
11000 12000
-----------
| |
11100 11200
2번은
pcode(부모코드), scode(자신코드), name(scode의 노드명)
단, pcode가 특정값(예, '*', '$'등 일때는 자신의 최상위 Node = root)
즉,
* 1 최상위 노드 1 - 1레벨
* 2 최상위 노드 2 - 1레벨
* 3 최상위 노드 3 - 1레벨
1 A 1노드의 자식노드 A
2 A 2노드의 자식노드 A
2 B 2노드의 자식노드 B
2번에서는 해당노드임을 알 수 있는 것은,
부모노드와 자식노드의 구성으로 현재자신의 노드를 나타내는 방식
따라서, Table은
pcdoe, scode, name으로 구성되어야합니다.
이것의 장점은 노드명 중에서 똑같은것이 존재해도..
보모의 위치에 따라서,
2중 3중으로도 위치할 수 있다는 의미가 됩니다..
즉,
A
--------------------
| |
B C
------ ______
| | | |
T1 T2 T3 T1
Oracle에서 Table로 구성시에
1번의 경우는
CREATE TABLE TREE1 (
CODE CHAR(5) NOT NULL, -- CHAR(5)는 임의로 정하였음
NAME VARCHAR2(50),
PRIMARY KEY(CODE)
)
2번은
CREATE TABLE TREE2 (
PCODE VARCHAR(5),
SCODE VARCHAR(5),
NAME VARCHAR(50),
PRIMARY KEY(PCODE, SCODE)
)
로 구성될 수 있습니다.
흠..
위 TABLE은 어떤 DB에서도 가능하겠군요..
단지, Oracle이나 MS-SQL 2000에서 구사한다면,
Tree 구조를 Select할때 SQL문이 간단히지겠네요..
답이 되었나 모르겠습니다..
사실, Tree는 어떤 형식을 가지게끔 만들면,
나중에 그 Tree 형식을 바꿀때 반드시 장단점이 발생하게 됩니다..
많이 유념하셔서 TABLE을 만드셔야 할 듯 합니다.