0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Mendix Pro】Association(アソシエーション)についての簡単な解説

Posted at

こんにちは!
今回の記事ではMendixの最大といってもいい特徴である「アソシエーション」について簡単な解説を行います。

アソシエーションとは、関連性という訳になるでしょうか。
Aというエンティティと、Bというエンティティの間にアソシエーションを設定する、張るといった感じで使用します。

Mendixのアソシエーションについて知る前に、まずは以下について復習してみましょう。

ER図 多重度について

アソシエーションを理解する第一歩は、ER図の多重度について知ることから始まります。
研修や資格の試験勉強などでご存じの方も多い下記の図です。

https://www.ntt.com/business/services/rink/knowledge/archive_58.html
より引用
image.png

エンティティ間のリレーションシップを表す図であり、
例えば、この表からですと注文テーブルと注文明細テーブルは1:多で紐づいていることが分かります。
注文1件に、明細は複数件紐づくことが可能というわけです。

主キーと外部キー(FK)について

通常のデータベースですと、ER図で表したリレーションを再現するには、
主キーと外部キーを用いてテーブルを定義し、プログラムで使用することになります。

image.png

すごく簡易的な例となりますが
上の表でいくとA事業所に所属する従業員全員の情報を取得するときに、
SQL文としては

sampleA.sql
SELECT *
FROM 従業員テーブル
WHERE 事業所ID = '事業部テーブルに存在する事業部ID'

となり「両者を紐づけるカラム」の存在が必要です。

ここまでは、エンジニアやプログラムを書いている皆さんにとっては当たり前なことだと思います。
ではこれが、Mendixの場合だとどうなるのか

Mendixでは外部キーの概念を無視してリレーションを定義可能!

実際のソースを用いて解説します。
これを知るとMendixの開発スピード、技術が飛躍的にアップしますのでぜひ以降をお読みになり、ご活用くださると幸いです。

先ほどの例の通り、まずは事業部エンティティと従業員エンティティの2テーブルを準備します。
image.png

アソシエーションの設定の方法とフローでの使用方法の解説

では、実際に2テーブル間にアソシエーションを定義し、ソースで使用してみましょう
上記の画像の通りDomainModelにテーブルを作成しました。

①子となるエンティティを選択し(今回は従業員→事業所に繋ぐイメージ)、Associationタブをクリックします
image.png

②New押下 アソシエーションを張りたいエンティティを選択します
今回は事業所テーブルです
image.png

③Associationタブに設定したアソシエーションが表示されます。
これでアソシエーションが設定されました
image.png

DomainModelでは以下のように見えます
アソシエーションを張ると両方のエンティティのプロパティで確認できるようになります。
image.png

④Associationの設定をします。
・DomainModelでAssociationをクリックする
・エンティティのAssociationタブでアソシエーションを選びクリックする
このどちらかでアソシエーションの設定画面を開いてください。
image.png

この画面で出来ること
・アソシエーションの名前を自由に変更(分かりやすいように決めてよい)
・Documentaionはコメント
・Multiplicity 多重度の設定 *が多の意味になります
・on delete of… アソシエーションで紐づけた一方のデータがDeleteされた場合
 紐づいているデータをどうするか選べます
 基本はkeppで消えないで良いかと

これでアソシエーションの設定は完了です!
簡単ですね(*‘ω‘ *)
image.png
事業所1件に対して、従業員複数が紐づくアソシエーションが定義できました!

マイクロフローでの使用

設定したアソシエーションのマイクロフローでの使用方法です。
マイクロフローは実際の処理ロジックを書くところになります。
(今回はマイクロフローの詳細については割愛しますm(__)m)

パターン:データを紐づける
以下マイクロフローでCreate objectを用い、部署のオブジェクトを作成しました。
image.png

部署A インスタンスみたいなものです。
image.png

このフローの後に、同じくCreate Objectで社員のオブジェクトをCreateしてみましょう。
image.png
作りました。

もう一人作ってみましょう
image.png
↑これで部署1つに、2人の社員ができました。

では、次に部署Aに社員2人を紐づけます。

まずは、社員1を選択し、Newで変更する項目を選びます。
すると、この時Attributeとは別に、DomainModelで定義しているアソシエーションが選択できることが分かります。
image.png

↓選択し、どのDepartmentオブジェクトを紐づけるか選びます。
(Mendixでは変数やオブジェクトは「$」で指定します)
image.png

すると…
image.png
↑設定ができました。
鍵マークみたいなものがアソシエーションで、一番左のDepartmentオブジェクトが青く選択されている状態になると思います。使われていますよっという印です。
これでアソシエーションの張り方は終わります。
簡単でしょう?(^_^

ついでに、社員2人目も紐づけて、最後にコミットオブジェクトも置いちゃいましょう。

コミットオブジェクトは、アクティビティを置いて、Commit objectsを選びます。
image.png

今回はそのまま3つをコミットオブジェクトしました。
かっこ悪いですが、今回は実権なのでよしとします。。
image.png

パターン:データをRetreive(取得)する

では、次はデータベースからデータ取るときにどうするかを解説します。
まず、Mendixでデータを取得するアクティビティはRetreiveになります。
image.png

・部署Aは、どことも紐づいていない原点のオブジェクトなのでFrom databaseからオブジェクトを選択します
(今は部署Aしかない確定1件なので、RangeはFirstを選んでおきます)
image.png

・これで部署Aの情報が取得できました
image.png

・では、「この部署に紐づいている」社員を取得します。
By associationから、部署と社員のアソシエーションを選択します
image.png

★ポイントとしては、今取得した部署オブジェクトから引っ張って取ってくるというイメージです
 ここで間違ったものを選ぶと意図していないデータを取ってしまうので注意です
 (なれるまで少しかかると思います(笑))
image.png

・選ぶと、自然とList ofとなっており、複数リストとして取得したことが分かります。
 1-多でアソシエーションを繋いでいると、中身が1件でもリストになります。
image.png

マイクロフローでのデータの取得方法についても以上となります。

まとめ
・Associationを使うと、外部キーの概念を無くしてデータを紐づけられる
・Association先のデータを取得するときは、RetreiveアクティビティのBy associationから

最初は慣れるまで少しとっつきにくい概念かと思います。
ですが、これを理解できるとMendixでの開発レベルが本当に上がるので、
Mendixでの開発が必要な方または、Mendixを試してみたいとお考えの方は
ぜひこのアソシエーションの概念理解について頑張っていただければと思います!

今回の記事は以上です。
ありがとうございます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?