• 締切済み

ACCESSで400以上のフィールドがある場合の作成方法‥

ACCESSでデータベースを作成していますが、入力する項目が計400程度になりそうなことが分かり、 色々調べた結果、テーブルを分けてクエリで結合というのがいいということで、 A(主要情報の入力テーブル。フィールド数200) B(追記項目や詳細なオプション情報。フィールド数200) の2テーブルまで作りました。 また、Bテーブルに全く情報を入れない場合もあります。 そこで質問させていただきたいのですが、それらを結合するにあたり、どのように関連付けすればよいのでしょうか? Bには後でオプション情報を追記することもあるので、Aを入力した時点でBの空テーブルも作成できるようにしたいのです。 ただ、その場合のAとBテーブルの関連付けできる基本情報がないので悩んでおります。 どうぞ宜しくお願い致します。

みんなの回答

  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.7

設計上はもっと細かくテーブルを分けた方がいいような気がします。。。 1つのテーブルで15前後に押さえてテーブル数20~30というのが普通です。 1つのテーブルを巨大にしても項目を探すのが大変であったり、 少しの変更に時間がかかったりと硬直化しがちです。 関連付けは両方のテーブルで同一の項目を用意します。 仮に商品コードというキー項目があったとして、 AとBに商品コードを用意します。

hipongak
質問者

補足

アドバイスありがとうございます。 関連付けるべき項目を作らなければいけないのはこれまでの試行錯誤で分かったのですが、 ないんですね‥関連付けられそうな項目が。。 あるとすれば伝票番号なのですが、それを入力したら主にも副テーブルにも同じ番号が自動で入る方法はなさそうですし、難しいのですかね?やはりある程度は手動でしないと。 ありがとうございます!

noname#60992
noname#60992
回答No.6

皆様が回答されていることをまとめると、 例えばAにオートナンバーの主IDを作った際に、 BにAのIDを入れるフィールドを用意すれば よいだけです。 これはオートナンバーではなく、 長整数型などにしておき、データを入れる際に、 Aテーブルとの整合性を保つように作ればよい わけです。  ただし、クエリのフィールド数も255なので、 ひとつのフォームの連結フィールドによって 指定できるデータ数は255です。 テーブルの設計はシステム上とても大切なこと なので、ある程度理解してから事を進めないと、 もう一回作り直したいと思われることが何度も おきると思われますので、大きなものに取りかかる 前に、しっかりと勉強なさってください。  

hipongak
質問者

お礼

> データを入れる際に、Aテーブルとの整合性を保つように作ればよい わけです。 確かにそうですね。自分でオートナンバーと同じ番号を入れればよい‥。 しかし入れ忘れたり、後で副テーブルのみを見た時の混乱が心配です。 できればAのデータ入力の時点でBにも同じものが入ればと‥。 とにかくアドバイスありがとうございます!

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

どうやらテーブルを分けるという意味をよく理解しておられないみたいですね (1)テーブル内に繰り返しがあるときは別テーブルに分ける 例 質問1、回答1、質問2、回答2、・・・ (2)主キー以外に従属するフィールドは別テーブルに分ける 例 売上ID、売上日、顧客ID、顧客名、顧客電話番号 の顧客名、電話番号 などの正規化規則に則って分けていくのですよ フィールド数が多すぎる場合は(1)の繰り返しのケースが多いですね

hipongak
質問者

お礼

> フィールド数が多すぎる場合は(1)の繰り返しのケースが多いですね まさに仰るとおりです。この形ですね。 この(1)の場合の分け方で混乱しております。これを正規化‥できるのでしょうか‥。 とりあえず私のレベルが低いことだけは分かりました。。

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.4

> 色々調べた結果、テーブルを分けてクエリで結合というのがいいということで、 クエリにしたところで、 1レコードのフィールド数は 255 まで という制限があることはご存知ですよね? ちょっと心配になりました。

hipongak
質問者

補足

知りませんでした‥。ありがとうございます! しかしながら、クエリは恐らく255までは行かない形で作成できると思います。 勉強になりました。

noname#140971
noname#140971
回答No.3

<主表> ID__フィールド_1__フィールド_2 1___F1_1____________F2_1 2___F1_2____________F2_2 <従表> ID__主表_ID__フィールド_1__フィールド_2 1____2__________S_F1_1_________S_F2_2 <主表 クエリ> ID__主表.フィールド_1__主表.フィールド_2__従表.フィールド_1__従表.フィールド_2 1___F1_1___________________F2_1 2___F1_2___________________F2_2___________________S_F1_1________________S_F2_2 SELECT 主表.ID, 主表.フィールド_1, 主表.フィールド_2, 従表.フィールド_1, 従表.フィールド_2 FROM 主表 LEFT JOIN 従表 ON 主表.ID = 従表.主表_ID; ※こういうテーブル設計になるかと思います。 ※問題は、かかる主と従の関係を持つテーブルデータの管理要領が不明なこと。 ※しかし、これはリレーショナル・データベースの基本中の基本。 ※ヘルプの「Access データベースのリレーションシップについて」を一通り読まれたし。

回答No.2

「主キー」のみでDBを更新すればよいのでは? 項目を完全に2分化するのではなく、リレーションの取れる項目を作るのは必須ですよ。

hipongak
質問者

補足

> リレーションの取れる項目を作るのは必須ですよ。 そうなんですよね。分かってはいるのですがどうすればいいのか‥。 Aの主キーをBの主キーにすることなんてできないし、かと言って関連付けられる情報も特にないし‥。 「主キー」のみでDBを更新すると、前述したようにBへの入力が無い時にはBは更新されないし‥。 ともかくアドバイスありがとうございました!

  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

BにもAと同じ主キーのフィールドを用意すればよいのでは?

hipongak
質問者

補足

オートナンバー型のものをBにも設けましたが、Bテーブルに関する入力が何もない場合、Bのオートナンバーが更新されず、Aとの整合性が取れなくなってしまうのですが‥。 オートナンバーが100番の場合、 Aテーブル情報のみに入力→Aは101へ。Bは100のまま、ということになってしまうのです‥。 仰っている意味と違っていたら申し訳ありません。

関連するQ&A

  • 【Access】フィールドにつけた別名を同じクエリで抽出に使いたいです

    【Access】フィールドにつけた別名を同じクエリで抽出に使いたいです。 Access2003を使っています。 困っている状況は以下のようなもです。 ■テーブル1  ・フィールド1 ■クエリ1  ・フィールドA:フィールド1  ・フィールドB:[フィールドA]   【抽出条件】>=10 このような条件で、クエリを実行すると、 「パラメータの入力 フィールドA」というダイアログが立ち上がってしまいます。 上記載のクエリ1でフィールドAの[]は自然についてしまうのではずせません。 今はもう一つクエリを作る事でこの状況はなんとかしましたが、フィールドに別名をつける毎にクエリを作るとクエリの数が多くなってしまうので困っています。 クエリでフィールドに別名をつけた場合は、そのクエリ上でその別名を使って抽出をかけることはできないのでしょうか? よろしくお願いします。

  • Accessのクエリで2つのフィールドが同条件の場合に結合したい

    Accessのクエリで2つのフィールドが同条件の場合に結合したい 以下のようなテーブルが2つあって、その2つのフィールドが一致する場合につなげるクエリを作りたいと考えています。 【テーブル名:勤怠データ】 氏名│日付│出勤時刻 ────────────────── 鈴木│2/1│8:01 鈴木│2/2│8:02 鈴木│2/3│8:03 高橋│2/1│9:01 高橋│2/2│9:02 高橋│2/3│9:03 【テーブル名:シフト】 氏名│日付│シフト ────────────────── 鈴木│2/1│A 鈴木│2/2│B 鈴木│2/3│A 高橋│2/1│B 高橋│2/2│C 高橋│2/3│B 【クエリ:シフト勤怠データ】←作りたいもの 氏名│日付│シフト│出勤時刻 ────────────────── 鈴木│2/1│A│8:01 鈴木│2/2│B│8:02 鈴木│2/3│A│8:03 高橋│2/1│B│9:01 高橋│2/2│C│9:02 高橋│2/3│B│9:03 氏名と日付のフィールドが一致するときに結合させたいのですが、 デザイン画面でつなげればいいのかわかりません。 ご回答よろしくお願い致します。

  • Access2002 255以上のフィールドをレポートで表示させたい

    Access2002を使っています。Accessは初心者です。 255以上あるフィールドをレポートでA3用紙(横)1枚におさめたいと思っています。 構造は,下の通りです。 テーブル1,テーブル2,テーブル3,テーブル4 クエリ1(テーブル1~3をもとに)・・・フィールドが200あります クエリ2(テーブル4をもとに)・・・・・フィールドが150あります 初心者判断で,クエリ1とクエリ2をもとに350あるフィールドを1枚のレポートにおさめるには,A3用紙の右側の部分にサブレポートを作成すると解決できるのではと考え,マニュアルを読んで,レポート1にサブレポートを追加する作業を進めました。しかし,「アプリケーション定義またはオブジェクト定義のエラーです」というメッセージが表示され作成できませんでした。 サブレポートの概念がよくわからないのですが,サブレポートにこだわらず,350もあるフィールドをA3用紙(横)1枚にレポートで出力できる最も簡単な方法があったら教えて下さい。何分,Accessは初心者なので,よろしくご教示下さい。よろしくお願いします。

  • アクセスのクエリーについて

    テーブルが2つあってクエリーを作成したいのですが、 <テーブル1> 氏名  項目1  項目2  項目3 山田  A    B    C というテーブルが1つあって、それぞれの項目1~3のフィールド のA~Cに対して <テーブル2> 項目コード   項目名 A       あいうえお B       かきくけこ C       さしすせそ というテーブルとリンクさせ 氏名  項目1     項目2     項目3 山田  あいうえお   かきくけこ   さしすせそ とあらわれるように作成したいのですが、それぞれ項目1~3に対して リンクさせたいのが、「テーブル2」を使用します。 この場合今は同じ内容で「テーブル2」を3つ作成してそれぞれでリンク させていますが、数が多くなりすぎると「リンクが複雑すぎます」とはねられます。「テーブル2」1つでリンクさせる方法はありますか?

  • Access DBの作成について

    初歩的な質問になってしまって申し訳ないのですが、テーブルを作成するさい正規化をするかと思います。 通常のDBの作成を考えた場合、商品名のテーブルを別に作りそれを利用する形になるかと思うのですが、 商品はすでに決まっており増えることが今後無く、数品目に固定されております。 こういった場合、フィールド項目を商品名にするのは不味いのでしょうか? 利点としては、項目がフィールドとして固定されていると、 原稿どおりに入力フォームを作成することが可能になるので入力が楽になりますし、入力ミスが減るかと思います。 しかし、欠点として、ユニオンクエリを作成しておかなければクエリを作成する際にクエリ数が多くなると考えられます。 (同じ抽出条件を指定する場合など) 最終的には円グラフ、棒グラフを各商品ごとに作成したり、データごとの一つの表(売上伝票のようなもの)を作成するのですが、 最終結果を考えると、エクセル、ワードを使用しなければなりません。 本のような印刷物にすることを考えているので、操作面から考えてエクセルで最終的なものを作成しようと考えています。 仮にエクセルのグラフ機能、ワードの差込印刷をしようするとして、 そうした場合、商品項目事にフィールドを並び替えなくてはいけなくなります。 クロス集計クエリをすれば可能かと思いますが、処理に若干時間がかかることが考えられます。 これらのことから考えて、商品項目をフィールドごとに作成しようかと考えているのですが、 何か問題になるようなことはあるでしょうか?

  • ACCESS クエリでの抽出の方法について

    毎度お世話になっております。 ACCESS2003、SQLSERVER2000を使用しています。 以下のテーブルがあります。 テーブル1 フィールド1   フィールド2   A        10   A        20   A        -10   B         1   B         2   B         3 フィールド1をグループ化し、 フィールド2に0より小さい数がある場合はNG、 ない場合はOKと表示したいのです。 希望する結果 フィールド1   フィールド2   A         NG   B         OK 私が考えた方法は、 1.クエリ1(フィールド2が0以下のフィールド1を抽出する)を作成 2.テーブル1とクエリ1をLEFT JOINし、IS NULL ならOK、そうでないならNGを表示 としました。希望した結果は得られましたが、 もっとスマートな方法(一つのクエリでできるような方法)、 または別解をご教授ください。 よろしくお願いします。

  • Access クエリの最大項目数

    教えてください。 開発環境はAccess97です。 複数テーブルを互いに結合し、一つの選択クエリー[A]を 作成した後、フォーム[B]に関連付けて[B]上のテキスト ボックスで[A]のデータを表示したいと思います。 (一つのテキストボックスは一つの項目を表示する) 選択クエリーのフィールド数は最大128個までしか 設定できないと思うのですが、 フォーム[B]に一度に300個程度のデータを表示するには どうすればよいのでしょうか? サブフォームを使用せずにこれを実現することは可能でしょうか?

  • ACCESSのフィールドの更新

    マイクロソフトACCESSフォームAでテーブルBのCフィールドの更新は出来るのですが、フォームDから連結でテーブルBのCフィールドの更新が出来ません。(同じようにして2個作成したシステムのうち1個は出来たのですが、もう1個がどうしても出来ません:テーブル,クエリ,フサブフォーム,フォームの違いを捜しているのですが見当たりません。)

  • ACCESSの結合

    よろしくお願いします。 ACCESS2000で、AテーブルのA'フィールドとBテーブルのB’フィールドを結合させ、同一でないものを表示させる(クエリーで)方法を教えてください。 よろしく、お願いいたします。

  • アクセスのテキスト型フィールドサイズ指定方法

    アクセス2003を使用しています。 選択クエリAのレコードを追加クエリBを使用してテーブルCに追加しているのですが、 テーブルCのフィールドサイズを「半角40文字、全角20文字」に制限したいです。 フォームを使ってテーブルに入力する場合はテーブルの入力規則に式を入れればできる ということは調べてわかったのですが、追加クエリを利用する場合どのようにしたらよいかわかりません。 お分かりの方、お教えいただければ幸いです。 よろしくお願いいたします。