The Cusp of Helix

Fertile Forest Model
[第一章: RDB に於けるツリー構造データ]

ツリー構造データの実際例

実際例を通じて、ツリー構造データがどのように活用されるかを紹介します。

先祖ノード検索の実際例

先祖ノードの取得は、 Web サイトで見かける「パン屑リスト」で使われます。

        [Top Page]
            |--[Products]
            |     |--[Smart Phone Apps]
            |     +--[Desktop Apps]
            |--[News]
            |     |--[2015/10]
            |     |--[2015/09]
            |     |--[2015/08]
            |     +--[2015/07]
            +--[About Us]
                  |--[Corporate Philosophy]
                  |--[Access]
                  +--[Contact Us]

上図のようなサイトマップの Web サイトで「 Corporate Philosophy 」のページに居る場合、ページの上部に次のようなリンクがよく設置されています。

サイトの全ページの遷移図は、トップページを根ノードとしたツリー構造と見做せます。パン屑リストを表示させるには、現在のページ「 Corporate Philosophy 」の祖先ノードの集合がツリー構造データから検索できればいいわけです。

部分木検索の実際例

ツリー掲示板は、指定したコメントに対して返信できる機能を持っています。保存されたデータは、コメントをノードとしたツリー構造になります。ツリー掲示板で「コメントの流れ」を表示する際に、部分木検索が使われます。

        [2015/03/31]
            |--[Let's Party tonight! (John)]
            |     |--[I will join! (Mike)]
            |     |     +--[Thanks! (John)]
            |     |--[Can not join tonight. (Anne)]
            |     |     +--[When OK? (John)]
            |     +--[OK, but 2 hours only. (Tom)]
            |           |--[Me too. (Eucen)]
            |           +--[I see! (John)]
            +--[I losted my smart phone. (Bill)]
                  |--[When? (Diana)]
                  |     +--[Yesterday. (Bill)]
                  +--[Did you check GPS? (Fred)]
                        +--[Yet (Bill)]

上図のように、 2015年 03月 31日にふたつのスレッドが掲示板に投稿されているとします。 [Let's Party tonight! (John)] のスレッドだけ表示するには、 John のコメントの部分木を検索する機能が必須なのが分かるでしょう。

全ノードを取得してからプログラミング言語で振り分ける方法では、スレッド数が十分多い場合に検索コストの問題をクリアできません。