■応用の森 階層構造Tree 生物分類データ構造 |
まず最初に、ツリー表現を実装するためのデータを考えてみます。 今回は私の趣味で、生物の分類階層をツリー表現してみることにします。 生物の分類は、おおまかには、「界」-「門」-「綱」-「目」-「科」-「属」-「種」 という階層で分類されます。(実際はもっと複雑ですが) 人間(ホモ・サピエンス)を例にとると、 (真核生物)-動物界-脊索動物門-哺乳綱-霊長目-ヒト科-ヒト属-ヒト のように分類されます。(厳密にはさらに細かく複雑な階層ですが簡素化) 全ての生物は、この分類木のどこかに属しているため、 生物分類階層をプログラムでツリー表現しやすいようなデータベースのデータ構造を考えてみます。 今回実装する分類階層テーブル構造は以下の様になります。 今回使用するテーブルは1個だけで、テーブル構成は以下のようになっています。 CREATE TABLE tblClass ( code varchar(32), /* 分類コード */ rute varchar(16), /* ノード経路 */ PRIMARY KEY(code,rute), parent varchar(32), /* 親分類コード */ name varchar(128), /* 分類名称 */ level int4, /* 分類レベル */ serialno int4, /* シリアル番号 */ leaf char(1) default '0', /* ノード末端判定 */ delflag boolean default false /* 論理削除フラグ */ ); ※)ただし、上の分類木でいう「種」はデータ構造が他の分類と異なるため 今回表現するのは、上の分類木でいう「属」までとします。 以下に、人間(ヒト)の分類を例にとって、データ構造を表してみます。 |
![]() 一番トップレベルのノードの code は 'root' となっており、 ノードの子のレコードの parent には、自分の親の code を保持しています。 つまり、自分の子を探すには、自分のcodeを parentに持っているレコードを探せば 子が見つけられるという、レコード構造です。 |
データ構造のイメージが湧いたところで、恒例のプログラム計画マップです。 |
![]() |
上のマップ図から、プログラム設計書を起こしてみます。(これまでに出現している汎用クラスは、一部割愛しています) |
![]() いつも通りの、コントローラ/ビジネスロジック/FormBean/DTO/Mapperそれとviewの定型的な組み合わせです。 |
それでは、次ページでそれぞれの役割の説明をします。 |
生物の分類階層 ツリー表示 ![]() |
生物分類データ構造 |
![]() |