• 締切済み

アクセスのテーブルの組み立て方について

Accessはほとんど初めてなのですが、会社でAccessを使ってDBを作るよう指示されました。 まず、テーブルを顧客情報・商品・見積・見積明細などに分けて組み立て、商品テーブルに販売価格や仕入価格などを入れて見積に反映させました。 ところが、商品の売買だけで無く、その商品に対する修理やアフターサービス、また全く別のイレギュラーな仕事など、そのような様々な事案についてもひとつのDBにしたいという事でした。 この場合、今出来ている商品テーブルとは別にその他の事案のテーブルを作れば良いのでしょうか? その場合、見積テーブルはまた別に作るのでしょうか? さまざまな案件に関して、どのようにテーブルを作って関連づければいいのかわかりません。 アクセスはほとんど独学で、PCにもあまり詳しくないのでうまく説明できていないかもしれません。 要するに、必要なのは会社の収益になる品物や、サービスや、その他もろもろをすべてひとつにDB化し、見積書・契約書・粗利計算書などが出せるDBです。 また、定期的に販売した商品に対してサービスの案内をするためアラートをつけたいと言われていますがそのようなことは可能なのでしょうか? 本当に初心者で本を読みながらやっています。 現在すっかり混乱してします。どうしてもここからの構築方法がわかりません。 質問の意味がわかっていただけると嬉しいです…。 よろしくお願いします。

みんなの回答

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

>についてもひとつのDBにしたいという事でした と言っているのはデータベースやシステムを判っている人(経験者)か。 1つの.mdbにまとまっていれば良いとぐらいに解釈すべきでは。テーブルを無理して、色々違う(何を以って違うというか経験が必要だが)情報をぶち込むと困ることになる。先人の経験で言われているとおり。 リレーショナルデータベースのテーブルを分けるという発想も、相当訓練しないと出てこない発想だと思う。一般には総合とか称して、何でもそこに有るイメージを持ちやすい。 >ひとつのDB >もろもろをすべてひとつにDB化し はそういう気分を言うのだろう。 しかしテーブル面では分けるべきものは分けないといかん。 ーー テーブル関係について 事業活動で (1)商品の売買 顧客情報・商品・見積・見積明細 商品テーブルに販売価格や仕入価格 ==>一応出来上がっている (2)商品に対する修理やアフターサービス ==>これから作る (3)全く別のイレギュラーな仕事 は何を言うのか読者にはわからない。 ーー 質問の主要事項は(2)だとすれば 質問者の会社で主体は、顧客、商品どちらでしょうか。やはり顧客かな。(社内で話題になるのは、XX社のyyの件が多いのか?YY商品はどうなっているのか?利用時には、それらをつなぐものがいるでしょうね) (2)では必要なテーブルを作る。同じものは(1)を使う。 この検討をすれば仕舞いでしょう。 後はアクセス直接触るシステムを作る担当者の話で、良くわからない上司などに惑わされるな。テーブルの結合をして、情報を揃えればよい。 ーー >定期的に販売した商品に対してサービスの案内をするためアラートをつけたいと こんなの月次作業で条件をかけて、クエリで抜き出しをおこない、社別のレポートを印刷とかの話で、根幹を左右する話ではない。 頭を混乱させず冷静に。 ーー 重複情報を持たない、出来るだけテーブルを連携して、望みの項目を揃える。 ーーー それより、お偉いさんは、ほしいことだけ、のたまうが、入力の便利さ省力性、早期データ提出、関係者の提出の締め切りのばらつきをなくす、業務の実行と同時にデータ化されることを目指すことだ。 システムが腐る(使えないと不平が出て、使われなくなるのは、この面からが多い)。 例えばお客から修理要求があれば、まずコンピュターにデータを入れないと修理が進まないように仕組むことだ。従事者がそれをしないと決定的に困るようにすることだ。例えば受注したらコンピュターに入れないと、商品が発送されず、先方から大目玉を食らうように仕組むことだ。商品以外などでは、コンピュター処理とは別に、行動面でちゃんと修理をやって、対お客様では済んだことにすることも可能。しかしデータはコンピュタに入っていないとか。 もうひとつどうしてもまとめて入力する部分が残る。専任の入力担当者を手当てすること。兼任させると、どうしても遅れたりおろそかになる。 アクセスのテーブルなど2の次。アクセスの難しさに気を取られ、アクセス馬鹿になるな。実際動かしてれば欠点誤りには気づかしてくれるから そのとき自分で改良すればしまい。それより体制と言うのは、偉いさん(あれもこれも途といい勝ち)が言うだけの実施面で空回りの恐れが多い。

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.6

補足です Oplockの問題は、クライアントサーバもどきにしないなら必要ないです。逆に、複数のパソコンで同時処理したいような場合には必要です。 そのほか、クライアントサーバもどきにする場合は、 無理にすべてを一つのファイルでやろうとすると失敗することがあります。 (メンテなどの都合上、オールインワンにすると業務が止まるため。  また、1つのmdbファイル内にテーブル、フォーム、クエリなど、  数が増えれば増えるほど管理しづらくなり、ミスやトラブルを  誘発します ) データの件数をよく考えながら、場合によっては、顧客は顧客のmdbだけ、各トランザクションはそれぞれ独立させて・・・、という形のほうが良い場合もあります。 各テーブルを1つのmdbに独立させた場合、参照整合性が設定できなくなるので参照整合性が取れる機能を自前で作らないといけなくなりますが、自分で作れればとくに問題は無いと思います。 最適化やバックアップも1日1回程度は行って。 また、ネットワーク越しの リンクテーブルの速度が異常に遅くなることもあります。 その際はこちらをご参考に http://support.microsoft.com/kb/838670/ja クライアントが多い時やデータ件数が多い時は、これ以外にも クエリやテーブル動作を早くする方法がありますが、 それらはまた問題が起こったときに聞けばよいと思います。

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.5

>そのようなことは可能なのでしょうか? 可能ですけれども、規模にもよります。 もしあまりAccessのことを熟知していないのでしたら、 パソコンの台数が5、6台以下の場合までを想定されるとよいと思います。30台くらいまでは大丈夫ですが、件数が1ファイル5万件を超えたあたりや台数が7、8台を超えたあたりから、作り方を注意しないと動きが遅くなります。 ・顧客マスタ ・商品マスタ ・見積関連のトランザクション ・売上(成約?)関連のトランザクション   (↑顧客マスタとは関連しているイレギュラーな仕事なら、    ここに含めてもいいかも。切り離してもいいですが。)   客先情報などの概要トランザクションと   売上商品明細のトランザクションなど。   売上のメインとサブ ・修理やアフターサービス関連のトランザクション >見積書・ 見積のトランザクションで管理 >契約書 売上関連のトランザクションで、契約書のファイルのフルパスを記録して契約書をリンクさせるようなかたちで管理 >粗利計算書などが出せるDBです。 売上関連のトランザクションで、定価ではなく販売価格や値引き、仕入れ値などを記録して管理 >また、定期的に販売した商品に対してサービスの案内をするためアラート 見積を売上トランザクション(概要と明細ともに)に転記して、 もし修正があれば修正し、売上トランザクション(明細部分)の 販売日付を基準値に、年数などを計算してアラートもしくは、 TELリストなどを出力 というような感じでできるのではないでしょうか? 適当に書いてしまったので参考程度にしてください。 簡易的なクライアントサーバにする場合は、 サーバ側のレジストリをいじらないとファイルが頻繁に壊れることがあります。その際は サーバ側 の Oplock のレジストリ設定を変更してください。 参考 http://support.microsoft.com/kb/303528/ja の ネットワーク ファイル サーバーでの Opportunistic Locking (Oplock)  のあたり。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

会社の規模や業種(販売だけなのか製造からなのか、販売先は固定した取引先だけなのか一般顧客が対象なのか)などにもよりますが、 最初に取り掛かるデータベースとしては大変です。 Accessで大丈夫か(Webなどを通じて作業を行う必要性があるのか)なども重要です。 Accessだけの知識ではなくネットーワークに加えて経営から会社全体の作業まで把握する必要があります。 既にNo1の方もおっしゃるとおりです。 ましてやイレギュラーな仕事はテーブルのリレーションや正規化するのが厄介です。 下手にシステムだけを最優先に決定してしまうと営業活動や開発など 無理が利かなくなったりします。 商品テーブルと取引先テーブルを作成して、売上(出荷)のテーブルをリレーションで作成するところ辺りからスタートしては如何でしょうか。 修理サービス、見積書などは他のデータベースとして分離、商品テーブルなど共有できる部分だけ共有する方向で後々、発展していくような方法が良いと思います。 一つのデータベースで行うのではなく、複数のデータベースに分けて、それぞれがテーブルを共有するなどしながら発展して行くことを検討してもらったほうが失敗が少ないのではないでしょうか。 別のデータベースで修理品のテーブルを作成して商品のテーブルだけを共有するとかしながら発展させていきます。 最初からしっかりとと云われるのであれば、それなりのプロの力を借りるべきです。 テーブルの構成の決定はPCの勉強以上に、経験や会社の経営などまで含めて深い知識が必要で、誤ると経営まで悪くしてしまいます。

kyoncan
質問者

お礼

そうですよね。もっと勉強してからすべき仕事だとは私も思うのですが… 皆さんおっしゃるようになるだけ小分けして後でどのように展開しても極力困らないように作ってみます。有難うございました。

noname#96417
noname#96417
回答No.3

専門家ではありませんので、的確なアドバイスはできませんが、おそらくリレーションシップというものについて勉強されると見通しがよくなるのではないかと思います。多様なデータをどのようにテーブルに分けて表現し、またそれらのテーブルをどのように結合して利用するかということです。 ただ、入門レベルでは、まずリレーションシップを使わない、簡単なデータベースの作成と利用(操作)から入り、そのあとでリレーションシップの学習に進んでいくのがよいのではないでしょうか。初心者向けの解説本はそのような構成になっているものが多いように思います。 たいへんさはお察しいたしますが、重要なお仕事であることは間違いありません。がんばってください。

kyoncan
質問者

お礼

リレーションについては本を読んで見ましたが、難しくて…。 期待されていると思って頑張ります!有難うございました。

noname#192382
noname#192382
回答No.2

アフターサービス、アラートについてコメントします。 このためには5つのテーブルを作ります。 1.販売先テーブル 顧客名、ID、住所、電話番号など 2.生産者テーブル 生産者名、ID、住所、電話番号など 3.商品テーブル 商品名、ID、など 4.販売テーブル 期日、商品ID、生産者ID、顧客ID、仕入れ価格、販売価格など 5.修理テーブル 期日、商品ID、顧客ID、故障原因など。故障原因はユーザーミスかメーカーミスか、耐用年数によるものかをはっきりさせる。 こんなデータベースがあれば、ある商品についてある故障が出た場合、原因がメーカーミスであれば、販売テーブルで同じ商品を納めている顧客を抽出して、その顧客に商品交換などの処置を取る。原因が耐用年数によるものであれば、販売テーブルを見て、同じ商品について納品期日の古いものを抽出して、更新を助言などの処置を取ることができます。

kyoncan
質問者

お礼

そうですよね、やっぱりテーブルを分離させて、リレーションさせていくべきですよね。具体的なご意見有難うございました!

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

それはまずAccessに限らずデータベースの設計そのものです。 教育や訓練を受けずにいきなり仕事を一人で着手するのは かなり厳しい環境です。同情します。混乱して当然と思います。 一般的にシステムを企画から運用まで10のフェーズに分けます。 Accessの設計といえばプログラム設計のフェーズ4あたりに なろうかと思います。 データベースの設計はフェーズ3のシステム設計です。 しかし、その前にデータベースの論理設計が必要で、これは フェーズ2の要件定義で確立しておきたい事案です。 論理設計がどうしても上手くいかない場合、企画そのものを 見直す必要があるからです。 常に現フェーズは前フェーズの結論に対して検証及びフィード バックが必要です。これは予算やスケジュールで確保する問題 で、頭の悪い役員を説得する必要のあるタフな仕事です。 また、上司が口頭であれこれ言っているのをフェーズ1の企画 と捉えて、あなたが企画書をまとめた方がいいと考えます。 そして、要件定義書ですね。 企画段階から矛盾が必ずあると私は言い切ります。その矛盾を 明らかにし、企画のコンセプトを打ち出し(価値観)、コンセ プトから企画の方向修正をし、上司に提案する必要があります。 データベースの基本的な考え方は、あなたの会社を中心とした、 取引会社と顧客の世界と商品を表現することです。 1つのテーブルには何もかもを詰め込まない、テーブルを 分けて、各テーブルはキーによって結合します。 現帳票や将来必要な帳票の全ての項目を洗い出し、単なる 項目とキーたる要件を持った項目に分けて、キーに着目します。 このテーブル分割が上手くいくと、将来の環境の変化に対する システム修正に強いデータベースになります。柔軟性が高い ということです。 殆どのシステムは、決め付けの固まったデータベースが、シス テム開発中に既に世の中の変化に付いていけなくて、運用前に 使い物にならないことに気が付いたりするものです。 日本の多くのシステムがバブル崩壊のあたりから、少品種大量 生産から、多品種少量生産に社会に要求され切り替えようとし ましたが、データベースがガチガチでシステムが付いてこれま せんでした。 それで論理データベースの設計は、テーブルとテーブルの関係が キーで結ばれますが、これがm対nにならないよう常に1対nにす る必要があります。 例えば商品コードで結ばれたテーブル同志は、片側は同じ商品 コードのレコードが複数あっても構いませんが、片側は必ず1 レコードになるようなテーブルの意味になっていることです。 このモデルは最初は単純化し、テーブル名と概要とキーだけで 各テーブルの関係を線で結びつけて全体を見てみましょう。 どのテーブルのどのキーが1でどれがnか図の中に書いていきます。 いきなり細かい項目まで見る必要はありません。 木を見て森を見ず、になりますから。 データベースはあくまでも世界の模写です。 それに対して各機能がどのテーブルから取り掛かると必要な データが得られるかが、スラスラ言えれば1面成功です。 データベースの設計がしっかりしていればするほど、機能の 実現が楽になります。 データベースが中途半端ですと、本来データベースが行わなけ ればならないことを機能(プロセス)で行うことになり、開発 コストがかかる上、環境の変化に弱くなる訳です。 最初は細かくなりすぎるぐらいテーブルを分けてもいいでしょう。 少しずつ、何かが見えてきます。それは開発対象を理解する 糸口です。一方向だけでなく、多く方向から何かが見えて、 理解するものが生まれたら成功でしょう。あなたはそのころには 立派な設計者になっていると思います。 べき論を口にしだします。その頃が初心に帰るタイミングです。 まあ、一朝一夕では無理ですので、腰を落ち着けて頑張って下 さい。 テーマが大きく、短い時間で執りまとめが無いのは失礼します。

kyoncan
質問者

お礼

考える論理をたくさん教えていただいて有難うございます。道は険しいですが、こつこつやってみます。こんなことくらいは簡単なことだろうとほざいている上司に負けません!(笑)

関連するQ&A

  • アクセス(お勧め書籍)

    アクセスを使えるようになりたいと思っています。 作りたいものは 販売管理からデータを落とし(エクセル)それを取り込み 下記のような帳票を作りたいと思っています 1)得意先ごとの商品別粗利表   (1)担当者別   (1)期間別 2)商品別粗利表   (1)月間   (2)年間 現在販売管理ではデータを落とす機能と 台帳類(売上・仕入・入金・支払)しかなく営業面での 管理等のために毎回データを担当者がそれぞれ落とし作り込みを しておりましたが、会社全体で揃えた帳票があるほうがいいとなり システム会社に見積もりを頼みましたが予算が出ませんでした。 アクセスでなら作ることができるかなと思ったのですが何せ初心者 で上記のような帳票が作れるかどうか知りません。 初めてでもわかり易い書籍があれば紹介していただきたいと思い 質問しました。よろしくお願いいたします  

  • アクセスのテーブルにリンクできなくしたい

    アクセス97です。 DBのテーブルを見れないようにはできたのですが、 他に別のDBを作成し、元のDBのテーブルにリンクしてしまうと いともたやすくテーブルを見ることができてしまいます。 元のDBには、パスワードやグループファイルで権限を付けたくないです。 テーブルのリンクを許さない方法が何か無いでしょうか? また、テーブルが誰かによってリンクされているかどうかが 分かる方法ってあるでしょうか? よろしくお願い致します。

  • Accessでテーブルのデータのみをエクスポートするには?

    Access2000で、カレントDBのあるテーブルから別DBのあるテーブルへ、データをエクスポートしたいと思っています。 "TransferDatabase"アクションでやってみたところ、テーブルがまるごと書き換わってしまいダメでした。 "TransferText"アクションで出力してから読み込んでもいいのですが、 出力した後のエクスポート先のテーブルは別のDBなので方法(※)はあるのかもしれませんが、難しそうです。 もっと簡単に別DBの別テーブルにデータだけエクスポートする方法はないのでしょうか? もしないのでしたら※の方法(あるDBから別のDBを操作する方法)を教えて下さい。 ヒントだけでも結構ですので、どなたかお教え頂ければ幸いです。よろしくお願いします。m(_ _)m

  • Access2010で既存テーブルにインポート

    今、Access2003で、商品販売データ(CSV)をインポートし、店舗コード表テーブルとクエリで付け合わせし、販売店名付きの商品販売データをEXCEL形式でエクスポートするといった簡単な作業を行っています。 この商品販売データ(CSV)は販売した商品のデータの為、毎月フィールド構成が必ずしも一定しないという特長があります。 また、CSVの数も毎月30社分以上ありますが、一定しません。大方は毎月ありますが、一部は、あったりなっかたりします。 例えば ・A社の商品について9月には商品「イ・ロ・ハ」が全店舗で販売されましたが、、10月には「イ・ハ・ニ」だけ売られた。「ロ」は売れておらず、前月売れなかった「ニ」が売れました。 ・B社の商品について9月には商品「ト」を売りましたが、10月にはどの店舗でもB社の商品は販売されていない。 といった具合です。 Access2003でこれを行っていますが、やり方は以下のとおりです。 (1)今まで販売された会社の分だけテーブルおよび結合の為のクエリを前もって作成し。 (2)インポートウイザードで進んでいき最後の方で新規テーブルか既存テーブルか選択するところで「既存」を選択し、CSVに対応したテーブルを選択。 (3)フィールド構成が合ってればそのままインポートが完了する。 (4)フィールド構成が合ってなければ、ひとつ戻って「新規」に切り替え進んでいく。最後の方では(3)で選んだテーブル名が残ってるので、そのまま上書きで完了する。 (5)「(1)」で新たに会社が増えた場合は2・3カ月様子を見て継続してデータが発生するようならテーブルを作成。同時にクエリ等も作成 ・・・といった具合になります。 今度、会社のPC更改に伴い、Accessのバージョンが2010になるのですが、試してみたところ、2010はインポート先テーブルが「既存」か「新規」かを選択する部分が最初に来ます。 その為最後の方でフィールド構成が合わなかった場合、最初からやりなおしになり、既存のテーブル名を生かせす、入力しなおしになります。 今は、既存テーブル名を前もって覚えさせて、そこからコピペするくらいしか思いつかないのですが何かいい方法はありませんか? ご存知の方がいらっしゃいましたらよろしくお願いします。

  • AccessとSqlServerのテーブルリンク

    Access2007とSqlServer2008を使用しています。 Accessで作成したテーブルを「データベースツール」-「データの移動」でSqlServerに移行してリンクする際、 (1)SqlServerに新規にデータベースを作成すると、リンクテーブルマネージャから見てもリンク先DBが正しく表示されますが、 (2)その後、その既存DBに同じAccess内の別のテーブルを、「データベースツール」-「データの移動」してリンクしたものは、リンクテーブルマネージャから見てもリンク先DBが ()となっており表示されていません。 ツールとしてSqlServer Management Studioを使っていますが、そこからでも(1)のテーブルは表示されていますが、(2)のテーブルは表示されません。 でもリンクはできているようなのです。 また、SqlServer Management Studioを使って、SqlServer内に新規テーブルを作成し、 それをAccessからリンクしようとしても、テーブルリンク一覧内に表示されない状態です。 (「外部データ」-「ODBCデータベース」…)にて SqlServerのファイルデータソースを表示しています) (2)のテーブルはSqlServer Management Studioから見ることができないため、更新・削除もできず困っています。 DB、テーブル、リンク方法等、何か問題があるのでしょうか? よろしくお願いします。

  • ACCESS97:VBAでテーブル作成したい

    Access97を利用しています。 VBAでテーブル作成クエリーを、SQL文で直接記述しています。 書き方としては、SELECT 列名 INTO テーブル名 IN DBのパス でいいと思うのですが、例えば会社の部門コードでループさせて、 部門の名前のついたテーブルを作成しようと思います。 さて、テーブル名やDBのパスをパラメータで渡すことは可能なのでしょうか? うまくいかないのですが、もともとムリなことをやろうとしているのでしょうか?

  • MS Accessのテーブル設計について質問です。

    Microsoft Accessのテーブルの設計をしております。 商品とその仕入れ先を管理する上で、 個々の商品と仕入れ先が一対一で結びつく場合【例1】には、 商品テーブル:商品ID、商品名、価格、仕入れ先ID 仕入れ先テーブル:仕入れ先ID、会社名、連絡先 といったテーブルを結合すれば良いと考えておりますが、 【例1】 S0001 商品○○ 100円 A会社 03-○○○○-○○○○ S0002 商品×× 150円 B会社 03-××××-×××× 商品と仕入れ先が多対多で結びつく場合【例2】に、 どのようにテーブルを設計すべきが分からずにおります。 【例2】 S0001 商品○○ 100円 A会社 03-○○○○-○○○○ S0001 商品○○ 120円 B会社 03-××××-×××× S0002 商品×× 200円A会社 03-○○○○-○○○○ S0002 商品×× 150円 B会社 03-××××-×××× 市販の解説書等参照しましたが、有益な情報を見つけることができませんでした。 詳しい方にアドバイスを頂けると幸いです。 よろしくお願い致します。

  • Accessのテーブル取り込み付いて

    お世話になります。 Access2000のVBAで、テーブルの取り込み処理に ついて教えて下さい。 下記のようなソースで、ACCESSのテーブルを取り込み →エクセルに書き出しをしているのですが、 (1)の箇所で取り込み処理の時間が大量にかかっていることが わかりました。 処理速度が速くなるような、別のコーディングがあるのでしたら 教えて頂きたいので宜しくお願いします。 ----------ソース-------------------------- --------(1)--------------- With CurrentDb.QueryDefs(テーブル) .Parameters("[ID]") = "1111" Set rs = .OpenRecordset End With --------(1)--------------- If (Not rs.EOF) Then oApp.Sheets(1).cells(count, i + 1) = rs(i).Name oApp.Sheets(1).cells(count + 1, 1).CopyFromRecordset rs End If rs.Close Set rs = Nothing db.Close -----------------------------------------

  • アクセスの2つのテーブルから重複しないものを抜き出す方法について

    アクセスの2つのテーブルから重複しないものを抜き出す方法について 例えば テーブル Aには ID   価格    商品   1  200    りんご   2  150    みかん   3  180    りんご   4  230    いちご テーブル Bには   1  150    みかん   2  180    りんご とあった場合 A-B のクエリーを実行して   1  200    りんご   2  230    いちご という結果を得たいのですが、どのようにすれば出来るのでしょうか よろしくお願いします。

  • アクセス レポート内の計算結果で表示順を変える

    アクセスで会社の粗利一覧を作っています。 レポートを作成時にレポート内で計算された粗利の高い順に並び替えをしたいのですが、うまく行きません。だれか助けてください。 ちなみに、DBはSQL SERVERを使用してます。 フロント部分をアクセスとして使っています。

専門家に質問してみよう