これ何て呼びますか

【Access 2013 vba】
テーブルのあるレコードを削除しても、そのIDを使用している別テーブルには影響を与えたくない場合、つまり、別テーブルのIDの値は消したくない場合には、どのようなリレーションシップにしたらよいでしょうか。

因みに、このテーブルの編集画面フォームAでは、3つのクエリーを作成しその最後のクエリーQ3をレコードセットとして参照しています。

以下参照

【Table1】
 ・受注ID(主キー)
 ・日時
 ・部屋ID(Ex.Key)

【Table2】
 ・部屋ID(主キー)
 ・建物ID(Ex.Key)
 ・部屋の情報

【Table3】
 ・建物ID(主キー)
 ・建物の情報
 ・所有者ID(Ex.Key)

【Table4】
 ・所有者ID(主キー)
 ・所有者の名前

<<Q1>>→Table1+Table2
 <Table1>
  ・受注ID
  ・部屋ID2(外部キー)→Table2部屋の部屋ID ⇐ ※ ここが、問題のリレーションシップです。

 <Table2>
  ・部屋ID...主キー

<<Q2>>→Q1+Table3
 <Q1>
  ・Q1のTable2の建物ID(外部キー)→Table3の建物ID

 <Table3>
  ・建物ID

<<Q3>>→Q2+Table4
 <Q2>
  ・Q2のTable3の所有者ID(外部キー)→Table4の所有者ID

 <Table4>
  ・所有者ID

このようにクエリーを作成し、Q3をフォームのレコードソースとしたフォームAを使用しています。
このフォームで、<<Q1>>の※印の行のTable2から取得するIDをTable1の項目「部屋ID2」に保存していますがTable2の方にあるレコードを削除しそのIDがなくなっても、Table1には影響しないようにしたいのです。


よろしくお願いします。

A 回答 (1件)

Q1 で、Table2との結合を外部結合にすれば、Table2に対応する部屋IDがなくても影響は受けません。


当然、Table2の部屋データは参照できません。

ただ、参照先のない外部キーを残しておくのは通常は意味がないと思います。
残しておきたいなら、マスター側のレコードは削除せずに、もう使用しないという意味のフィールドを持たせてそこにフラグを立てるという方法にすると思います。

例えば、社員マスターで、社員が退職しても削除せずに、退職フラグを立てる、あるいは退職日を入力するというように。

おそらくアパート等の賃貸管理だと思いますが、その部屋を使用しなくなった日時と理由を格納するフィールドを用意して管理するのがいいと思います。、
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

おすすめの方法を早速、テーブルに反映させ、それに合わせた処理を作りたいと思います。
とても参考になりました。

お礼日時:2014/12/16 13:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!