ユニーク制約の使い道~参照制約にXOR制約を割り当てて使う手法
ユニーク制約(unique)の使い道について、良い記事があったのでメモ。
渡辺さんの記事では、参照制約にXOR制約を割り当てて使う手法を紹介されている。
【元ネタ】
テーブル関連の「排他性」をモデル上で表現する: 設計者の発言
業務ロジックをデータモデリングはどこまで表現できるか?: プログラマの思索
モデリング再復習DOA編part1~情報無損失分解と結合の罠: プログラマの思索
【1】ユニーク制約の事例としては、商品マスタのJANコード、住民台帳の社会保障番号がある。
もちろん、商品コードや住民IDのように、テーブル上の主キーはあるけれど、業務上の都合で一意に振るべき項目が別途ある。
但し、ユニーク制約は主キーではない。
つまり、NULLも許す制約なので、主キーには成り得ない。
但し、あるテーブルにユニーク制約がある場合、主キーになりうる候補キーが複数存在することを意味する。
この特徴から、ボイスコッド正規化する必要が出てきて、強引にボイスコッド正規化すると、本来の関数従属性が失われるということもありうる。
つまり、情報無損失分解になりえない場合がある。
【2】上記の渡辺さんの記事では、ユニーク制約をボイスコッド正規化に使う事例だけでなく、参照制約にXOR制約を割り当てて使う手法を紹介されている。
手法としては、参照元・参照先のテーブルには全て二次識別子(セカンダリーキー、つまり代替キー(
Alternative Key))を持たせて、参照元のデータは二次識別子の観点では、他のテーブルに属さないような制約を持たせる。
つまり、外部キーを持つ参照元テーブル群に二次識別子を付与し、その二次識別子がユニーク制約を持つから、XOR制約を持たせるように制約条件を課す。
渡辺さんは、このような使い方をする二次識別子を「汎用アクセスキー」と呼んでいる。
テーブル関連の「排他性」をモデル上で表現する: 設計者の発言では、参照元として各取引テーブル(製造指示材料明細、売上振替、出荷明細など)に対し、取引管理Noという二次識別子を持たせる。
そして、参照先の売掛金増減履歴テーブルには、参照元の二次識別子を外部キーとして持たせておく。
つまり、売上計上のタイミングで、参照元テーブルから参照先の売掛金増減履歴テーブルへ取引管理Noが更新されて、参照元テーブルに二次識別子が生成される。
同時に、その2次識別子が参照先のテーブルに外部キーとして反映される。
すると、2次識別子の観点では、参照元の各取引レコードは一意であるため、売掛金増減履歴レコードを引き起こした参照元のレコードを一意に追跡できる。
すなわち、参照元テーブルは、2次識別子の観点ではXOR制約になっている。
つまり、ユニーク制約をXOR制約の仕掛けを使いたい事例としては、区分ごとに別テーブルのレコードを生成することでXOR制約をテーブル間に課したい時に使えるだろう。
このようなXOR制約の仕掛けは、DOAによる派生関係のうち、「完全・不完全」に相当する事例はある。
でも、外部キーや複合キーでもこのような制約が必要になる場面はすぐに思いつかなかったので、すごく参考になった。
一意制約の使い道としては、ボイスコッド正規化だけでなくXOR制約を適用する手法もあることをメモしておく。
【追記】
渡辺さんから指摘があったので、間違いは修正しておく。
| 固定リンク
« オープンソースのワークフローエンジンActivitiの感想 | トップページ | 第60回 SEA関西プロセス分科会「納品をなくせばうまくいく~アジャイル開発のビジネスモデル!」の感想 #seakansai »
「モデリング」カテゴリの記事
- リプレースとアーキテクチャモダナイゼーシヨンの違いの本質は何なのか?(2026.04.08)
- すり合わせの優位性は健在か?日本の製造業が直面するPLM活用とMBSEソフトウェア運用の理想と現実(2026.03.29)
- アーキテクチャモダナイゼーションにおけるAMETチームの役割と責任範囲は何か(2026.03.23)
- アーキテクチャモダナイゼーションとはそもそも何なのか?(2026.03.22)
- 自動車の組込ソフトウェア開発が難しい理由は3つある(2026.02.23)
「経済学・ERP・財務会計」カテゴリの記事
- すり合わせの優位性は健在か?日本の製造業が直面するPLM活用とMBSEソフトウェア運用の理想と現実(2026.03.29)
- DX戦略はDX成熟度を考慮して戦略策定すべき(2026.03.20)
- データモデリングではシステムが宿命的に負う複雑性をどのように解決しようとしているのか(2026.02.14)
- データモデリングの手法をあなたは持ってますか? at 関西IT勉強宴会(2026.02.11)
- E-BOMとM-BOMの違いは何か?(2026.02.08)


コメント