- 締切済み
Accessでの設計
次のようなデータの設計に困っています。 前回他の方に答えていただいたのですが、問題が生じたので再度投稿させていただきます。 例)受験者名簿テーブル 受験者番号 主キー 受験者氏名 受験者かな 郵便番号 住所 電話番号 例)申込者テーブル 申込者番号(主キー) 受験者番号 受験者との続柄 申込者氏名 申込者かな 郵便番号 住所 電話番号 上記のテーブルが2つあります。また、受験者と申込者テーブルの受験者番号はリレーションを設定してます。 まず、受験者との続柄が「本人」の場合、申込者名前や住所、その他の項目は全て、受験者テーブルのデータを元に入力できるようにしたいです。また、受験者との続柄が「本人」ではないときには、氏名などを直接入力できるようにしたいです。 その際、申込者に「主キー」は必要かどうか。 また、他にテーブルを作成する必要があるのか。など初心者にわかりやすいように教えていただきたいです。クエリで、試してみましたが「本人」以外のデータを入力できなくなってしまいました。 どなたか回答願います。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ARC
- ベストアンサー率46% (643/1383)
申込者テーブルには氏名などの「入れ物」がありまして… クエリーを使えば「他の入れ物に入っている値を参照する」ことは出来ますが、「氏名などの入れ物にデータを入れる」ことは出来ません。 ってことで、取りうる道としては、 A:申込者.受験者との続柄=「本人」であれば受給者名簿.受給者氏名etcを表示する。 さもなくば、申込者.申込者氏名etcを表示する。 …のようなクエリを作る。 (申込者Tと受験者Tを外部結合し、IIF関数を使ってどちらか一方の値を表示する。) B:データ入力時に「受給者との続柄=本人」が指定されたときは、申込者氏名etcに受給者名簿のデータを複写して入力する。表示するときには申込者テーブルの内容をそのまま表示する。 といった選択肢が考えられますね。 ちなみに、どちらの方法も長所短所があります。 B案は、入力画面さえ作ってしまえば後は楽が出来ます。その反面、受給者名簿テーブルと申込者テーブルとの整合性を取るのに腐心しなくてはなりません。(データを入力する際に、自動でチェックルーチンを走らせるなど…) 「データの正規化」という観点からすると、あまり望ましくはないかも。 A案ですと、申込者テーブルを使用するすべての箇所に前述のロジックを組み込まないといけません。(まぁ、クエリとして保存しておけば、そのクエリを使いまわすだけで良いんですが) 加えて、表示するときに若干重くなりますしね。 難易度で考えますと、A案は何とかVBA無しで済ませれるような気もしなくはないですが、数が増えるにしたがってメンドクサクなりそうな気がします。 B案は、まともに作ればVBA必須ですが、「データを入力する際には、絶対に入力画面を使用する」という制約さえ付ければ、入力画面以外の部分では楽が出来るかと。