Q&A

  • 트리구조의 데이터를 디비에 어떤 방식을 넣을 수 있을까요?
안녕하세요.. 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 만수 ㅔ 이
2  COMMENTS
  • Profile
    착한천사 2004.06.13 03:20
    Tree 구조를 DB에 만들기 위해서는
    몇가지 방법을 구사하게 됩니다..

    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을 만드셔야 할 듯 합니다.


  • Profile
    너구리 2004.06.10 23:49
    적으신 테이블도 좋아보입니다.

    다른방법을 적어본다면..
    그룹과 nodedata가 테이블이 다를 이유가 없다면

    하나로 뭉쳐도 될거 같은데요..

    하위자료가 없을때 nodedata라고 본다면요...

    몇번 찾아봐야 하는 번거로움이 있지만요..