additionalUniqueKeyMap

additionalUniqueKeyMapとは?

実質的なUQ(UniqueKey)の関連がありながらも実際にはUQ制約が存在しないテーブルおよびビューについて、 DBFluteが生成するEntityにてUQとして扱えるようにするDBFluteプロパティ。DBFluteクライアントの dfprop 配下の additionalUniqueKeyMap.dfprop という名前のテキストファイルです。主に Generateタスク を実行する際に参照され、実際にUQ制約が存在しないテーブルでも、このプロパティの設定を行うことでUQを持ったEntityを生成できます。

UQ制約がない場合のDBFlute

UQ制約がない場合(かつ、このプロパティを利用しない場合)は、"one-to-oneの関連" を扱うことができません(DBFluteがone-to-oneであることを認識できない)。 UQ制約自体に多くのメリットがあるため、基本的にはUQ制約がしっかりDB側に付与されていることが推奨されます。

DB設計 - UQ制約について

主な利用パターン

UQ制約は存在しないが実質的にUQである
基本的にはUQ制約がしっかりDB側に付与されていることが推奨されますが、 DB側の事情によってUQ制約が存在しない場合(かつ、実質的なUQがある場合)にこのプロパティが有効です。
ビューなどそもそもUQ情報を持たないオブジェクト
参照先のテーブルなどがUQ制約を持っている場合(ビューの構造的・要件的にそのUQを扱いたい場合)にこのプロパティが有効です。

プロパティ

map型プロパティ で、"UQの名前" (任意だがユニークである必要がある)とそれに対するテーブル名とカラム名を定義します。

additionalUniqueKeyMapの仕様 @additionalUniqueKeyMap.dfprop
map:{
    ; [UQ-name] = map:{
        ; tableName = [table-name]
        ; columnName = [column-name for UQ]
    }
    ; ...
}

以下、(*)の付いたプロパティは必須です。

UQ-name (*)

UQの名前を指定します。mapのキーになっていて、ユニークである必要があります。 習慣的に、実際にDBに存在するUQ制約を含めてもユニークな名前(かつ、大文字で "UQ_" で始まるもの)を付けることをお奨めします。

tableName (*)

UQ制約を設定するテーブル名を指定します。

値候補
テーブルの名前 (自動生成対象になっていること)
デフォルト
なし
補足
  • 大文字小文字の区別なし (但し実体と合わせることを推奨)

columnName (*)

UQとして扱うカラム名を指定します。

値候補
カラムの名前 (自動生成対象になっていること)
デフォルト
なし
補足
  • 大文字小文字の区別なし (但し実体と合わせることを推奨)
  • 複合UQの場合は、"/" (スラッシュ)区切りで複数のカラムを指定

Example

e.g. 会員の会員アカウントにUQ_MEMBERというUQ制約を付与する場合 @additionalUniqueKeyMap.dfprop
; UQ_MEMBER = map:{
    ; tableName = MEMBER ; columnName = MEMBER_ACCOUNT
}
e.g. 会員の会員アカウントと生年月日をUQ制約を付与する場合 @additionalUniqueKeyMap.dfprop
; UQ_MEMBER_ACCOUNT_BIRTHDATE = map:{
    ; tableName = MEMBER ; columnName = MEMBER_ACCOUNT/BIRTHDATE
}