私は4つのテーブルを持っています。
PERSON DELIVERY_MAPPING GENERATION_SYSTEM DELIVERY_METHOD
------ ---------------- ----------------- ---------------
ID PERSON_ID ID ID
NAME GENERATION_SYSTEM_ID NAME NAME
DELIVERY_METHOD_ID IS_SPECIAL
サンプルデータ:
PERSON DELIVERY_MAPPING GENERATION_SYSTEM DELIVERY_METHOD
------ ---------------- ----------------- ---------------
1. TOM 1 1 1. COLOR PRINTER 1 1. EMAIL N
2. DICK 1 2 2. BW PRINTER 1 2. POST N
3. HARRY 2 3 3. HANDWRITTEN 3 3. PIGEONS Y
ADELIVERY_METHOD
には、新しい文字を配信する方法が含まれています — EMAIL
、POST
、PIGEON
. 列はIS_SPECIAL
速達の手段として記録をマークします。Y
またはの単純な値で示されますN
。のみPIGEON
、特殊な発送方法ですY
、他はありませんN
。
にGENERATION_SYSTEM
は、最終的にレターを印刷するための情報があります。値の例はCOLOR PRINTER
とDOT MATRIX PRINTER
です。それぞれGENERATION_SYSTEM
は常にDELIVERY_METHOD
のいずれかを使用して配信されます。との間に外部キーがGENERATION_SYSTEM
ありDELIVERY_METHOD
ます。
現在、それぞれPERSON
が異なる によって生成された文字を持つことができます。GENERATION_SYSTEM
これは多対多の関係であるため、DELIVERY_MAPPING
テーブルがあり、そのために両端に外部キーがあります。
ここまでは順調ですね。
ある人が特別な配信方法を使用するシステムによって生成された手紙を持っている場合、マッピングリストに複数の生成システムを持つことは許可されないことを確認する必要があります. たとえば、ディックはすでにすべての手書きの手紙を鳩によって配達されているため (これは特別な配達方法としてマークされています)、カラー プリンターを使用して手紙を作成することはできません。
どうすればそのような制約を達成できますか? テーブルで before-insert-or-update トリガーを使用して実行しようとしましたDELIVERY_MAPPING
が、更新時に変更トリガーの問題が発生します。
このシナリオをさらに正常化できますか? テーブルを適切に正規化していないだけかもしれません。
いずれにせよ、この問題に対するあなたの見解を聞きたいです。私は十分に冗長であることを願っています (...そして、この投稿のより良いタイトルを提案していただければ、それは素晴らしいことです)