Grails/Gorm では、定義された位置にオブジェクトを保持する物理サイトを保存しています。
ドメイン クラスは単純に次のようになります。
例 A
サイト DC
- サイト名
- positionmap (1: 犬, 2: 猫, 3:foo, 4:bar, ... 平均 30 アイテムまで)
...しかし、オブジェクトはその位置を変更するため、特定の時間 (いつ) にどの位置が何によって占有されていたかを後で確認できるようにする必要があります。
したがって、別のドメインクラスを追加しました
例 B
ポジション DC
- から有効
- 有効な
- 位置マップ (1: 犬、2: 猫、3: フー、4: バー)
- 所属SITEへ
サイト DC
- サイト名
すべてのオブジェクトには説明があり、同じオブジェクトを使用するサイトが多数あるため、すべてのオブジェクトを保持するドメイン クラスを追加しました。結果:
例 C
オブジェクト DC
- 名前
- 説明
ポジション DC
- から有効
- 有効な
- 位置マップ (1: reference_to_dog、2: reference_to_cat、3:reference_to_foo、4:reference_to_bar)
- 所属SITEへ
サイト DC
- サイト名
今、私には、マップはもはや合理的ではないように思えます。
マップを削除して、さらに別のドメイン クラスに置き換えることを考えています。
例 D
オブジェクト DC
- 名前
- 説明
オブジェクトから位置へのDC
- 位置番号 (1、2、3、4、...)
- オブジェクト (reference_to_cat、reference_to_dog、reference_to_foo、...)
- 所属するPOSITIONSへ
ポジション DC
- から有効
- 有効な
- 所属SITEへ
サイト DC
- サイト名
質問
- マップをデータベースに入れることは、一般的に良い考えですか、それとも悪い考えですか?
- どうすればこれをより簡単に達成できますか?
- それを行うための最もパフォーマンスの高い方法は何ですか?
編集:ROBS ANSWERに基づく新しいアプローチ
Rob さんの提案に触発されて、「SeasonPlan」(「ResidenceHistory」を修正) に「最前列」の役割を付与するこのデータ モデルを起草しました。
class Zoo {
static hasMany = [seasons: SeasonPlan]
String name
}
// one way of representing histories
class SeasonPlan = {
static belongsTo = [zoo: Zoo] // a SeasonPlan belongs to a single particular Zoo
static hasMany = [cages: Cage]
DateTime from
DateTime until
}
class Cage {
static belongsTo = [seasonPlan: SeasonPlan] // a cage belongs to a single seasonplan
Species species // a cage has a single Species
Integer cageNumber
}
class Species {
// static hasMany = [cages: Cage] // commented out - no reverse-lookup necessary
String name
}
これには欠点が 1 つあります。シーズンごとに新しいケージがありますが、実際にはケージは同じままです。(これが望ましくない理由をより明確にするために、「ケージ」内の「Integer squareMeters」を想像してください。)
私にとって、そのようなことをデータモデルに適用することはしばしば理解するのが難しいです.現実世界の相関関係を維持しながら、このような「疑似静的」データをアプリケーションにどのように適合させるのですか?
私の言いたいことが理解できることを願っています-そうでない場合は申し訳ありません。