• ベストアンサー

Access DBの作成について

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

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

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

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

>こういった場合、フィールド項目を商品名にするのは不味いのでしょうか? フィールド名を商品名にするということ? >しかし、欠点として、ユニオンクエリを作成しておかなければクエリを作成する際にクエリ数>が多くなると考えられます。 >(同じ抽出条件を指定する場合など) 難しい文章だけどユニオンクエリで正規化された形のものに変形してから 抽出を行うという意味ですか? だったらこれは想定される問題点のひとつに過ぎません 同様の問題が次々と出てくるでしょうね(例えば集計)

sskj
質問者

補足

>フィールド名を商品名にするということ? 仰るとおりです。 商品テーブル 商品ID_商品名 1_○○ というテーブルを作るのではなくフィールドを商品名にするということです。 >難しい文章だけどユニオンクエリで正規化された形のものに変形してから抽出を行うという意味ですか? そのとおりです。 テーブルではなく正規化されたユニオンクエリを集計する相手として利用すればよさそうですが、 スムーズに作成することを考えるとやめたほうがよさそうですね。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

難しい表現で何を聞いているのかわかり難い。 ーー システムを通して (1)商品名の漢字カナで入力するか (2)商品コードで入力するか(商品名の漢字カナをシステムで導出するのは難しくない) のどちらを採るべきかの問題を、聞いているのでは無いですか。 ーー 悩ましい点だがやはり商品コードをメインとして、システムを作るべきでは。 昔は商品名ーコードの対応コードブックを人が引いて、伝票にコードを書き込む とか コード数字入りの商品名のゴム判を伝票に押す とかなどしたものだ。 今後はバーコード利用などに進むべきなのかなと思う。 伝票入力時には、カナ2ー3文字で候補商品名が出て、選択すると コード+商品名がシステムに入力されるようなインプットシステムを 作るべきと思う。そちらに力を入れるべきで、毎回商品名を入力するのは煩に耐えないでしょう。 処理キーと言う点からもコードでしょう。 毎回コード=商品名のファイルをクエリでキッカケ無いといけないが 入力が楽かどうかがシステムを大きく左右します。

sskj
質問者

補足

商品コードを使うか、商品名を直接利用するかという問題ではなく フィールドを商品名とするという考え方です。 要するにフィールドを商品名にしてその中に数値を入力するということです。考え方としてはエクセル方式です。 テーブル トマトフィールド_ナスフィールド_・・・ 10%←これが比率や価格 15% ・ ・ ・ なぜこのような考え方をしたかといいますと、質問内容に書いたとおりです。 (入力フォームやワード、エクセルを使う関係上) 現在作成中のDBは集計する内容についてはすでに決まっているので それらを検証していけば、問題があるかないか分かりそうですが、無難に作るためにはやめたほうがよさそうですね。

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

難解な文章ですがやっと理解。 結論から言うと、やはり分けたほうがいいと思います。 品目で並べたいならクロス集計機能を使ったほうが便利かも 逆に品目別月別集計なども使えますから。

sskj
質問者

補足

>クロス集計クエリをすれば可能かと思いますが、処理に若干時間がかかることが考えられます。 質問文に書いたとおりなのですが、クロス集計クエリを利用して並びを変え、必要項目をまとめたクエリを作成すると ファイルを開くのに10分程度かかってしまうのが難点ですね。 このことから集計などに関係なくDBとして問題が出ないような項目、備考欄などはわざと 備考1、備考2、備考3とフィールドを分けています。

関連するQ&A

  • Access フォームから複数テーブルの入力は?

    フィールドが300ぐらいあるので項目ごとにテーブルで分けています。 1つにまとめるクエリを作成して、そのクエリを元にフォームを作成しました。 テーブルはフィールド名:品番で1対1のリレーションを組んでいます。 テーブル:商品カラー  ・フィールド:品番  ・フィールド:カラー テーブル:商品サイズ  フィールド:品番  フィールド:サイズ クエリのフィールド  フィールド名:品番 (商品カラーのフィールド:品番を指定)  フィールド名:カラー (商品カラーのフィールド:カラーを指定)  フィールド名:サイズ (商品サイズのフィールド:サイズを指定) この場合、品番をフォームから入力すると商品カラーの品番のみ入力されます。 商品カラーと商品サイズの品番を同時にファームから入力は出来ないでしょうか? 現在は10テーブルありますが1つのテーブルにまとめたほうがいのでしょうか?

  • アクセス作成について

     アクセスについて質問します。  フォームで入力する場合で、例えばテーブルのレコードを100までとし、101を超えた場合またレコード1にデータを入力することは可能でしょうか。 テーブル フィールド1 フィールド2  1       6  2       8   .      .   .      . 100       55 フィールド1は固定し、フィールド2にデータを入力していき101番目にデータを入力する時はまた1行目の6を上書きしてデータを更新していくようなことは可能でしょうか。(もちろんフィールド1、フィールド2を別テーブルとしクエリーを活用することでもok) アクセス初心者です。よろしくおねがいします。

  • アクセスについて

    アクセス初心者です。 アクセスで毎月入ってくる商品に商品番号を付与しようと思っています。 商品リストテーブルには   フィールド1→商品名   フィールド2→商品番号 商品一覧テーブル    フィールド1→商品名(毎月100件程入る) この2つのテーブルから 商品番号付与クエリーを作成しました。 (フィールド1同士を繋ぎ、フィールド2の商品番号を引っ張ってくる) 但し、商品一覧テーブルに入ってくる商品の中で、まだ商品リストテーブルに登録されていない商品があります。その時、クエリーでは、その商品は表示されません。 どうにか登録されていない商品があった場合に、エラーと表示できるか、又は登録されていない商品を抽出するようなクエリーの作り方を教えて下さい。 よろしくお願いします。 分かりづらくてスミマセン・・・

  • Access クエリで新規テーブルを作成

    お世話になります。 クエリで新規テーブルを作成することは可能でしょうか。 テーブル作成クエリだと、既存のテーブルで抽出した内容で新規に作成する ことになるかと思います。 今回はまっさらな新規のテーブルを作成したいところです。 例えば、フィールド名とデータ型が  ID オートナンバー  受注日 日付型  商品   テキスト型 の場合だと、どのようになりますでしょうか。 ご教授の程、宜しくお願い致します。

  • Access DB 商品名の扱いについて

    (テーブル名):(フィールド名) 商品テーブル:商品名。 単価数量テーブル:商品単価、数量、仕入番号、商品名。 仕入テーブル:仕入番号、仕入日、注文日、手数料、輸送費など。 売上テーブル:売上、販売日付、仕入番号、商品名。 リレーションシップ:一対多 商品テーブル商品名-単価数量テーブル商品名 商品テーブル商品名-売上テーブル商品名 仕入テーブル仕入番号-売上テーブル仕入番号 仕入テーブル仕入番号-単価数量テーブル仕入番号 このように作成しました。 ここで問題なのが、商品名の入力です。 仕入テーブルをメイン、単価数量テーブルをサブフォームにしてフォームを作成しました。 さて、商品名を単価数量テーブル商品名フィールドのサブフォームから入力・・・と思ったら、商品テーブル商品名フィールドに名前がないためエラーが出ます。(参照整合性をしているため) サブフォームの入力フィールドを商品テーブル商品名に変更すれば入力できます。 しかし、重複した商品名を入力できません(重複しないに設定しているため) 何故このようなことをするか?ですが、同じ商品でも購入日が違えば単価が違う場合があります。 ですので単価数量テーブルでは同じ商品名を使用する必要があります。 しかし、商品テーブルでは同じ商品名は必要ありません。 もちろん先に商品テーブルに商品名を入力すれば問題ありませんが、入力効率から言って問題あります。 さてここで質問なのですが、一対多の多から商品名を入力して一側に反映できないでしょうか? 一側にすでに同じ商品名がある場合は反映してはいけません。 ちないにVBAやSQLはコピペぐらいはできますが、書けませんのでご了承を。

  • Accessのテーブル作成クエリで・・・

    Access2000で「テーブル作成クエリ」を作ろうとしておます。 デザインビューの画面では、既存テーブルの項目をクエリのフィールドへ追加していきますが、 (・・・ここまでは極普通のクエリ作成方法です) それ以外のフィールドとして、先頭に”オートナンバー”を設けることは可能なのでしょうか? また、その場合どのように設定したらよいか、教えていただけますか? 何卒、よろしくお願いいたします。

  • Accessのクエリでハイパーリンクの作成したい

    Access2003にて、[商品]テーブルを使って、社内の別システム上にある商品ごとの詳細ページ(IEで閲覧するページです)へのハイパーリンクをクエリで作成したいのですが、全部で1600件ほどあるデータに対して、一括で作成するにはどのような方法がよいのかわからないで、教えてください。 クエリでは[商品]テーブルにある以下のフィールドを使います。  ○[マスタNo]フィールド(数値型)  ○[商品名]フィールド(テキスト型)  ○[商品コード]フィールド(テキスト型)  ※[商品コード]フィールドは半角英数の羅列です。 別システム上のURLは[http://shouhin/iteminfo.ashx?code=[商品コード]]となっています。 上記のように、別システムの詳細ページのURLでcode=の後に続く文字列は[商品]テーブルの[商品コード]フィールドになります。 クエリでは、[商品名]フィールドに上記のURLのハイパーリンクを貼り付けるか、新たなフィールドを設けてハイパーリンクを作成するのか、どちらかを実現したいので、ご教示よろしくお願いします。

  • Access アクセスについて

    Accessでデータベースを作っています。 テーブル、クエリは下記のようになっており、リレーションシップで紐付けしてあります。 クエリからフォームを作成し、商品番号を入力することでマスタテーブルに登録されていれば自動で商品名等の情報が表示されるようになっています。(フォーム1) 商品番号を入力しカーソルが移動した時、マスタテーブルに該当する項目がなかった場合、マスタテーブルから作成した新規追加用のフォームが表示されるようになっています。(サブフォームではありません) 新規追加用フォームに商品名を入力し、閉じてもフォーム1の商品名の欄に反映されません。新規追加用フォームを閉じる時にVBAで”Requery”,”Refresh”もやってみましたがダメでした。商品番号を入力し直すと表示されます。 どうすれば自動で商品名が表示されるようになるか教えてください。 テーブル1(入力用) 1.ID(主キー) 2.商品番号 3.etc. テーブル2(マスタテーブル) 1.商品番号(主キー) 2.商品名 3.etc. クエリ 1.ID(テーブル1) 2.商品番号(テーブル1) 3.商品名(テーブル2) 4.etc.(テーブル2) 5.etc.(テーブル1)

  • Accessでのテーブル作成や追加クエリなどについての質問です。

    ◆テーブル作成クエリで作成するテーブルにオートナンバー型のフィールドを設けたい。◆ (ナンバーが必ず1から振られることが条件) ※補足※ あらかじめオートナンバー型を含むテーブルを用意し、追加クエリ&削除クエリを使用すればよいという意見もありますが、この場合オートナンバー型のフィールドはカウントをアップし続けてしまう為断念。 ★教えてほしい事★ テーブル作成クエリからオートナンバー型のフィールドを作成できるのか? もしくは あらかじめオートナンバー型を含むテーブルを用意し削除クエリでテーブルのデータを空にしてから追加クエリでデータを入力しても必ずオートナンバー型のフィールドの先頭値は"1"から始まるようにできるか? 宜しくお願い致します。

  • Access マスターテーブル

    Accessについて。 テーブル1がID(主キー)、注文日、商品番号、納期など入力欄の項目で、テーブル2が商品番号(主キー)、商品名で商品のマスターテーブルになっています。 商品番号を入力すれば商品名が表示されるようにクエリを作成し、そのクエリからフォームを作っています。 ここまでは良いのですが、新しい商品番号を入力したときに限りフォームから商品名も入力する事でマスターテーブルに登録されるようにしたいのですが、どうすれば良いでしょうか?

専門家に質問してみよう