親/子エンティティにおける名前の重複の解決(一意化)
リレーションシップの操作 への移動
目次
主キー属性、リレーションシップ、外部キーを作成するか名前変更した結果、子テーブル/エンティティの既存の属性、カラム、外部キーと名前が重複した場合は、[重複属性エディタ]が表示されます。たとえば、"親" と "子" という 2 つのエンティティがあるとします。"親" に "キー" という名前の主キーがあり、"子" にも "キー" という名前の属性がある場合、"親" から "子" へのリレーションシップを作成すると、[重複属性エディタ]が開きます。移行属性(伝播された属性)をどう処理するかを、そこで決定する必要があります。
- [オプション]ダイアログ ボックスの[アプリケーション]タブで[外部キーの一意化をメッセージで確認]チェック ボックスがオンになっていれば、親エンティティと同じ名前の外部キーが子エンティティに存在する場合、[重複属性エディタ]が開きます。[オプション]ダイアログ ボックスを使用するには、メイン メニューから[ツール|オプション...]を選択します。
- [オプション]ダイアログ ボックスの[名前の処理]タブで、[名前の編集時に一意化を許可]チェック ボックスをオンにすると、外部キー属性/カラムのロール名を、同じエンティティ/テーブルにある他の属性/カラムと同じ名前に変更できます。
[重複属性エディタ]の使用方法については、以下を参考にしてください。
属性名編集オプション
[重複属性エディタ]のオプションと機能について以下に説明します。
- [対象属性]: 重複する属性/カラムの一覧が表示されます。重複名の解決対象となる移行属性(伝播された属性)を選択したあと、その属性をどう処理するかを選択します。
- [既存の属性を移行属性と置き換える]: 子エンティティの既存属性を、移行(つまり伝播)された外部キー属性で置き換えます。リレーションシップがメイン モデルから削除されると、移行属性と既存属性が子エンティティから削除されます。
- [移行属性にロール名を付ける]: 子エンティティにもともと存在する属性を元の名前で残せるように、外部キーの名前を変更できます。伝播後は、両方の属性が子エンティティに存在します。
- [既存の属性名を変更して移行属性名を使用可能にする]: 親エンティティの属性名を外部キーに使用できるように、子エンティティにもともと存在する属性の名前を変更できます。伝播後は、両方の属性が子エンティティに存在します。
- [既存属性と移行属性を一意化する]: 移行(つまり伝播)された外部キー属性と子エンティティの既存属性を一意化します。後でリレーションシップが削除されると、子エンティティには既存属性が残ります。
重複名の解決例
[重複属性エディタ]で選択したオプションに応じて重複名がどう解決されるかを次の例で示します。
[既存の属性を移行属性と置き換える]
子エンティティの既存属性を、移行(つまり伝播)された外部キー属性で置き換えます。リレーションシップがメイン モデルから削除されると、移行属性と既存属性が子エンティティから削除されます。
[移行属性にロール名を付ける]
子エンティティにもともと存在する属性を元の名前で残せるように、外部キーの名前を変更できます。伝播後は、両方の属性が子エンティティに存在します。
- 名前の競合を解決するために、[重複属性エディタ]で外部キーにロール名 <親キーの名前>_<ロール名> を指定することができます。
[既存の属性名を変更して移行属性名を使用可能にする]
親エンティティの属性名を外部キーに使用できるように、子エンティティにもともと存在する属性の名前を変更できます。
- 外部キーを解決するために、既存属性の名前は <親キーの名前>_<移行属性名> に変更されます。
[既存属性と移行属性を一意化する]
移行(つまり伝播)された外部キー属性と子エンティティの既存属性を一意化します。
- リレーションシップを削除しても、子エンティティのキーは保持されます。