• ベストアンサー

Access リレーションシップ データ型について

リレーションシップとクエリ内部結合の違いについて リレーションシップとクエリ内部結合(リレーションシップ)の違いは参照結合性や連鎖更新、連鎖消去設定の差だけでしょうか? データ型のオートナンバーは一度使用した番号はレコードデータを消去しても、二度と使えないのでしょうか? 任意の番号に指定しようすると、オートナンバー型のIDフィールドに連結されているため編集できません となります。

  • sskj
  • お礼率24% (75/303)

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

リレーションシップと結合とは全く異なるものです リレーションシップはテーブルの関係を定義するもの クエリの結合は複数のレコードセット(テーブルと限りませんクエリでもOK)から どのようにデータを引き出してくるかの結びつきを定義します SQLでいえばリレーションシップはテーブル定義のREFERENCES句で定義され 結合はSELECTステートメントのJOIN操作になります オートナンバーはレコードの入力順を表すユニークな(重複の無い) 番号を振ることが目的のものですから抜けが生じてもなんら差し支えの無いものです 連続していないと気持ちが悪く感じるのは人間だけで コンピュータにとっては何の問題もありません どうしても埋めたければ追加クエリで埋めることができます ただしその操作でユニーク性が失われては元も子もありませんけどね

sskj
質問者

補足

定形の物の集まり(社名テーブル)があり、それを必要としている複数のテーブルがそのデータを参照する場合などはリレーションシップし、複数から参照されるが決算期などの個々の企業によって時期が異なるもはクエリの結合をしようする?(テーブル定義のリレーションシップを使用しない・・・) と言う考えでよいのでしょうか? 分かり難くてすみません。 参考:http://up.mugitya.com/img/Lv.1_up43438.jpg.html (時間帯によって見れない場合があります。) 決算期データが三年分ありそれぞれ項目があるのですが 店マスタに入力してもいいのですがその場合、一つのテーブルデータが 膨大になってしまうので分割してあります。 上の画像で決算期はクエリの結合で問題ないですよね?

その他の回答 (8)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.9

また気を悪くされるかも分かりませんが このまま進めるには無理がありますね そちらの基礎知識が無さ過ぎます せめて入門書の1冊ぐらい最後まで読んでから質問されたほうがいいですね 質問ボードだから何でも聞いていいというものではありませんよ どの入門書にも書いてあるようなことは本を買って勉強してください 本を読むに当たっての注意ですが どの本でも最初のほうにテーブルの作り方が書いてあります 初心者はこの辺を軽く流してしまいがちですが 非常に重要な点ですから、十分注意して読んでください

sskj
質問者

補足

総合編の解説書を全て読みました。 どの辺が理解できていないか良く分りませんが、 暇な時にもう一度読み直してみます。 質問ボードだから分らない事を質問したのですが ここで質問した内容を理解している時間がないので諦めます。 >また気を悪くされるかも分かりませんが 全然分ってないようですね。 残念です。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.8

>年後とにデータを蓄積していく場合、年が変わるに連動してフォームの参照位置が変更、 >その年度用のレコードの追加されるような機能はあるのでしょうか? こういうふうに考えずに最近3年分を表示とすれば 年度が変われば自動的に表示される範囲も替わります >前年比を出すために18/11月の売上を参照する クエリですね、それもかなり難しいクエリを組む必要があります >(以下がテーブルの一部です。) >ID番号 決算期 総売上 売上 利益 前年比 利益率 前年比や利益率はテーブルには持ちません 計算で求まるものはクエリ等で求めます

sskj
質問者

補足

>こういうふうに考えずに最近3年分を表示とすれば >年度が変われば自動的に表示される範囲も替わります クエリの抽出条件でしょうか? そのような事が可能なのですか? >クエリですね、それもかなり難しいクエリを組む必要があります どう言う事でしょうか? >前年比や利益率はテーブルには持ちません >計算で求まるものはクエリ等で求めます テーブルに計算したデータを保持しないのですか・・・ 知りませんでした^^;

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.7

>言葉使いに少し気を使われたほうがいいかもしれません。 お気を悪くされたのなら謝ります 何とかしてあげようという気持ちで、提示されたリレーションシップウィンドウを見たとき 正直言ってこれは大変だぞという印象を強く受けたので それが言葉の端はしに出たのでしょう、修行が足りないのかな? でもあれを保存しておいて何ヶ月か先に見てみればあなたにも私の気持ちが分かるのじゃないかな 業者に頼むとしても仕様はあなたが作成しなければなりません 全く知らないよりは知識があったほうが業者との打ち合わせもスムーズに行きますから 勉強は続けてくださいね 業者に頼んだときの費用についてはWEB上にも無料で見積をしてくれるようなところが いくつかあるようですからそういうのを利用するのもいいかも

sskj
質問者

お礼

お気持ちはすごく分かります。 熟練者から見ると初心者の発言や勘違いは「はぁ?」と思われるのはしごく当然の事だと思います。 わざわざお気遣いありがとうございます。

sskj
質問者

補足

先日は書きませんでしたが質問の核心を書かせていただきます。 問題解決の方法は分かったのですが・・・これは聞いた方がいいと思いまして、 新たなスレッドを立てた方が良いのかも知れませんが掲示板を汚すのも失礼かと思いまして・・。 手間をかけて申し訳ないです。 年後とにデータを蓄積していく場合、年が変わるに連動してフォームの参照位置が変更、 その年度用のレコードの追加されるような機能はあるのでしょうか?    総売上 売上 利益 前年比 利益率 17年度1500  530  480 18年度2000  550  500 19年度1000  600  550 年度が替わると・・・    総売上 売上 利益 前年比 利益率 18年度2000  550  500 19年度 前年度の表示が上にあがり、20年を追加 20年度←データの蓄積先を新たに追加されたレコードに変更 ------- (上は入力フォームの一部です。) (以下がテーブルの一部です。) ID番号 決算期 総売上 売上 利益 前年比 利益率 12   17/11  12   18/11 2000  550  500 12   19/11 1000  600  500 12   20/11 1200  610  550 ←新たに追加されたレコードに20年のデータが蓄積される 12   17/12             11   18/12 ・・・・ 11   19/12 (集計の時期は19年1月~12月ではなく、19年7月~20年6月です。) (実際に使用するのは4年分です。それ以降のものは使用していません。) 計算方法について 関数だとおもいますが、例えば今年(19/11)のデータを入力した場合、前年比を出すために18/11月の売上を参照する と言う事は出来ると思うのですがどうでしょか?。 (フォームから入力、新たな年度のレコードにデータが追加される。同じIDの去年の売上データを参照、今年の前年比を出す) 参考:http://up.mugitya.com/img/Lv.1_up43805.jpg 年が開けるごとに自動追加されるような機能が無いと、手動で直さなければならないですよね・・・。 今年、去年、去々年と分割してもいいのですが、一年立つと結局のところ直さないとだめなんですよね。今年の去年は、去年の今年。

  • assault852
  • ベストアンサー率48% (1364/2797)
回答No.6

>外部委託はどれほどかかるのでしょうか 正直に申し上げてピンキリと言わざるを得ません。 業者の規模にもよりますから。 あくまで参考ですが、一人日(一人で一日分の仕事)で単価5万だと安い方です。高いと単価10万くらいします。

sskj
質問者

お礼

ありがとうございます。 参考になりました。

  • assault852
  • ベストアンサー率48% (1364/2797)
回答No.5

回答1の者です。 参考として受け取ってください。 おそらくシステム構築を担当されている方でも、経験のある方でもないように見受けられます。 今の状態ではどれだけの時間を要するか大変気になります。 ここは、外部委託をされた方が宜しいと思いますが、いかがでしょうか。 多少の費用はかかっても、あなた方が費やす時間を他のお仕事にまわすことで全くの損にはならないと思います。

sskj
質問者

補足

同意見です。 私は全くの素人で・・・といいますか今は単なるバイト生です。 一応一月に正社員になる予定です。 Accessなんて使ったこともなく、データベースなんてやってこともなく 高校時代にExcelとWordの基礎をちょっとやった程度の者です。 社長はパソコンに関して殆ど知識がなく、メールとHP観覧方法しか分からないような人です。(ファイルのコピーの仕方すら知りませんでした。) 二日間、16時間を使ってAccessの解説書を読み 同じく二日間で今あるデータベースの構造を理解したところです。 本来の話と少しはずれますが、外部委託はどれほどかかるのでしょうか?

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

>同じデータを参照する複数のデータがある場合、テーブルを分ける。 >これをすることで作業の軽減、データ量の軽減ができる。 >このような理解で制作を行っていたのですが、 >他に参照しないのであればフィールド数が膨大になろうが、 >一つのテーブルにまとめるのが普通なのですね。 テーブルの分割は正規化規則に則って分割します フィールドの数ではないですね リレーショナルデータベースではフィールド数はあまり多くならず むしろテーブル数が多くなるという傾向があります フィールド数が多いというのは正規化が出来ていない可能性大ですね ひとつのテーブルにはひとつの事象あるいはものに関するものだけを入れるようにするのですよ それに前のお返事では >一つのテーブルデータが膨大になってしまうので分割してあります。 こう書かれていたのでレコード数かと思いました レコード数が多い場合には階層構造を導入してたどりやすくする工夫などをしますが その場合でも末端のテーブルのレコード数は減りはしません

sskj
質問者

補足

はじめの質問から二日たっており質問の意図を忘れていました^^; 質問以前に私が重大な勘違い?(考え違い?)をしていたようで・・・。 その内容を記述すると話が分かりにくくなるので避けますが、 問題解決できそうです。 >フィールド数が多いというのは正規化が出来ていない可能性大ですね これがヒントになりました。ありがとうございます。 >一つのテーブルデータが膨大になってしまうので分割してあります。 レコードと勘違いされたようで、私の記述が悪かったです。 データという言葉のとらえ方にも色々ありますからね・・・。 それと、これは質問内容と関係ありませんが言葉使いに少し気を使われたほうがいいかもしれません。 はじめてNO3.の回答を見たとき、率直な感想として私の補足に対して煽ってるのかと思い少しイラッとしました。 しかし、そのような意図が見られないので何も言いませんでしたが、勘違いされる方もいると思いますので。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

突っ込みどころいっぱいのシステムですね これで動いてます? >定形の物の集まり(社名テーブル)があり、 >それを必要としている複数のテーブルがそのデータを参照する場合などはリレーションシップし、 >複数から参照されるが決算期などの個々の企業によって時期が異なるもはクエリの結合をしようする? どこをどう直せばいいのか分からないぐらい見当はずれです >一つのテーブルデータが膨大になってしまうので分割してあります。 テーブルとはこのような理由で分割するものではありません >上の画像で決算期はクエリの結合で問題ないですよね? さあ? あのシステムをここのような掲示板で作りかえるのは無理でしょうね 身近によく知っている人はいないのですか

sskj
質問者

補足

>突っ込みどころいっぱいのシステムですね 企業コードに連結しなければならない所を企業IDに連結していました。 と言いますか今思えば補足事項が足りなすぎて理解できませんね。 >これで動いてます? 制作段階でまだ動かしてはないです。 現在関数や個々に必要な機能も入れていません。 >見当はずれです そうですか・・・ その見当はずれが理解できればいいのですが・・・。 同じデータを参照する複数のデータがある場合、テーブルを分ける。 これをすることで作業の軽減、データ量の軽減ができる。 このような理解で制作を行っていたのですが、他に参照しないのであればフィールド数が膨大になろうが、 一つのテーブルにまとめるのが普通なのですね。 >身近によく知っている人はいないのですか いません。もともとAccessではない独自のデータベースプログラムがあり、 それをAccessで使用する形に移行するために制作しています。 元あったデータベースプログラムも私が作ったものではありませんし、 Accessを作るのも初めてで、さらに言うならばデータベースの知識もありませんでした。 データベースを利用している人にどのような利用のされ方をしているかを聞き、 最近になってそのデータベースプログラムの構造をようやく理解したところです。 ほとんど自己解決に近いですが、回答ありがとうございました。

  • assault852
  • ベストアンサー率48% (1364/2797)
回答No.1

>リレーションシップとクエリ内部結合(リレーションシップ)の違いは参照結合性や連鎖更新、連鎖消去設定の差だけでしょうか そんな感じだと思いますが、私は必ずリレーションシップを作成してから使うので気にしたことがありません。 >データ型のオートナンバーは一度使用した番号はレコードデータを消去しても、二度と使えないのでしょうか 使えないと思います。 任意の番号にしたいなら別のデータ型にしましょう。

関連するQ&A

  • マイクロソフト アクセス リレーションシップの扱い方について

    よろしくお願いします。アクセスで作成したテーブル、例えばAとBには共通の番号があります。それぞれは各テーブル内で番号がいくつか重複しています。この番号により、リレーションシップの関連付け(参照整合性は行わず)を行った後、クエリで抽出したところ、ところどころ同じデータが発生して、膨大な量になってしまいます。参照整合性・フィールドの連鎖更新・レコードの連座削除をチェックして再度リレーションシップを作成しましたが、主テーブルで参照されている固有のインデックスが見つからないとのエラーメッセージが出ます。このテーブル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)まで削除されてしまう ことになる?? ※そもそも例がちょっと悪かったかもしれません。。 何が言いたいかというと、「フィールドの連鎖更新」「レコードの 連鎖削除」は、よーく考えて設定しないと意図しないところまで 更新されたり削除されてしまうのかなと。。なので、設定することに よって、プログラムの作りも変わってきてしまうことになるので しょうか。 理解不足で質問自体もモヤモヤしたものになってしまいましたが、 ご教示のほど、宜しくお願い致します。

  • 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'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことができません。」と出ます。 これを解決する方法はどうするのか、お教えお願いします。 分かりにくい説明ですいません。

  • アクセス2007でオートナンバーを任意の番号から始めるには

    テーブルを開いて、作成のリボン中の「クエリデザイン」→オートナンバーを任意の番号から始めたいテーブルを選んで「追加」→オートナンバー型の当該フィールド(以下、受付番号という。)を選択→デザインのリボン中の「更新」→「レコードの更新」で「100+[受付番号]」と入力→実行 すると 「フィールド「受付番号」は更新できません。フィールドが更新可能ではありません。」とのエラーメッセージが出るのですが、どうしたらオートナンバー型のフィールドである受付番号を101から始められるのでしょうか?

  • アクセスのリレーションシップとクエリ

    私は、アクセスの初心者です。なので、難しいことはよく分からないのですが、アクセスではある1つのフィールドをキーにしてくっつけたりすることができるじゃないですか?そのキーを設定したりするのはリレーションシップでも、クエリでも同じような感じで行うと思うのですが、その2つの違いはクエリはそれをテーブルとして表示できるのに対して、リレーションシップはただ定義するしかできずテーブルとして表示はできないのでしょうか? あと、クエリとかである条件で抽出したテーブルの1つのフィールドのSUMを出したいのですがどういった条件式を書けばいいのでしょうか? なにぶん、初心者ゆえに質問が分かりにくいと思いますが、どうかよろしくお願いします。

  • Access2003 データ型 オートナンバーについて エクセルからテ

    Access2003 データ型 オートナンバーについて エクセルからテーブルをインポートする方法 主キーである、IDと名をつけたフィールドのデータ型は"オートナンバー"でレコード新規入力際、自動で番号がふられていくようにしています。 このテーブルにエクセルのレコードをインポートして追加したいのですが、インポートできません。 ※オートナンバーフィールドが原因と思われます。 どうすれば、エクセルからこのテーブルにレコードをインポートし、追加されたレコードにオートナンバーで番号を割り振る事が出来ますででしょうか? 最も、シンプルな方法をお教え願います。

  • Accessで連続データってできますか?

    Aテーブル(データベース)からBテーブルに必要なレコードを抽出して、Bテーブルで編集しています。 Bテーブルで編集したレコードをCテーブルに移動する際に、連続データのフィールドが必要になったので、テーブルのオートナンバー型フィールドを一つ追加しましたが、うまくいきません。 追加クエリでB→Cに移動させるんですが、キー違反がでてクエリが動きません。 できれば、クエリで連続データを作成して、Cテーブルに追加させたいんですが、クエリで連続データって作れるものなのでしょうか?

  • アクセスのクエリーのことで教えてください

     テーブル1とテーブル2があってクエリーでリレーションシップを組むときに  結合プロパティを「テーブル1の全レコードと、テーブル2の同じ結合フィールドのレコードだけを含める。」にして表を作ろうとしたのですが、テーブル2に レコードが無い場合、テーブル1,2を使って作ったクエリー1で表を作り、 ビルドでクエリー1の項目を貼り付けて、計算させると、テーブル2にレコードが無いと空欄になっているためか、計算がうまく行きません。この問題を解決するにはどのような方法をとればよいですか? ほんとにこまったちゃんになっているので教えてください。 

  • Accessでの新規レコードの追加の方法

    Windows XP上でMicrosoft Access 2000を使用しています。 オートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加したいのですが、クエリやそれを基にしたフォームを介した方法はもちろんのこと、テーブルをデータシートビューで表示した状態でも追加することができません。 例えばレコードセレクタからレコード追加を選んでレコード保存を選んでも追加されません。 このテーブルに別のフィールドを追加してデータを入れるとレコードの追加が可能なのですが、オートナンバー型フィールド1つのみではうまくいきません。 どなたかオートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加する方法を御存知でしたら御教示下さいませ。

  • アクセス:クエリの結合とリレーションシップの違いについて

    アクセス初心者です。 ◆ある請求システムをクエリ上の結合と関数だけでほぼ完成できました。誤作動もなく、正確な結果がでます。いわゆるリレーションシップをしないでの構築です。 ◆構成は、請求対象者の個人IDをキーにして、請求対象日付、基本料、食事料、立替金、その他請求という比較的シンプルななものを結合させて作成しています。クエリ上で関数で日付のところで何月分の請求かを抽出するようなしくみです。 ◆しかるに、完成させてしまってから「リレーションシップ」はしたほうがいいという内容のものをいくつかの資料でたまたま目にするようになりました。 ◆しかるにクエリーでできてしまったシステムで現時点で不具合は全く発生せず、リレーションの必要性が理解できません。 ◆というより、リレーションシップそのものを知らない段階でクエリの結合に取り組んだ者ですから、リレーションシップとは何ぞや?というレベルです。 ◆そこで、今回、クエリの結合とリレーションシップの違いについてアドバイスをいただけないでしょうか? よろしくお願いします。

専門家に質問してみよう