- ベストアンサー
Accessクエリ作成のフィールド選択について
- Access初心者のためのクエリ作成で、主キーと外部キーで関連付けられたフィールドを選ぶ際の正しい方法を教えてください。
- 「T担当者マスタ」と「T得意先マスタ」を基に「Q得意先マスタ」を作成する場合、デザイングリッドにドラッグするフィールドの選び方が分からないです。
- 担当者コードが両方のテーブルに存在するため、どちらを選ぶべきか理解できません。具体的な選択方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> 言葉足らずですみません。 > 「T担当者マスタ」の「担当者名」と > 「T得意先マスタ」の「担当者名」をリレーションシップでリンクしています。 それは間違いですね。 それでは、参照整合性に「チェック」を入れることができないはずです。 主キーと外部キーをリンクさせる必要がありますので、 担当者コード 同士でリンクさせないとだめです。
その他の回答 (4)
- hatena1989
- ベストアンサー率87% (378/433)
> >通常は得意先ごとの担当=期間×担当者で組みます。 > > 設定としては、「T得意先マスタ」に、期間フィールドを設ければ > 良いのでしょうか? 担当の履歴を残したいとなると、 担当者 と 得意先 の関係は、多対多の関係になりますので、中間テーブルが必要になります。 T得意先マスタとT担当者マスタとは別に下記のテーブルを作成してください。 T担当履歴 --------- 得意先コード (外部キー) 担当者コード (外部キー) 開始日 終了日 これとは別に、 No.3の回答者さんも言われてますが、現行担当者 のフィールドを、T得意先マスタ に置いておくのは有効な方法だと思います。
お礼
なるほど。 テーブルを増やせばいいのですね! ありがとうございます。
- yambejp
- ベストアンサー率51% (3827/7415)
蛇足ですが、 得意先に対する担当者は永続的に同じというわけではないので 通常は得意先ごとの担当=期間×担当者で組みます。 そうでないと来月から担当が変わる・・・などのデータが設定できず 担当が変わる瞬間にメンテをしないというあわただしい仕組みになります。 (また過去の担当の履歴もあればあったで便利でしょう) もちろん得意先テーブルの各データに現行担当の担当者コードを埋め込んでおくと 検索性が向上するので有効です。 その場合は、期間×担当→現行担当を更新する処理がデイリーのバッチで行うことになります
補足
ご回答ありがとうございます! >通常は得意先ごとの担当=期間×担当者で組みます。 設定としては、「T得意先マスタ」に、期間フィールドを設ければ 良いのでしょうか?
- hatena1989
- ベストアンサー率87% (378/433)
まずは、テーブル設計が少し間違っいます(正規化されていない)。 「T担当者マスタ」に「担当者名」があり、「T得意先マスタ」にも「担当者名」がありますが、 「T得意先マスタ」の「担当者名」は不要ですので削除してください。 データベースではリンクするフィールド以外は重複する値が複数箇所に存在してはいけません。 さて、本題ですが、 どちら表示させていいいといえばいいのですが、 通常は、T得意先マスタ を表示させます。 理由としては、両方表示させて、それぞれのフィールドを更新してみれば分かりますが、 T担当者マスタ の 担当者コード を更新しようとしても更新できません。 (整合性矛盾を防止のためにロックがかかる) T得意先マスタ の 担当者コード の方は更新できる。コードを更新するとそれにともなって担当者名も自動で変わります。 通常はこの方が好ましいと思います。 このように外部キーを表示させて、それに対応するマスターのデータを表示させるものをオートルックアップクエリと言って、よく使われるものです。 オート ルックアップ クエリを作成するには http://support.microsoft.com/kb/879978/ja
お礼
ご回答ありがとうございます。 >データベースではリンクするフィールド以外は重複する値が複数箇所に存在してはいけません。 言葉足らずですみません。 「T担当者マスタ」の「担当者名」と 「T得意先マスタ」の「担当者名」をリレーションシップでリンクしています。 >(整合性矛盾を防止のためにロックがかかる) 実際にフィールドの更新をして、確認しました。 なるほどです。納得のできる理解です。 学習をすすめてみます。
- bin-chan
- ベストアンサー率33% (1403/4213)
「得意先には一人の担当者がいる」なんですね? どちらでも良さそうだが、私なら 「担当者マスタ」のほうを使う。 「そのクエリ」を作る目的は「担当者が担当している得意先のリストを作るため」だから。 OUTER JOINの場合等、参照整合性に不都合があって結合できない事態があっても 表示されるのは「担当者マスタ」の値だから。
お礼
なるほど、そう考えるとしっくりきます。 目的を考えると理解できました。 ありがとうございます!! 運用面での考慮がポイントなんですね。
お礼
間違えていました! 「担当者コード」と「担当者名」を 整理できていませんでした。 ご回答いただいて、間違えていることを理解できました! ・主キーと外部キーをリンク ・担当者名を複数個所に設けない リンクされていない重複するフィールドだから まともな質問になっていなかったのに 親切に教えていただき、本当にありがとうございます!!