Accessを用いたDBの構造と管理方法

このQ&Aのポイント
  • Access 2007を使用して、輸入の船積みデータを管理するためのデータベース構造を考えています。
  • 輸入船積みは各サプライヤーから送られ、米国とメキシコの国境にある倉庫で一時保管されます。
  • トラックを使用して簡易通関が行われ、国境通過となります。さらに、毎週確定の通関手続きが行われます。データベースの構築や効率的な管理方法についてアドバイスをいただけますか。
回答を見る
  • ベストアンサー

Access を用いた DB の構造

Access 2007 で database を作ろうとしていますが、構造を考えていてこんがらがってしまいました。 具体的には、輸入の船積みのデータを管理したいのですが、船積は各サプライヤーから送られ、米国とメキシコの国境にある倉庫に一時保管されます。これらの船積から逐次いくつか選び、トラックにて簡易通関がされ、国境通過となります(つまり、トラック 1台に就き複数の shipment が該当します)。更に、週にいくつかあるこれらトラックの国境通過に対し、毎週確定の通関手続きがなされます。 Shipment に対し、supplier や商品データのテーブルからデータを拾うのは問題ないのですが、複数の shipment をどう「国境通過」(或いはトラックオーダー)にまとめるか、また、更に確定の通関手続きにどのように複数の「国境通過」を関連付けるか(具体的にどのようなフォームやクエリを使い、入力や管理をするか)判らなくなりました。 皆さんであればどのようにデータベースを構築されますか。また、データベースが効率よく機能(入力・閲覧・印刷など)出来るようにする為には、どのようなクエリやフォームを使われますか。 データベースに就いては殆ど初心者なので分かりやすく解説頂ければ幸甚です。

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

  • ベストアンサー
  • t4t
  • ベストアンサー率55% (47/84)
回答No.2

貿易や船積みなどに関して知識があるわけではないので、一般論で。 shipmentは船積み品でいいでしょうか。 あと、入力、閲覧なのですが、どんなデータを入力し、なにを閲覧したいのかが 明らかにされていないと効率的なデータベースは作れないですよ。 テーブル構造として、まず「台帳」系と「伝票」系を分けて考えましょう。 台帳は資産を管理して、伝票は活動を管理します。 テーブルに~台帳とか~伝票、とつけておくとわかりやすいと思います。 台帳はひと・もの・お金であり資産です。 決算時の貸借対照表にのるものが台帳ベースになります。 この場合は、在庫やトラック(自車管理しているなら)がそうでしょう。 伝票は、活動内容の管理です。 決算のときに損益計算書に反映されるものです。 通関などに費用がかかるなら、決算期間の通関の伝票の経費をつみあげたものがその期の通関費になります。 利益も、1つの通関に対して利益が出るなら、その利益の積み上げがその期の利益になるわけです。 基本的に企業活動は、「伝票」の内容を「台帳」に反映させることで管理されます。 そう考えて、各伝票や台帳の内容を考えてみてください。 たとえば、サプライヤーから送られる船積のデータは伝票(入庫伝票?)でくるでしょうか。 それを倉庫に入れる時に、それを在庫台帳に記入するでしょうか。 国境通過や確定手続も(管理したい)活動ですから伝票を起こしましょう。 その伝票などんな伝票になるででしょうか…。 お話から適当に考えると… サプライヤーからの入荷伝票テーブル: 入庫番号、日時、サプライヤー、品ID、数量、など 倉庫在庫台帳テーブル(これが船積み?): サプライヤー、品ID、数量など トラック台帳テーブル: トラック番号、など 倉庫からのトラック出庫(簡易通関)伝票ヘッダテーブル: 簡易通関番号、トラック番号、日時、など(簡易通関番号でユニークになる) 倉庫からのトラック出庫(簡易通関)伝票明細テーブル: 簡易通関番号、サプライヤー、品ID、数量、など…(簡易通関番号でヘッダと関連、簡易通関番号+品IDでユニーク) 確定通関伝票ヘッダテーブル: 確定通関番号、確定通関日時、など(確定通関番号でユニークになる) 確定通関伝票明細テーブル: 確定通関番号、簡易通関番号、など(確定通関番号でヘッダと関連、確定通関番号、簡易通関番号でユニーク) こんな感じでどうでしょうか。 業務知識がないため、「どんな情報を閲覧したいのか」がわからないので、ごく愚直な構成で、たいていの閲覧には耐えると思います。 なお、多用される参照があるならそれに対して最適化する余地は充分にあります。 簡易通関されるたびに 倉庫からのトラック出庫(簡易通関)伝票テーブル(ヘッダと明細)が追加されます。 1台のトラックで複数の種類の品を通関させる場合は、ヘッダ1行に対して複数の明細行が追加されることになります。 確定通関されるたびに、確定通関伝票テーブル(ヘッダと明細)が追加されます。 1度の確定で複数の簡易通関を確定する場合は、ヘッダ1行に対して複数の明細行が追加されることになります。

ryo872
質問者

お礼

大変詳しくご説明頂き有り難う御座います。ただ、在庫を確認するとか全体のコストをはじき出す、と言う大がかりなシステムは考えていません。確定輸入手続きに必要な書類を自動的に発行する、また、閲覧もどの(いつ)国境通過(簡易通関)にどの shipment(複数)が含まれていたか、確定輸入はどの(いつ)簡易通関が含まれていたか、などが記録され、後日閲覧出来れば良いと思っています。 この意味で、「台帳」も商品カタログ及びサプライヤーリストくらいとし、本来の意味で国境倉庫にある商品を inventory としてとらえる必要はないと思います(単に、status と言うフィールドに「国境」「通過済み」などのオプションを入れ、「国境」と言うデータが入力されているレコードをふるいにかけ、これを「国境通過」のベースにする(そこから shipment を選んで簡易通関の対象とする)、と言う方法を考えているのですが駄目でしょうか。

その他の回答 (2)

  • t4t
  • ベストアンサー率55% (47/84)
回答No.3

#2です。 そういうことでしたらお考えの手法で問題ないと思いますが、 ただ、後日「いつ通関したか」を知りたくなったりしないでしょうか。 それを考えると、statusに状態を入れておくのではなくて、 「国境」「通過」などのオプションのカラムを作って、そこに、その状態になった日時を格納しておき、日付が入っているかどうかで状態を判断するのはどうでしょうか。

ryo872
質問者

お礼

早速小生の捕捉に response 頂き有り難う御座います。 通関の日付は別のフィールドに、と考えていましたが、仰るように、「通関日」と言うフィールドにデータが入っていないものを抽出するようにすれば別に「status」と言うようなフィールドは必要ないかも知れません。アドバイス深謝致します。 さて、少々頭の中で整理し、具体的に何をしたい(DB に何をさせたい)を挙げてみますので、もう一度皆さんの参考にして頂けたらと思います。 まず、ひとつの本通関に複数の仮通関(国境通過)が関連付けられ、それらの仮通関の一つ一つに複数の shipment が関連付けられる、と言う二段階の構造になっている、と言う事で(小生のイメージですと)本通関のフォームを開けばサブフォームとして複数の仮通関が表として表示される。また、同様に仮通関のフォームを開けば shipment がサブフォームとして表示される。ここまでは良いと思います(小生にも作れます)。しかし、本通関のフォームで下のそのまた下の shipment のデータを表示したり変更したりすることは可能でしょうか。サブフォームの中にさらにサブフォームを作るのでしょうか。 また、国境通過と言うフィールドが空白になっているものを抽出して、そこから実際に国境を通過させる shipment を選ぶとして、選んだ時に同じフィールドに日付を入れると矛盾が生じるように思います。いちいちフォームを閉じ、別のフォームか何かでデータを変更する必要があるでしょうか。 更に、実際のリポート印刷の際には、本通関のデータをリポートのベースとしますが、但し shipment のデータが必要となります。二重構造になっているので混乱していますが、これも「下のさらに下にある shipment のデータを引いて来る事が出来るか(容易か)」と言う疑問があります(VBA を使えば簡単なのでしょうか)。

  • lul
  • ベストアンサー率41% (10/24)
回答No.1

ご説明頂いているだけでは情報が少なすぎますが。 一つのShipmentが複数のトラックに入る事はあるのですか? 無いのであればShipment情報として進行状況を把握する為のフラグやどのトラックに載せるかという情報を持てば良いだけなのではないですか? その様にするのであればまずShipment単位のテーブルを作成する必要がありますね。 逆に一つのShipmentが複数のトラックに入る事はあるのでしたら、Shipment情報を中心に物の流れを管理出来ないと思いますので他の案を考えないといけませんね。 あまり分からないまま書いてます、全く筋違いな回答でしたらスルーして下さいf(^^;)

ryo872
質問者

補足

アドバイス有り難う御座います。基本的にひとつの shipment が複数のトラックに積まれる事はありません。トラック(単)- shipment(複)の関係です。

関連するQ&A

  • Access を用いた構造の問題(その 2)

    以前 Access に関し質問した者です。ご面倒でなければ下記をご覧下さい。質問の仕方も悪く明確な回答を頂けなかったで改めて質問します。 http://okwave.jp/qa4477357.html 【前提】輸入の船積みのデータの管理。船積(shipment)は各サプライヤーから送られ、米国とメキシコの国境にある倉庫に一時保管される。これらの船積から逐次いくつか選び、トラックにて簡易通関がされ、国境通過となる(つまり、トラック 1台に就き複数の shipment が該当します)。更に、週にいくつかあるこれらトラックの国境通過に対し、毎週確定の通関手続きがなされる。 【質問】shipment のデータを登録するのは、shipment と言うフォーム(invoice number、supplier name などのデータを登録)を作り、そこに出て来るサブフォーム shipment details(パートナンバー、個数などのデータを登録し、shipment ID にてリンクさせる)事で問題ありません。しかし、これら shipment のデータから(この時点では国境通過のフィールドはブランクになっている)選んで国境通過のデータ(日付なら日付け)をどう入れるかが判りません。 例えば、クエリを使って「国境通過フィールドがブランクになっているレコードを選ぶ」と言う事は小生でも何とか出来ると思います。ところが、そのクエリをベースにしたフォームを開き、そこに国境通過のデータ(例えば今日通過させたい shipment を選び、今日の日付)を入力すると、元データにその入力は反映されるのでしょうか。そのクエリ(及びそのクエリをベースにしたフォーム)を使い、データを入力若しくは改変したら、新しい別個のテーブルとしてセーブする必要があるのでしょうか(その方法は?)。 もっと具体的に言えば、例えば「国境通過」と言うテーブルから出来たフォームを作り、そこでブランクのレコードを開き(新しいレコードのデータ入力画面)で、サブフォームに shipment のデータを表示させ、選べるようにしたい訳ですが、どうすれば良いでしょうか。繰り返しになりますが、当然選択する際には shipment のテーブルでは国境通過のデータはブランクであり、選択した後には「国境通過」のフィールドに通過した日の日付がデータとして残されることになります。 色々判らない事が多く困っています。どなたかご親切な方ご教授願いたくお願いします。また、説明が貧しく判らないと言う場合、補足致します。

  • Accessで・・。

    アクセスを使ってデーターの整理をしています。 データーベースが二つあって、 それぞれにクエリーを作ったんですが、 そのクエリーを全部使ってフォームを作りたいんです。 フォームウィザードを使ってやって見たんですが、 上手く出来ないんです。。 こんな感じです。 データーベース1 - クエリー1.1 データーベース2 - クエリー2.1            - クエリー2.2            - クエリー2.3   このクエリー全部を使ってフォームを作る事は 出来ないんでしょうか。 どなたか教えて頂けないでしょうか~!! お願いします!m(__)m m(__)m

  • Access2010で・・・

    Access初心者です。 社内でデータベースを作ることになり、分からないながらもやっていて、いざデータの入力をしようとすると問題が起きてしまいました。 クエリやフォームでデータを入力しレコードを追加して、上書き保存し画面を閉じて、また開くとクエリやフォームにレコードが追加されていないんです。 テーブルには、ちゃんと追加されています。 この原因は何でしょうか? お教えください。

  • Access データの追加について

    大変基本的なことで申し訳ありません。 Accessのデータベースを作成したあと、追加して情報を入力すると 例えば、クエリで抽出しても、加わったデータがすぐにリストに 反映されるはずだと思うのですが なぜかそれがうまくいきません。 たとえば、クエリAを作ったあとに、データBをフォームから入力して、 クエリAを開くと、そこにデータBが反映されないということはあるのでしょうか。 その場合は何が原因でしょうか。クエリの設定方法でしょうか。 データは、私のPCのみで管理しており、複数人で入力しているものではありません。 Accessが2003を使用しています。 宜しくお願い致します。

  • 重くなってしまったアクセスを軽くする方法

    アクセス2000で社内のデータ-ベースを作っています。 ようやくデータ-ベースが完成したので、データーベース分割ツールを使ってデーターベースをテーブルデータと、フォーム等に分割し、テーブルデータを社内のランのサーバーに置き、クエリ、フォーム及びレポートを各パソコンにコピーして皆で使えるようにしました。 とりあえず、動くのですが、動きが非常に重いんです。これは、どうすれば軽くなるのでしょうか?

  • アクセス2000のフォームについて

    アクセスでまたつまずいてしまいました。ちょっと教えてください。 複数のテーブルから選択クエリを作り、それを基にオートフォームでフォームを作ったのですが、フォームでデータの入力が出来ません。クエリでもデータの入力が出来ません。 「このレコードセットは更新できません」と下のほうに出ます。 フォームのプロパティのデータの更新の許可と、データ入力用のところは“はい”になっています。 私では原因がわかりません。わかりにくい質問でしょうが、どなたかご指導お願いします。

  • アクセスでのデータ管理について(長文です。)

    アクセス初心者です。 これからデータの入力、管理、帳票をアクセスで構築しようと思っているのですが、アクセスはデータを入力した時点でデータが保存されてしまうので過去のデータが残りません。またデータの変更及び共有をうまくやりたいのですがよい方法がわかりません。 今回構築したいデータベースは、 1.過去の記録がすぐわかるようにしたい。(更新前のデータがわかるようにしたい。) 2.データの変更及び共有を簡略化したい。(A社で変更したデータをB社のデータベースにいれこみたい。) 【データベースの概略イメージ】  A社      B社 データベース1 データベース2(1と同じもの) テーブル1 → テーブル1 テーブル2 → テーブル2 テーブル3 → テーブル3 クエリ1    クエリ1 クエリ2    クエリ2 フォーム1   フォーム1 フォーム2   フォーム2 *リレーションあり *A社でテーブル1の内容を変更して、B社のテーブル1を新しいものに置き換えたい。 (本を読むとリレーションが崩れると書いてありました。) *B社で変更してA社に戻すこともある。 テーブル1 項目 ID 100 住所 あああ 氏名 △△様 電話番号 111-1111 *例えば、ID100のデータの氏名を変更するとき、変更前がどうだったかわかるようにしたい。(1月時点では△△様、2月時点では□□様とか) 誰かアクセスの操作方法に詳しい方がおられましたら、よい方法又はアクセスに関する詳しい本とかサイト等教えて下さい。よろしくお願いいたします。

  • アクセスで設計をするにおいては

    アクセスで設計をするにおいてはADOの知識は必須でしょうか? accessvbaの知識は多少ありますがADOはよくわかりません。 それでもアクセスで個人データを管理するデータベースの作成は可能でしょうか? 入力用フォームを作り、データを入力したり 検索用フォームを作ってデータを検索したいです。 VBAやアクションクエリだけでこなせますか? アドバイスよろしくお願いします。

  • office 2003 access

    昨日はじめてアクセスなるものを使ってみて作ってみました。 仕事でどこの業者に貸したとかどこの業者に借りたなどの管理をまかされまして、データベース化しようとおもいまして、昨日から触っています。 わからないことがでてきてしまいまして、テーブルとフォームをつくってみまして、フォームから「どこ」の「だれに」「いつから」「なにを」「何日間」貸借したかを作ってみまして、そのデータがテーブルにはいるようにしたのですが、「何日間」というところだけが入りません。フォーム上で「何日間」というのを手入力ではなく、「いつから」(データ型は日付)という項目に2009/07/01をいれると今日(2009/07/02)からみて2日目なので「何日間」のところが「2」(データ型は数値)になるよう、datediffで定義してうまくいってますが、それがなぜかしらテーブルに記録されません。 おおざっぱでわかりにくい説明ではありますが、考えられる原因を教えてください。クエリについてはあんまりわからなかったのでまだ作ってません。

  • アクセスの削除クエリでいいのでしょうか?

     データベースで検索できるようにしたいのですが・・・・。クエリの検索結果をフォームに反映させています。  検索結果表示後、もう一度検索フォームに戻り、検索をかけたときヒットするデータがないにも関わらず前回の検索結果が表示されたままになってしまいます。 削除クエリを使用すればいいのでしょうか?  また削除クエリをどのように設定したらいいのでしょうか?(たとえば抽出条件が必要なのでしょうか?)  この場合、マクロはいったん削除クエリを開き、もう一度クエリを開く設定でいいのでしょうか?分かりにくい質問ですいませんが教えてください