Access2003テーブルのリレーションシップについてアドバイスをお願いします

このQ&Aのポイント
  • Access2003でテーブルのリレーションシップを作成する方法についてアドバイスをお願いします。質問者はAccess操作を始めて2日ほどの経験しかなく、識別コードA、B、Cを使ってレコードを管理したいと考えています。
  • 質問者はT_Aテーブル、T_Bテーブル、T_Cテーブルの3つのテーブルを作成しましたが、T_AテーブルからT_Bテーブルへのリレーションシップは正しく作成できますが、T_BテーブルからT_Cテーブルへのリレーションシップがうまくいきません。
  • 参考書を手に試行錯誤しているものの、解決策が見つからず困っている状況です。質問者は正しい方法や間違いを知りたいとしています。
回答を見る
  • ベストアンサー

Access2003 テーブルのリレーションシップについてアドバイスをお願いします。

私はAccess操作を始めて2日ほどの経験しかありません。 意味不明な部分があるかとは思いますが、やりたい事に対するリレーションシップについて識者の方のアドバイスをお願いします。 長文です。 ★やりたい事 「識別コードA」と「識別コードB」と「識別コードC」の3つのコードを利用してレコードを管理したい。 例) SIKIBETU_A1 →SIKIBETU_B1    →SCNO01    →SCNO02    →SCNO03 →SIKIBETU_B2    →SCNO01 →SIKIBETU_B3    →SCNO01    →SCNO02    →SCNO03    →SCNO04    →SCNO05 SIKIBETU_A2 SIKIBETU_A3 . . . ★条件 ・「識別コードA」のしたには「識別コードB」がぶら下がっている。   ※識別コードBは重複することの無いユニークなコード ・「識別コードB」にぶら下がっている「識別コードC」はオートナンバーの連番である。 ・「識別コードA」「識別コードB」「識別コードC」の3つでユニークである。  ※下記のように、識別コードAが異なれば識別コードB,Cが同じコードでも問題なし   「001」「001」「001」   「002」「001」「001」 ★作ってみたテーブル <T_Aテーブル>  CODE-A  ← キーレコード  DataA1  DataA2 <T_Bテーブル>  CODE-A  ← キーレコード  CODE-B  ← キーレコード  DataB1  DataB2 <T_Cテーブル>  CODE-A  ← キーレコード  CODE-B  ← キーレコード  CODE-C  ← キーレコード  DataC1  DataC2  DataC3 ★やろうとしたリレーションシップ  <T_Aテーブル>  <T_Bテーブル>   <T_Cテーブル>  CODE-A -------> CODE-A                CODE-B -------> CODE-B                              CODE-C このリレーションシップを行おうとした結果、T_AテーブルからT_BテーブルへのCODE-Aリレーションは正しく出来ますが、T_BテーブルからT_Cテーブルへリレーションしようとすると 「主テーブルで参照されているフィールド用の固有インデックスが見つかりません。」 と画面に表示されて、リレーションシップ出来ません。 参考書片手に試行錯誤しておりますが、買って来た入門書にはこのような仕様のサンプルなど無く困っています。 やり方が正しいのか、何が間違っているのかも手探りな状況で申し訳ないのですが、識者の方のアドバイスをお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

例示のデータで、 > ※下記のように、識別コードAが異なれば識別コードB,Cが同じコードでも問題なし >  「001」「001」「001」 >  「002」「001」「001」 は問題あるでしょ? 銀行コードと本支店コードを例えにすると、 「001」(本店)は銀行名が異なれば存在しうる、は正しいが テーブルCにとっては本支店コードしか見ていない(銀行名を知らないまま)から「本店って言われても複数あるじゃん。どこの本店よ?」になっちゃう。 なので  <T_Aテーブル>  <T_Bテーブル>   <T_Cテーブル>  CODE-A -------> CODE-A -------> CODE-A                CODE-B -------> CODE-B                              CODE-C では? それと事前に T_AテーブルのCODE-A T_BテーブルのCODE-AとCODE-B T_CテーブルのCODE-AとCODE-BとCODE-C は、それぞれ「主キー」の設定をしておくべきでしょうね。

kamuycikap
質問者

お礼

早速の回答ありがとうございます。  <T_Aテーブル>  <T_Bテーブル>   <T_Cテーブル>  CODE-A -------> CODE-A -------> CODE-A                CODE-B -------> CODE-B                              CODE-C のリレーションで目的の状態になりました。 確かに・・・・ >テーブルCにとっては本支店コードしか見ていない(銀行名を知らないまま)から「本店って言われても複数あるじゃん。どこの本店よ?」になっちゃう。 そのとおりです。 本店までキー設定するべきです。 主キーの設定は行っていたのですが、CODE-AとCODE-Bの二つを選択してドラッグする事でいけました。 回答ありがとうございました。

関連するQ&A

  • テーブル結合について

    テーブルの結合についてお聞きしたいことがあります。 カラム「KEY」を結合条件に テーブルA、B、Cを結合して【取りたい結果】のようなデータを取りたいと思っています。 しかし、テーブルAにBとCをLEFT JOINを結合した所、 【取得された結果】のデータが取得されました。 どのような結合をしたら期待通りの結果が得られるのでしょうか? 回答宜しくお願いします。 【取得された結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 B-1 C-2 A-1 B-1 C-3 2 A-2 3 A-3 【取りたい結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 C-2 A-1 C-3 2 A-2 3 A-3 【テーブルA】 key dataA --------------------- 1 A-1 2 A-2 3 A-3 【テーブルB】 key dataB --------------------- 1 B-1 【テーブルC】 key dataC --------------------- 1 C-1 1 C-2 1 C-3

  • accessのユニオンクエリについて教えてください

    accessのユニオンクエリで以下の(1)選択クエリを表(2)のように並び替えを行いたいのですが、 記述がわかりません。内容的にはコントロール名に表示されるデータを項目として使用し、また項目に対応する、文字データをひもづけて表(2)のように並び替えをしたいのです。 また、文字データはたくさん入力され1500文字程度になる場合があります。 どなたか、お分かりになる方がいらっしゃいましたら教えていただけませんか? 宜しくお願い申し上げます。 (1)選択クエリ ID 氏名   年齢  性別 コントロール名 文字データ 1 Aさん 10歳  男   項目1 文字dataA1 2 Bさん 20歳  女   項目1 文字dataB1 3 Cさん 30歳  男   項目1 文字dataC1 1 Aさん 10歳 男   項目2 文字dataA2 1 Aさん 10歳 男  項目3 文字dataA3 2 Bさん 20歳  女   項目2 文字dataB2 3 Cさん 30歳 男   項目2 文字dataC2 1 Aさん 10歳  男   項目4 文字dataA4 1 Aさん 10歳  男   項目5 文字dataA5 2 Bさん 20歳  女   項目3 文字dataB3 3 Cさん 30歳  男   項目3 文字dataC3 3 Cさん 30歳  男   項目4 文字dataC4 2 Bさん 20歳  女   項目4 文字dataB4 2 Bさん 20歳  女   項目5 文字dataB5 表(2) ID 氏名 年齢 性別 項目1 項目2 項目3 項目4 項目5 1 Aさん 10歳 男 文字dataA1 文字dataA2 文字dataA3 文字dataA4 文字dataA5 2 Bさん 20歳 女 文字dataB1 文字dataB2 文字dataB3 文字dataB4 文字dataB5 3 Cさん 30歳 男 文字dataC1 文字dataC2 文字dataC3 文字dataC4

  • ACCESSのリレーションシップについての疑問

    ACCESS初心者です。 ACCESS2002 OSはWindowsXP SP2です。 基本が分かっていないせいなのかもしれませんが、私には理解できない現象が起こっています。対応方法があれば教えていただくようお願いします。 ACCESSでデータ更新のフォームを作っています。 そのフォームは2・3日前に作ったもので、たとえばテーブルAを更新するためにマスターテーブルのBとCを参照しているような形になっています。このリレーションはクエリで指定してあります。 このフォームではクエリに対して更新する形になっています。 このフォームのデザインを編集しているときに「ツール」の「リレーションシップ」をクリックすると画面にはBとCだけが表示されます。 なぜメインのテーブルのAが表示されないのか?と思いながら、しょうがないので右クリックして「すべてのリレーションシップの表示」を押すと、驚いたことにDのテーブルが表示されました。 実はこのDというテーブルは以前に作ったAを作る前に使っていたAによく似たテーブルなのです。 当然、以前にはDとB・Cのリレーションも作っていましたが、今編集中のフォームではDは関係ありません。 リレーションシップの画面は不必要に広大なもので横に3スクロール分と縦にも5スクロール分くらいあって、その右下の端っこにD・B・Cのリレーションだけが表示されていて、それ以外はただただスペースがあるだけです。 なぜ肝心のA・B・Cのリレーションが表示されずD・B・Cのリレーションが表示されるのでしょう? 試しに今では不要であるDのテーブルを削除してみましたがリレーションシップではさすがにDは消えたもののB・Cが表示されるだけで、Aは出てきません。 そもそもACCESSにおけるリレーションシップというのは個々のフォーム内で定義されるものではないのですね?(根本的なことで申し訳ないのですが、買った2冊の本を見てもインターネットで探してもその辺の説明が見当たりませんでした) SQLであれば個々のSQL文で都度JOIN等の記述をすると思うのですが、ACCESSではデータベース全体の共通事項(?)としての定義になるのでしょうか? ACCESSは初心者で見当はずれな質問かもしれませんがどうかよろしくお願いします。

  • Accessリレーションシップ

    Accessにて、 テーブルA(個人情報) ●個人コード ●名前 ●住所  ・  ・ テーブルB(個人ごとの数量管理) ●個人コード ●数量 上記のようなテーブルがあるとします。 これは、1:1のリレーションシップにしたいのですが、 クエリAを作成して ●個人コード(テーブルB) ●名前(テーブルA) ●数量(テーブルB) 個人コードを入力すると、名前を参照するというふうに したいのですが、1:1のリレーションシップだと個人コードの入力時に 参照はできないのでしょうか? 一旦閉じて、開くと参照していますが・・・。 良いご意見がありましたら、よろしくお願いします。

  • symfony 1_4 リレーションシップ

    初めて、 symfony 1_4 の開発をしています。 新規ではなく、追加機能を持たせる感じですが、なんせ、初なので、 あたふたしています。教えてもらえる人も居ず、インターネットでの 情報と既存PGを参考にしながら、やっています。 標記の件で質問ですが、 AテーブルとA'テーブルは、schema.ymlにて、リレーションしています。 Bテーブル、Cテーブル、Dテーブルは、単独のテーブルで、下記のよう にリレーションを張りたいと思っています。 Aテーブル---A'テ―ブル---Bテーブル----Cテーブル                         |--Dテーブル  AテーブルとA'テーブルのリレーションは、 $this->createQuery('Aテーブル a')->leftJoin(a.A'テーブル a') で簡単にリレーションを張っているのは、わかりますが、B、C、Dテーブル をリレーションする方法がわかりません、どなたかご教授お願いします。

  • Accessのリレーションシップ

    Access初心者です。 Access2010でデータベースを作っていて、行き詰ってしまいました。 テーブル1にフィールドABCDEFがあって、Aに主キーが付いています。(Aはテキスト型でフィールドサイズ10です。) テーブル2にはフィールドAGHがあり、Aに主キーが付いてます。(Aはテーブル1と同じです。) テーブル3にも同じくフィールドAIJがあり、Aに主キーが付いています。(Aはテーブル1と同じです。) テーブル1のフィールドAを主テーブルとし、テーブル2・3のフィールドAにリレーションを組んでいます。 この時のリレーションシップで参照整合性と連鎖更新と連鎖削除にチェックを入れ、種類が一対一になりました。 その後、テーブル1でレコードを追加しようとすると、「テーブル'2'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことができません。」と出ます。 これを解決する方法はどうするのか、お教えお願いします。 分かりにくい説明ですいません。

  • Access2013のリレーションシップについて

    Access2013を勉強しています。 リレーションシップについて参考書(2冊)を見ていて疑問を持ったのですが、 二つのテーブルでリレーションシップを定義したいそれぞれのフィールド名は同じ名前だとうまくいかないのでしょうか?参考書では、値は同じ(例えば1、2、3・・・)は同じなのにフィールド名は微妙に違う名前をつけているのですが(例えばテーブルAでは顧客IDでテーブルBでは取引先ID)・・・ 宜しくお願いします。

  • リレーションシップ

    テーブルAとテーブルBでリレーションシップを組んでいて 紐づいてる値をどちらとも同じ変更したいのですが、 テーブルAの値を変更しようとすると、 テーブル’テーブルB’にリレーションシップが設定されたレコードが必要なので、 レコードの追加や変更を行うことはできません。 と表示され、 だったら先に、テーブルBの値を変更しようとすると、 テーブル’テーブルA’にリレーションシップが設定されたレコードが必要なので、 レコードの追加や変更を行うことはできません。 となってしまいます。 どちらも同じ値に変更したいのですが、どうすればよろしいでしょうか? テーブルAとテーブルBは一対多で参照整合性にチェックがついて紐づいています。

  • Accessリレーションシップについて

    お世話になります。 Access2010 普段はクエリにて、いくつかのテーブルやクエリを紐づけているのですが リレーションシップの設定は今までやったことがありません。 ネットで調べて、 ・「参照整合性」にチェックを入れることにより、1対多の多側で1側に存在  しないIDで登録しようとするとエラーになる。   →間違ったデータが入力されるのを防ぐ。 ・多側でリレーションシップが設定されているフィールドに値を入力しない  ことは可能。但し、当該フィールドの「値要求」プロパティを"はい"に  した場合は、入力しないとエラーになる。 ・「フィールドの連鎖更新」にチェックを入れると、1側で変更したものが  多側でも自動的に変更される。 ・「レコードの連鎖削除」にチェックを入れると、1側で削除した場合、  多側で該当するデータをもつレコードが自動的に削除される。 上記については実際に試してみて動きを確認しました。 ※上記の認識違いや、もっと大事なことがあればご指摘、ご教示頂けると  幸いです。 今までは、こっちのテーブルで削除したらこっちのテーブルでも削除 みたいなことをやってたので、便利だとは思うのですが。。 以下のテーブルでリレーションシップの設定を行ったとします。 売上テーブル  ID 商品 担当者コード  1 AAAAA  3  2 BBBBB  1  3 AAAAA  1  4 CCCCC  2  5 CCCCC  3 担当者テーブル 担当者コード 担当者名  1     担当者A  2     担当者B  3     担当者C 売上テーブルの担当者コードと、担当者テーブルの 担当者コードでリレーションの設定を行い、「参照整合性」及び 「レコードの連鎖削除」にチェックを入れたとします。 例えばフォーム上にリストボックスを設置し ID 商品 担当者名 を表示し、リストボックス上で選択されたレコードを、削除ボタンを 押したら、そのレコードが削除されるプログラムを作成します。 ※選択されたレコードのIDを取得し削除クエリで削除。 リストボックスでID:5のレコードを選択し、削除ボタンを押した場合 売上テーブルのID:5のレコードを削除しても、担当者テーブルから 担当者コード:3のレコードは削除されない・・という認識でよろしい でしょうか。 ※要するに、1対多の多側で削除されても1側には影響無し。 同様にリストボックスでID:5のレコードを選択し、削除ボタンを押したときに 担当者コード:3を取得し、まずは担当者テーブルで担当者コード:3の レコードを削除すると、併せて売上テーブルのID:1及びID:5が削除 される。 要するに、上記のケースで「レコードの連鎖削除」の設定を行うと 本来削除すべきID:5以外のレコード(ID:1)まで削除されてしまう ことになる?? ※そもそも例がちょっと悪かったかもしれません。。 何が言いたいかというと、「フィールドの連鎖更新」「レコードの 連鎖削除」は、よーく考えて設定しないと意図しないところまで 更新されたり削除されてしまうのかなと。。なので、設定することに よって、プログラムの作りも変わってきてしまうことになるので しょうか。 理解不足で質問自体もモヤモヤしたものになってしまいましたが、 ご教示のほど、宜しくお願い致します。

  • アクセス テーブル、クエリーについて

     アクセスでソフト作成中です。そこで教えてほしいことがあります。 たとえば下記のように2つのテーブルがあります。 テーブル1   テーブル2   フィールドA    フィールドB  a1       10  b1       20  c1       30          テーブル1の数値は固定します。そこで下記のようなクエリーを作成したいのです。 クエリー1 フィールドA フィールドB a1 10 b1 20 c1 30 テーブル2に数字を入れていくと テーブル1   テーブル2   フィールドA    フィールドB  a1       10  b1       20  c1       30           40 クエリー1 フィールドA フィールドB a1 40 b1 20 c1 30 このように数字が上書きされていくようなクエリーは作成できないでしょうか。(あくまでテーブル1の数値は固定、フィールドAとフィールドBにリレーションシップは設定されていない。) よろしくおねがいします。

専門家に質問してみよう