Access初心者です。
Access2010の学習をしています。
主キーと外部キーで関連付けられた
フィールドをクエリで抽出する場合、
デザイングリッドにドラッグするフィールドは、
どちらのフィールドを選べばよいのでしょうか?
----
「T担当者マスタ」と「T得意先マスタ」をもとに
「Q得意先マスタ」を作成したい場合です・・・
「T担当者マスタ」のフィールド
担当者コード(主キー)
担当者名
「T得意先マスタ」のフィールド
得意先コード(主キー)
得意先名
フリガナ
〒
住所
TEL
担当者コード(外部キー)
担当者名
デザイングリッドにドラッグするフィールド
得意先コード
得意先名
フリガナ
〒
住所
TEL
担当者コード(※主キーのフィールドを選ぶのは不正解ですか?)
担当者名
-----
担当者コードは元となるテーブルの両方に存在する
わけですが、どんな理由でどちらを選ぶのか
理解できません。
テキストの問題なのに情けないです・・
ご教授ください。
No.2
- 回答日時:
まずは、テーブル設計が少し間違っいます(正規化されていない)。
「T担当者マスタ」に「担当者名」があり、「T得意先マスタ」にも「担当者名」がありますが、
「T得意先マスタ」の「担当者名」は不要ですので削除してください。
データベースではリンクするフィールド以外は重複する値が複数箇所に存在してはいけません。
さて、本題ですが、
どちら表示させていいいといえばいいのですが、
通常は、T得意先マスタ を表示させます。
理由としては、両方表示させて、それぞれのフィールドを更新してみれば分かりますが、
T担当者マスタ の 担当者コード を更新しようとしても更新できません。
(整合性矛盾を防止のためにロックがかかる)
T得意先マスタ の 担当者コード の方は更新できる。コードを更新するとそれにともなって担当者名も自動で変わります。
通常はこの方が好ましいと思います。
このように外部キーを表示させて、それに対応するマスターのデータを表示させるものをオートルックアップクエリと言って、よく使われるものです。
オート ルックアップ クエリを作成するには
http://support.microsoft.com/kb/879978/ja
ご回答ありがとうございます。
>データベースではリンクするフィールド以外は重複する値が複数箇所に存在してはいけません。
言葉足らずですみません。
「T担当者マスタ」の「担当者名」と
「T得意先マスタ」の「担当者名」をリレーションシップでリンクしています。
>(整合性矛盾を防止のためにロックがかかる)
実際にフィールドの更新をして、確認しました。
なるほどです。納得のできる理解です。
学習をすすめてみます。
No.3
- 回答日時:
蛇足ですが、
得意先に対する担当者は永続的に同じというわけではないので
通常は得意先ごとの担当=期間×担当者で組みます。
そうでないと来月から担当が変わる・・・などのデータが設定できず
担当が変わる瞬間にメンテをしないというあわただしい仕組みになります。
(また過去の担当の履歴もあればあったで便利でしょう)
もちろん得意先テーブルの各データに現行担当の担当者コードを埋め込んでおくと
検索性が向上するので有効です。
その場合は、期間×担当→現行担当を更新する処理がデイリーのバッチで行うことになります
この回答への補足
ご回答ありがとうございます!
>通常は得意先ごとの担当=期間×担当者で組みます。
設定としては、「T得意先マスタ」に、期間フィールドを設ければ
良いのでしょうか?
No.4ベストアンサー
- 回答日時:
> 言葉足らずですみません。
> 「T担当者マスタ」の「担当者名」と
> 「T得意先マスタ」の「担当者名」をリレーションシップでリンクしています。
それは間違いですね。
それでは、参照整合性に「チェック」を入れることができないはずです。
主キーと外部キーをリンクさせる必要がありますので、
担当者コード 同士でリンクさせないとだめです。
間違えていました!
「担当者コード」と「担当者名」を
整理できていませんでした。
ご回答いただいて、間違えていることを理解できました!
・主キーと外部キーをリンク
・担当者名を複数個所に設けない リンクされていない重複するフィールドだから
まともな質問になっていなかったのに
親切に教えていただき、本当にありがとうございます!!
No.5
- 回答日時:
> >通常は得意先ごとの担当=期間×担当者で組みます。
>
> 設定としては、「T得意先マスタ」に、期間フィールドを設ければ
> 良いのでしょうか?
担当の履歴を残したいとなると、
担当者 と 得意先 の関係は、多対多の関係になりますので、中間テーブルが必要になります。
T得意先マスタとT担当者マスタとは別に下記のテーブルを作成してください。
T担当履歴
---------
得意先コード (外部キー)
担当者コード (外部キー)
開始日
終了日
これとは別に、
No.3の回答者さんも言われてますが、現行担当者 のフィールドを、T得意先マスタ に置いておくのは有効な方法だと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL文で、合計が0のレコードを...
-
表の結合の仕方
-
アクセスにて月末日付を取得し...
-
FROM句にサブクエリ使えませんか
-
for whichの使い方
-
差し込み後、元データを変更し...
-
pythonにてseleniumを使うも、...
-
マイクラPC版のコマンドで効率...
-
グループ毎の最大値を持つデー...
-
次の並び替え問題を教えてくだ...
-
Exel VBA 別ブックから該当デ...
-
処理件数を非表示にしたい
-
エクセルで最後の文字だけ置き...
-
chatgptでつくってもらったコー...
-
特定の文字列で列を区切るには?
-
英語ができる方、問題をお願い...
-
ExcelのVBAコードについて教え...
-
パイソンプログラム
-
広告ブロッカーのアドカードと...
-
外部参照してるキーを主キーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
Accessの実行時エラーについて
-
ACCESS ツリービューの作り方
-
日付により変動する「単価」を...
-
異なるデータベース間のテーブ...
-
前月の取得について
-
アクセス フィールド名に変数...
-
ACCESSでクエリ作成時複数のフ...
-
DBが複雑すぎる
-
ACCESS 商品毎の最新の単価を設...
-
最大値を含むレコードの抽出
-
Access2013で商品に複数の単価...
-
アクセスにて月末日付を取得し...
-
ACCESSでDLookUpすると、不正な...
-
Excel VBA ADODB
-
フィールドの数値を四捨五入の...
-
Excelのユーザーフォームで別の...
-
店舗での日報での良い例を教え...
-
SQLserverでのUPDATE文について
おすすめ情報