
Access初心者です。
Access2010の学習をしています。
主キーと外部キーで関連付けられた
フィールドをクエリで抽出する場合、
デザイングリッドにドラッグするフィールドは、
どちらのフィールドを選べばよいのでしょうか?
----
「T担当者マスタ」と「T得意先マスタ」をもとに
「Q得意先マスタ」を作成したい場合です・・・
「T担当者マスタ」のフィールド
担当者コード(主キー)
担当者名
「T得意先マスタ」のフィールド
得意先コード(主キー)
得意先名
フリガナ
〒
住所
TEL
担当者コード(外部キー)
担当者名
デザイングリッドにドラッグするフィールド
得意先コード
得意先名
フリガナ
〒
住所
TEL
担当者コード(※主キーのフィールドを選ぶのは不正解ですか?)
担当者名
-----
担当者コードは元となるテーブルの両方に存在する
わけですが、どんな理由でどちらを選ぶのか
理解できません。
テキストの問題なのに情けないです・・
ご教授ください。
No.4ベストアンサー
- 回答日時:
> 言葉足らずですみません。
> 「T担当者マスタ」の「担当者名」と
> 「T得意先マスタ」の「担当者名」をリレーションシップでリンクしています。
それは間違いですね。
それでは、参照整合性に「チェック」を入れることができないはずです。
主キーと外部キーをリンクさせる必要がありますので、
担当者コード 同士でリンクさせないとだめです。
間違えていました!
「担当者コード」と「担当者名」を
整理できていませんでした。
ご回答いただいて、間違えていることを理解できました!
・主キーと外部キーをリンク
・担当者名を複数個所に設けない リンクされていない重複するフィールドだから
まともな質問になっていなかったのに
親切に教えていただき、本当にありがとうございます!!
No.5
- 回答日時:
> >通常は得意先ごとの担当=期間×担当者で組みます。
>
> 設定としては、「T得意先マスタ」に、期間フィールドを設ければ
> 良いのでしょうか?
担当の履歴を残したいとなると、
担当者 と 得意先 の関係は、多対多の関係になりますので、中間テーブルが必要になります。
T得意先マスタとT担当者マスタとは別に下記のテーブルを作成してください。
T担当履歴
---------
得意先コード (外部キー)
担当者コード (外部キー)
開始日
終了日
これとは別に、
No.3の回答者さんも言われてますが、現行担当者 のフィールドを、T得意先マスタ に置いておくのは有効な方法だと思います。
No.3
- 回答日時:
蛇足ですが、
得意先に対する担当者は永続的に同じというわけではないので
通常は得意先ごとの担当=期間×担当者で組みます。
そうでないと来月から担当が変わる・・・などのデータが設定できず
担当が変わる瞬間にメンテをしないというあわただしい仕組みになります。
(また過去の担当の履歴もあればあったで便利でしょう)
もちろん得意先テーブルの各データに現行担当の担当者コードを埋め込んでおくと
検索性が向上するので有効です。
その場合は、期間×担当→現行担当を更新する処理がデイリーのバッチで行うことになります
この回答への補足
ご回答ありがとうございます!
>通常は得意先ごとの担当=期間×担当者で組みます。
設定としては、「T得意先マスタ」に、期間フィールドを設ければ
良いのでしょうか?
No.2
- 回答日時:
まずは、テーブル設計が少し間違っいます(正規化されていない)。
「T担当者マスタ」に「担当者名」があり、「T得意先マスタ」にも「担当者名」がありますが、
「T得意先マスタ」の「担当者名」は不要ですので削除してください。
データベースではリンクするフィールド以外は重複する値が複数箇所に存在してはいけません。
さて、本題ですが、
どちら表示させていいいといえばいいのですが、
通常は、T得意先マスタ を表示させます。
理由としては、両方表示させて、それぞれのフィールドを更新してみれば分かりますが、
T担当者マスタ の 担当者コード を更新しようとしても更新できません。
(整合性矛盾を防止のためにロックがかかる)
T得意先マスタ の 担当者コード の方は更新できる。コードを更新するとそれにともなって担当者名も自動で変わります。
通常はこの方が好ましいと思います。
このように外部キーを表示させて、それに対応するマスターのデータを表示させるものをオートルックアップクエリと言って、よく使われるものです。
オート ルックアップ クエリを作成するには
http://support.microsoft.com/kb/879978/ja
ご回答ありがとうございます。
>データベースではリンクするフィールド以外は重複する値が複数箇所に存在してはいけません。
言葉足らずですみません。
「T担当者マスタ」の「担当者名」と
「T得意先マスタ」の「担当者名」をリレーションシップでリンクしています。
>(整合性矛盾を防止のためにロックがかかる)
実際にフィールドの更新をして、確認しました。
なるほどです。納得のできる理解です。
学習をすすめてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
Accessの実行時エラーについて
-
AS400にてサブファイルレコード...
-
日付により変動する「単価」を...
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
1日に1人がこなせるプログラム...
-
外部参照してるキーを主キーに...
-
access2003 クエリSQL文に...
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
特定の文字列で列を区切るには?
-
SQLで特定の項目の重複のみを排...
-
市区町村と番地を分けたいので...
-
for whichの使い方
-
SQLServerで文字列の末尾からあ...
-
select文のwhere句に配列を入れ...
-
エクセルの関数について教えて...
-
入力値と外部キーをINSERTするには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
ACCESS 商品毎の最新の単価を設...
-
Accessの実行時エラーについて
-
DBが複雑すぎる
-
マスタについて
-
AS400にてサブファイルレコード...
-
日付により変動する「単価」を...
-
ACCESS ツリービューの作り方
-
ACCESSでクエリ作成時複数のフ...
-
最大値を含むレコードの抽出
-
無駄に見える結合の回数を減ら...
-
FROM句にサブクエリ使えませんか
-
Access2013で商品に複数の単価...
-
異なるデータベース間のテーブ...
-
アクセス★非課税、課税の合計金...
-
【SQL】あるマスタのレコードに...
-
店舗での日報での良い例を教え...
-
表の結合の仕方
-
Accessのテーブル構成について
おすすめ情報