• ベストアンサー

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

CHRONOS_0の回答

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

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

sskj
質問者

補足

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

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