RDBで階層構造を扱う方法
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[データベース]]
#contents
* RDBで階層構造を扱う方法 [#jfc74dfc]
カテゴリーとか階層構造を持ったデータをMySQLで扱いたい。
どうすりゃいいのさ?
* リンク [#x1091953]
まずは、Google検索!
[[MySQL 階層構造 - Google検索>http://www.google.co.jp/#q=...
いろいろヒットしました!
- リレーショナル・データベースの世界
%% http://www.geocities.co.jp/mickindex/database/idx_data...
http://mickindex.sakura.ne.jp/database/idx_database.html
-- SQLで木と階層構造のデータを扱う(1)――入れ子集合モデル
%% http://www.geocities.co.jp/mickindex/database/db_tree_...
http://mickindex.sakura.ne.jp/database/db_tree_ns.html
http://gihyo.jp/dev/serial/01/sql_academy2/000501
-- SQLで木と階層構造のデータを扱う(2)――経路列挙モデル
%% http://www.geocities.co.jp/mickindex/database/db_tree_...
http://mickindex.sakura.ne.jp/database/db_tree_pe.html
-- SQLで木と階層構造のデータを扱う(3)――入れ子区間モデル
http://gihyo.jp/dev/serial/01/sql_academy2/000601
- MySQLで階層化データを使うには
%% http://www.makizou.com/archives/1616 %%
https://www.makizou.com/1616
>リレーショナルデータベースの機能内で階層データを扱う方法...
>- 隣接リストモデル [Adjacency List Model]
>- 入れ子集合モデル [Nested Set Model]
>- 経路列挙モデル [Path Emuneration Model](もしくは、経...
** 隣接リストモデル [#kc6a916f]
それぞれのノード(階層データを構成する個々の要素)が親を...
Oracleの階層問い合わせのようにSQL拡張がない場合(MySQLに...
比較的理解しやすいですがMySQLで利用するには用途が限られま...
** 入れ子集合モデル [#w5fa8f5a]
ノードを円と見なし親子関係を左右の番号を使用し円の包含関...
検索に関しては隣接リストモデルと違い圧倒的有利であるが、...
また、親子関係を左右の番号が追加、削除を繰り返すことによ...
構造は面白いが理解しづらくパフォーマンスが良くないところ...
** 経路列挙モデル [#l806e4ea]
各ノードに絶対パスをデータとして保存しデータ構造(UNIXの...
ノード自身のレコードに親子関係がパスとして含まれているの...
また、パスは一意なりますし、MySQLでも正規表現を扱えるよう...
MySQLで利用するには、この経路列挙モデルが一番親和性が高い...
経路列挙モデルでOK
* 経路列挙モデル [#pc669169]
位置情報をファイルシステムと同じ方法で持つ。直観的に分か...
- 経路列挙モデル(準備編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1662 %%
https://www.makizou.com/1662
- 経路列挙モデル(検索編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1670 %%
https://www.makizou.com/1670
- 経路列挙モデル(更新編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1674 %%
https://www.makizou.com/1674
** 経路列挙モデルの並び替え [#a0c958d4]
経路列挙モデルで、同じ階層のデータ(同じ親ノードにぶら下...
sortフラグを持たせて、大小の数値を付与すればいいの?
並び順まで考えたら、入れ子モデルの方が良いだろうか?
&color(red){経路列挙モデルは、階層構造の上下関係のデータ...
並び順を指定するには、入れ子モデルの方が簡潔だろうか?
…ということで入れ子モデルに変更w
* 入れ子モデル [#x9694686]
入れ子モデルには、
-入れ子集合モデル
-入れ子区間モデル
の二つが紹介されていました。
** 入れ子区間モデル [#qbaad6ca]
SQLで木と階層構造のデータを扱う(3)――入れ子区間モデル
>入れ子集合モデルには、整数を座標に使っているため、更新時...
第6回 SQLで木構造を扱う~入れ子区間モデル (1)もしも無...
http://gihyo.jp/dev/serial/01/sql_academy2/000601
- 入れ子集合モデル(準備編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1621 %%
https://www.makizou.com/1621
- 入れ子集合モデル(検索編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1637 %%
https://www.makizou.com/1637
- 入れ子集合モデル(更新編):MySQLで階層化データを使う
https://makizou.com/1674
データの追加を繰り返すと、識別子の少数化がどんどん進むの...
=[lft][rgt]を整数に直す処理
* 並替え可能な経路列挙モデル [#q77ba2a4]
ここまで考えて、経路列挙モデルでsortするアイデアを思いつ...
-sortフラグを持たせ、並び順を示す数値を入れる。
-sortフラグの数値は、整数ではなく実数を使う。
=入れ子区間モデルと同じアイデア
-実数で見づらければ、整数に正規化する処理を入れる。
** 並び替えの処理 [#jeb2ce1e]
これはSQLだと複雑になりそうなので、プログラム側で処理させ...
-同じ階層のデータ同士は並び替え可能にする。
-異なる階層のデータ同士は並び替えを不可能にする。
その判別処理をプログラムで行なう。
*** テーブル設計 [#b4d00a0a]
|カラム名|データ型|内容|h
|id|int|カテゴリーID|
|name|text|カテゴリー名|
|path|text|ノードのパス情報|
|sort|float|並び順|
|sort_normal|int|並び順を正規化するための一時的な作業用カ...
* 参考書 [#mbc83b29]
#html{{
<table border="0" cellpadding="5"><tr><td valign="top"><a...
<br>
<p>「第9章 一歩進んだ論理設計~SQLで木構造を扱う」に、RD...
<hr>
}}
終了行:
[[データベース]]
#contents
* RDBで階層構造を扱う方法 [#jfc74dfc]
カテゴリーとか階層構造を持ったデータをMySQLで扱いたい。
どうすりゃいいのさ?
* リンク [#x1091953]
まずは、Google検索!
[[MySQL 階層構造 - Google検索>http://www.google.co.jp/#q=...
いろいろヒットしました!
- リレーショナル・データベースの世界
%% http://www.geocities.co.jp/mickindex/database/idx_data...
http://mickindex.sakura.ne.jp/database/idx_database.html
-- SQLで木と階層構造のデータを扱う(1)――入れ子集合モデル
%% http://www.geocities.co.jp/mickindex/database/db_tree_...
http://mickindex.sakura.ne.jp/database/db_tree_ns.html
http://gihyo.jp/dev/serial/01/sql_academy2/000501
-- SQLで木と階層構造のデータを扱う(2)――経路列挙モデル
%% http://www.geocities.co.jp/mickindex/database/db_tree_...
http://mickindex.sakura.ne.jp/database/db_tree_pe.html
-- SQLで木と階層構造のデータを扱う(3)――入れ子区間モデル
http://gihyo.jp/dev/serial/01/sql_academy2/000601
- MySQLで階層化データを使うには
%% http://www.makizou.com/archives/1616 %%
https://www.makizou.com/1616
>リレーショナルデータベースの機能内で階層データを扱う方法...
>- 隣接リストモデル [Adjacency List Model]
>- 入れ子集合モデル [Nested Set Model]
>- 経路列挙モデル [Path Emuneration Model](もしくは、経...
** 隣接リストモデル [#kc6a916f]
それぞれのノード(階層データを構成する個々の要素)が親を...
Oracleの階層問い合わせのようにSQL拡張がない場合(MySQLに...
比較的理解しやすいですがMySQLで利用するには用途が限られま...
** 入れ子集合モデル [#w5fa8f5a]
ノードを円と見なし親子関係を左右の番号を使用し円の包含関...
検索に関しては隣接リストモデルと違い圧倒的有利であるが、...
また、親子関係を左右の番号が追加、削除を繰り返すことによ...
構造は面白いが理解しづらくパフォーマンスが良くないところ...
** 経路列挙モデル [#l806e4ea]
各ノードに絶対パスをデータとして保存しデータ構造(UNIXの...
ノード自身のレコードに親子関係がパスとして含まれているの...
また、パスは一意なりますし、MySQLでも正規表現を扱えるよう...
MySQLで利用するには、この経路列挙モデルが一番親和性が高い...
経路列挙モデルでOK
* 経路列挙モデル [#pc669169]
位置情報をファイルシステムと同じ方法で持つ。直観的に分か...
- 経路列挙モデル(準備編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1662 %%
https://www.makizou.com/1662
- 経路列挙モデル(検索編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1670 %%
https://www.makizou.com/1670
- 経路列挙モデル(更新編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1674 %%
https://www.makizou.com/1674
** 経路列挙モデルの並び替え [#a0c958d4]
経路列挙モデルで、同じ階層のデータ(同じ親ノードにぶら下...
sortフラグを持たせて、大小の数値を付与すればいいの?
並び順まで考えたら、入れ子モデルの方が良いだろうか?
&color(red){経路列挙モデルは、階層構造の上下関係のデータ...
並び順を指定するには、入れ子モデルの方が簡潔だろうか?
…ということで入れ子モデルに変更w
* 入れ子モデル [#x9694686]
入れ子モデルには、
-入れ子集合モデル
-入れ子区間モデル
の二つが紹介されていました。
** 入れ子区間モデル [#qbaad6ca]
SQLで木と階層構造のデータを扱う(3)――入れ子区間モデル
>入れ子集合モデルには、整数を座標に使っているため、更新時...
第6回 SQLで木構造を扱う~入れ子区間モデル (1)もしも無...
http://gihyo.jp/dev/serial/01/sql_academy2/000601
- 入れ子集合モデル(準備編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1621 %%
https://www.makizou.com/1621
- 入れ子集合モデル(検索編):MySQLで階層化データを使う
%% http://www.makizou.com/archives/1637 %%
https://www.makizou.com/1637
- 入れ子集合モデル(更新編):MySQLで階層化データを使う
https://makizou.com/1674
データの追加を繰り返すと、識別子の少数化がどんどん進むの...
=[lft][rgt]を整数に直す処理
* 並替え可能な経路列挙モデル [#q77ba2a4]
ここまで考えて、経路列挙モデルでsortするアイデアを思いつ...
-sortフラグを持たせ、並び順を示す数値を入れる。
-sortフラグの数値は、整数ではなく実数を使う。
=入れ子区間モデルと同じアイデア
-実数で見づらければ、整数に正規化する処理を入れる。
** 並び替えの処理 [#jeb2ce1e]
これはSQLだと複雑になりそうなので、プログラム側で処理させ...
-同じ階層のデータ同士は並び替え可能にする。
-異なる階層のデータ同士は並び替えを不可能にする。
その判別処理をプログラムで行なう。
*** テーブル設計 [#b4d00a0a]
|カラム名|データ型|内容|h
|id|int|カテゴリーID|
|name|text|カテゴリー名|
|path|text|ノードのパス情報|
|sort|float|並び順|
|sort_normal|int|並び順を正規化するための一時的な作業用カ...
* 参考書 [#mbc83b29]
#html{{
<table border="0" cellpadding="5"><tr><td valign="top"><a...
<br>
<p>「第9章 一歩進んだ論理設計~SQLで木構造を扱う」に、RD...
<hr>
}}
ページ名: