21
Force.comで 親子関係を実現する ちょっと 変わったやり方

Force.com Developer Group Japan Meetup#2

Embed Size (px)

DESCRIPTION

weird creating Parent-Children relationship on the Force.com

Citation preview

Page 1: Force.com Developer Group Japan Meetup#2

Force.comで親子関係を実現する

ちょっと変わったやり方

Page 2: Force.com Developer Group Japan Meetup#2

• 名前:米井 孝浩

• TwitterID:yonet77

• 所属:TAOドライブ株式会社

• Force.com開発歴:3年くらい前から?

自己紹介

Page 3: Force.com Developer Group Japan Meetup#2

突然ですが、「階層構造」をもったデータを、どうやって表現してますか?

Page 4: Force.com Developer Group Japan Meetup#2

階層構造をもつデータって?

祖父

親1 親2

子2子1

例)組織、製品

Page 5: Force.com Developer Group Japan Meetup#2

主従関係を使う• 自身に対して、主従関係

は結べない...

Page 6: Force.com Developer Group Japan Meetup#2

参照関係を使う• 自身に対して、参照関係

は定義できる• SOQLで親は5段階上まで• SOQLで子は1段階下まで

Page 7: Force.com Developer Group Japan Meetup#2

今日は別の方法をご紹介します

Page 8: Force.com Developer Group Japan Meetup#2

"入れ子集合モデル"

Page 9: Force.com Developer Group Japan Meetup#2

"入れ子集合モデル"って??このサイトで詳しく説明してます。http://www.geocities.jp/mickindex/database/db_tree_ns.html

Page 10: Force.com Developer Group Japan Meetup#2

メリット

Page 11: Force.com Developer Group Japan Meetup#2

1.階層の深さに制限がない

左値と右値で階層を表現するだけなので、参照関係のような階層の深さに制限はない

Page 12: Force.com Developer Group Japan Meetup#2

2.親子関係の定義が不要

左値と右値で階層を表現するだけなので、親レコードを気にしなくてよい

Page 13: Force.com Developer Group Japan Meetup#2

デメリット

Page 14: Force.com Developer Group Japan Meetup#2

1.データ操作が複雑(少し)

子を挿入、親を変更...と階層構造を編集するとき、左値と右値の計算が常に必要

Page 15: Force.com Developer Group Japan Meetup#2

入れ子集合モデルの実装- データモデル1.左値と右値は必須2.階層の深さは任意

Page 16: Force.com Developer Group Japan Meetup#2

入れ子集合モデルの実装- 子の挿入

AAA

BBB

CCC

"AAA"からみて"CCC" を追加

AAA

BBB

1

2 3

4

AAA

BBB

1

2 3

6

CCC4 5

Page 17: Force.com Developer Group Japan Meetup#2

入れ子集合モデルの実装- 兄弟の挿入

AAA

BBB

CCC

"BBB"からみて"CCC" を追加

AAA

BBB

1

2 3

4

AAA

BBB

1

2 3

6

CCC4 5

Page 18: Force.com Developer Group Japan Meetup#2

CCC

入れ子集合モデルの実装- 兄弟の入れ替え(=行移動)AAA

BBB

CCC

AAA

CCC

BBB

AAA

BBB

1

2 3

6

4 5

AAA

BBB

1

2 3

6

CCC4 5

Page 19: Force.com Developer Group Japan Meetup#2

入れ子集合モデルの実装- 子の削除AAA

BBB

CCC

"CCC" を削除

CCC

AAA

BBB

1

2 3

6

4 5

CCC

AAA1

2 3

6

Page 20: Force.com Developer Group Japan Meetup#2

入れ子集合モデルの実装- 親子データの取得AAA

BBB

CCCDDD

AAA

BBB

1

2 5

8

CCC6 7

DDD3 4

• "AAA"以下の要素を全て取得する→ LFT >= 1 and RGT <= 8 の要素を取得する

• "BBB"以下の要素を全て取得する→ LFT >= 2 and RGT <= 5 の要素を取得する

Page 21: Force.com Developer Group Japan Meetup#2

<デモ>- Force.comの上で動かしてみます

http://fblg.jp/article/466/kirakira16/pc/6310610/4278617.jpg