« オープンソースのワークフローエンジンActivitiの感想 | トップページ | 第60回 SEA関西プロセス分科会「納品をなくせばうまくいく~アジャイル開発のビジネスモデル!」の感想 #seakansai »

2014/09/28

ユニーク制約の使い道~参照制約にXOR制約を割り当てて使う手法

ユニーク制約(unique)の使い道について、良い記事があったのでメモ。
渡辺さんの記事では、参照制約にXOR制約を割り当てて使う手法を紹介されている。

【元ネタ】
テーブル関連の「排他性」をモデル上で表現する: 設計者の発言

ユニーク制約の使いどころ: 設計者の発言

業務ロジックをデータモデリングはどこまで表現できるか?: プログラマの思索

候補キーと2次識別子に関する概念: プログラマの思索

2次識別子を使ったデータモデリング: プログラマの思索

モデリング再復習DOA編part1~情報無損失分解と結合の罠: プログラマの思索

データベース設計で派生関係は難しい: プログラマの思索

データモデル表記読み替えハンドブック: プログラマの思索

実践的データモデリング入門の感想: プログラマの思索

【1】ユニーク制約の事例としては、商品マスタのJANコード、住民台帳の社会保障番号がある。
もちろん、商品コードや住民IDのように、テーブル上の主キーはあるけれど、業務上の都合で一意に振るべき項目が別途ある。

akipiiさんはTwitterを使っています: "いわゆる代替キー(Altenative Key)の解説。例えば、商品マスタのJANコード、住民台帳の社会保障番号などがあるだろう。ユニーク制約の使いどころ: 設計者の発言 http://t.co/ebvgyijVEU"

akipiiさんはTwitterを使っています: "社会保障番号は既に一意に振られている。ない人もいるけど。主キーを配布するのも大変だ。  国民にマイナンバー発行へ・・成立された「共通番号法」=社会保障給付や納税に対応 - NAVER まとめ http://t.co/GmBsjcaPYU"

akipiiさんはTwitterを使っています: "DOA的には日本人一人一人に一意な識別子を付与する事に過ぎない。20歳以上の日本人全員に社会保障番号が付与される仮定なのに、何を今更という感じ。マイナンバー番号制度のシステム費用はおいくら? - 記者の眼:ITpro http://t.co/qRf0P5rw"

但し、ユニーク制約は主キーではない。
つまり、NULLも許す制約なので、主キーには成り得ない。

但し、あるテーブルにユニーク制約がある場合、主キーになりうる候補キーが複数存在することを意味する。
この特徴から、ボイスコッド正規化する必要が出てきて、強引にボイスコッド正規化すると、本来の関数従属性が失われるということもありうる。
つまり、情報無損失分解になりえない場合がある。

【2】上記の渡辺さんの記事では、ユニーク制約をボイスコッド正規化に使う事例だけでなく、参照制約にXOR制約を割り当てて使う手法を紹介されている。

手法としては、参照元・参照先のテーブルには全て二次識別子(セカンダリーキー、つまり代替キー(
Alternative Key))を持たせて、参照元のデータは二次識別子の観点では、他のテーブルに属さないような制約を持たせる。

つまり、外部キーを持つ参照元テーブル群に二次識別子を付与し、その二次識別子がユニーク制約を持つから、XOR制約を持たせるように制約条件を課す。
渡辺さんは、このような使い方をする二次識別子を「汎用アクセスキー」と呼んでいる。

テーブル関連の「排他性」をモデル上で表現する: 設計者の発言では、参照元として各取引テーブル(製造指示材料明細、売上振替、出荷明細など)に対し、取引管理Noという二次識別子を持たせる。
そして、参照先の売掛金増減履歴テーブルには、参照元の二次識別子を外部キーとして持たせておく。

つまり、売上計上のタイミングで、参照元テーブルから参照先の売掛金増減履歴テーブルへ取引管理Noが更新されて、参照元テーブルに二次識別子が生成される。
同時に、その2次識別子が参照先のテーブルに外部キーとして反映される。

すると、2次識別子の観点では、参照元の各取引レコードは一意であるため、売掛金増減履歴レコードを引き起こした参照元のレコードを一意に追跡できる。
すなわち、参照元テーブルは、2次識別子の観点ではXOR制約になっている。

つまり、ユニーク制約をXOR制約の仕掛けを使いたい事例としては、区分ごとに別テーブルのレコードを生成することでXOR制約をテーブル間に課したい時に使えるだろう。

このようなXOR制約の仕掛けは、DOAによる派生関係のうち、「完全・不完全」に相当する事例はある。
でも、外部キーや複合キーでもこのような制約が必要になる場面はすぐに思いつかなかったので、すごく参考になった。

一意制約の使い道としては、ボイスコッド正規化だけでなくXOR制約を適用する手法もあることをメモしておく。

【追記】
渡辺さんから指摘があったので、間違いは修正しておく。

|

« オープンソースのワークフローエンジンActivitiの感想 | トップページ | 第60回 SEA関西プロセス分科会「納品をなくせばうまくいく~アジャイル開発のビジネスモデル!」の感想 #seakansai »

モデリング」カテゴリの記事

経済学・ERP・財務会計」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« オープンソースのワークフローエンジンActivitiの感想 | トップページ | 第60回 SEA関西プロセス分科会「納品をなくせばうまくいく~アジャイル開発のビジネスモデル!」の感想 #seakansai »