この記事では、Object Brower ER 8.0(以下、OBER)を使っています。
過去にER Studioを使っていたけれども現在Object Browser ERを使い始めたため、慣れるまでに気づいたことをメモしています。
はじめに
今回、再帰リレーションシップをうまく描くためにググってみたけれど見つからず、やり方を見つけるのに少し迷ったのでメモします。
なお、データモデルの記述方法はIDEF1xです。
再帰リレーションシップとは
例えば、新型コロナのような感染症の患者を管理するエンティティ上で感染元の患者番号を持たせるときに、
・ある1人の患者(元患者)が、複数の患者に感染を広げている
・元患者がいないこともある(NULLになる)
場合の表現が上記のようになります。
OBERでうまくいかなかったこと
OBERで再帰リレーションシップを表現しようと、以下の依存型リレーションシップ
を指定して当該エンティティをクリックすると、「依存型リレーションシップの参照が循環しています」というエラーが表示されてしまいます。
ER Studioの場合は(記憶が確かなら)当該エンティティを2回クリックすることで実現できた(リレーションを引くときの親と子に同じエンティティを指定する)のですが、OBERでは手順がリレーションの引き方も違うのでやり方を見つけるのに少し時間がかかってしまいました。
OBERで実現する方法
以下、実現することができた手順です。
(私の場合見た目で実現することが目的なのですが、見た目以外の機能に影響が出る場合はご指摘いただければ幸いです)
(1)「多対多型リレーションシップ」を選ぶ。
(2)再帰させたいエンティティをクリックすると、多対多のリレーションが追加される。
(3)追加されたリレーションをダブルクリックで選択し、「リレーションタイプ」を「非依存」に変更し、「親の存在は必須」のチェックボックスを外す。
これで、欲しい形のリレーションが追加されたので、レイアウトを整えれば完了です。
ちなみに・・・OBERでのリレーション位置の初期化対策をご存知の方いらしたら・・・
ちなみに本文とは関係ありませんが、OBERで何らかの変更(エンティティを移動したり、オブジェクトサイズ最適化をしたり etc.)を加えた瞬間、リレーションの位置がデフォルトの位置に戻るのですが(以下)、これを発生させない方法をご存知の方いらっしゃったらぜひ教えてください
(レイアウトが命のデータモデルで、この修正作業が大変で大変で・・・TT)