• ベストアンサー

テーブルデータの削除による対応策

accessで取引先テーブルにデータが300ぐらいあるときいくつかの取引先が倒産してもう取引しないことが、確定している場合、その倒産した得意先はテーブルにずーと置いておかなければ、これまでのデータが消えてしまうと思いますが、実際にはもう取引しない得意先のデーターをずーとそのままというのもおかしいような気もするのですが、どのように対応するべきものでしょうか?おしえてください。

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

  • ベストアンサー
noname#212058
noname#212058
回答No.1

まず、システムにおける削除 というものには 『物理削除』 と 『論理削除』 とがあります。 物理削除:   テーブルから DELETE する削除。   データは完全に消滅する。 論理削除:   [削除フラグ列] という列を作っておき、『この列が "1" だったら   もう取引を停止した取引先』 みたいなルールを作る方法   データそのものは "削除" しても残る ご質問の要件の場合は、一般的に 『論理削除』 で処理します。 で、普通に取引先がほしい時は [削除フラグ列] で削除されて いないレコードを取得することになりますし、過去のデータが ほしい時は [削除フラグ列] を無視して全データを取るわけですね。

masaka333
質問者

お礼

ご回答ありがとうございます。フラグと言う言葉自体アクセスでは初めて聞いた素人で大変勉強になります。理論削除というのはテーブルをはそのままでクエリで抽出したものを使用すると理解しましたがこれでただしいのですか?

その他の回答 (4)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

>クエリで表示だけさせない方法 『クエリで表示だけさせない』ための条件は、 表示させたくないレコードと表示させたいレコードの区別をつける、 その手段が「・・・フラグ」や「適用開始・終了日」。 「・・・フラグ」とはいいつつも、とりあえず値は何でもいいんです。 表示させたくないレコード=1、表示させたいレコード=0、等ON/OFFそれだけ。 クエリで=0だけ、とやれば表示させたいものだけ、です。 しかし「得意先」「取引先」の特性から、「適用終了日」。 この4月から取引始めます、というのは今登録しても実際には使ってはいけないし、 ほか合併あるから3月いっぱいだけ取引は控える、は3月だけ止める、 2月末で取引先社名が変わる、は3月以降止める、 などある期間でもって使える使えないがあると 単に=1や=0よりは、「適用開始日」「適用終了日」のが融通効いて好ましい。 取引先だけでない、商品なども同じ。 1番いけないのは、 1つの項目に2つ以上の意味を持たせ、項目本来の使い方が失われること。 こういうときにしか使わない項目なのになぜ・・・になってるの?、と 不具合を招くもとです。 『論理削除』は、取引先でなくてもよく使う手段です。 レコードを実際削除するのかどうかは有識者に確認です。

masaka333
質問者

お礼

ご回答ありがとうございます。適用日等の実際の入力が少し理解できませんが、アクセスの使い勝手を良くするには、取引先、商品名等のマスタといわれるものをテーブルで管理しつつ、クエリで現在使用中のものをクエリで抽出しそれらのリレーションで操作していくのですね。

noname#212058
noname#212058
回答No.4

ANo.1 です。にぎやかになってますね。 > 理論削除というのはテーブルをはそのままで > クエリで抽出したものを使用すると理解しましたが > これでただしいのですか? あっていますよ。大丈夫です。 『現在取引されている取引先クエリ』なんかを作っておくと便利かもしれません。 『論理削除』を実現する方法自体は、私が提案した 「取引している YES or NO」という内容の[削除フラグ列] を持つ方法のほか、ANo.3 さんがおっしゃる 「取引終了日(この項目にデータが入ってなければ「取引あり」とする)」で管理する方法などがありますね。 結局のところ、クエリで 『取引中の取引先』 が抽出できるようにしてあげれば良いのです。データの持ちかたはアイディア次第。色々考えてみるのもよいですよ。

masaka333
質問者

お礼

ご回答ありがとうございます。だいぶ頭の中がすっきりして来ました。これまでテーブルに対して色々していたようで、テーブルはあくまでもデータの蓄積場所でクエリでテーブル代わりのものを作りそこから操作するようにするのですね。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

ある項目に、こんなとき使う、あんな時使う、と全然違う次元で使うのは不具合のもと。削除フラグでなく取引終了フラグとでもする。意図は明確に。 マスタの名称のみ変わるとき、コードそのままでしょうし、訂正前はどう保持するか。 それとこの終了分は同じ扱いか分けるのか。フラグを増やすと使えるなら使おうとなり、本来準備したときの思想が崩れることあります。 削除フラグとすると取引終わっただけに使わないと思われます。

masaka333
質問者

お礼

ご回答ありがとうございます。なにゆえ素人で何件か回答いただきましたが、完全理解するには勉強が必要なようで、また、あほもないレベルの質問をさせていただきますので、よろしくお願いします。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

論理削除では使い方誤ると危険でもあります。 削除フラグを用意したとして、 マスタ登録機能等訂正レコードとかほかの要件において、論理削除が1件でも発生した場合、 取引無しとその何か数件の区別つきません。 それ知らずに論理削除分は物理削除してしまえ、という処理で一気に消えてしまいます。数件でよかったのに。 論理削除は取引無くなったレコードのためだけなんです、になるのかどうか。 適用開始日、終了日を持つ方が普通です。終了して削除して良い、て時効ならそこでフラグが立つ。 取引あって削除したいなら終了日空欄でフラグが立つ。 フラグはレコード削除かどうかの意、取引終わったの意でありません。 さらに、企業の中には、取引情報などシステムで使われたデータは5年くらい保存すること、とする等決まりあります。削除タイミングあります。 少なくとも 年度(決算)単位で保持、物理削除で消すことなくそのままでは?。 レコードあっても選択、表示だけ注意では?、トランザクションないので。

masaka333
質問者

お礼

ご回答ありがとうございます。たしかに取引がなくなったからと言って削除してしまうのは、実際ありえませんよね。テーブルのデータはそのままでクエリで表示だけさせない方法で良いと理解しましたが・・・なにゆえ素人なもので、心配です。必要なくなった、数年後に削除すればよいと理解しましたが、これも正しいのか不安です。

関連するQ&A

  • ACCESSでテーブル内の名称変更して変更前のデーターを反映させたい

    ACCESS初心者の者です。得意先との取引をACCESSで作成してるのですが、得意先が名称変更になり、得意先テーブルで名称を変更したいのですが、名称を変更するだけではなく、旧名でのデーターを新しい名称で反映させたいのですが、こういった事は可能でしょうか? テーブルでの直接変更や置換をしましたが無理でした。月ごとと2ヶ月にまたがったデーターが必要なのです。作成者がもういないのでどうしたらいいものか困っています。言葉足らずかも知れませんが宜しくお願いいたします。 OS:WINXP SOFT:ACCESS2000

  • 複数テーブルをひとつのテーブルにしたいのですが

    教えてください。 得意先マスタ・仕入先マスタ・納入先マスタの3種類のテーブルを、ひとつのテーブルとしてまとめたいのですが、ACCESSにて行う場合、どのようにしたらいいでしょうか?各テーブル共、フィールドの桁数は同じなので、まとめられると思うのですが。。。宜しくお願いします。

  • Access2003 異なるテーブルを1つのテーブルにくっつける

    こんにちは。 Access2003で、以下の2つのテーブルがあります。 テーブルA  得意先 売上高  あああ 100  いいい 200 テーブルB  得意先 仕入高  ううう 300  えええ 400  おおお 500 上記のようにフィールドが異なり、関連するID等のキーも持っていない別々のテーブルを、クエリなどで  得意先  売上高  得意先  仕入高  あああ  100    ううう  300  いいい  200    えええ  400            おおお  500 のようにテーブルAとテーブルBを横並び(?)にくっつける事は出来るのでしょうか? 得意先も別々なので、連結とかする事ができません。。 いろいろインターネットで調べたのですが、どうしても解らないので質問させて頂きました。 宜しくお願いしますm(__)m

  • Accessのテーブルへのデータインポートについて

    Accessのテーブルへのデータインポートについて Access2002で、A.mdbのTESTテーブルからB.mdbのTESTテーブル(構造は同じ)へテーブルデータをインポートしたいのです。 TESTテーブルの主キーはSEQ(オートナンバー)しかありません。 そのときに、コピー元とコピー先の主キーに重複があった場合、オートナンバーなので自動で再付番しデータが追加して欲しかったのですが、 Accessの機能のエクスポート、インポートでは、コピー先に主キーに重複があったデータは上書きされてしまいます。 テーブルを開き、データをコピー&ペーストしますと、ペーストしたときにオートナンバーで自動で再付番されます。 この方法でもいいのですが、データが数百万件あるので、現実的ではありません。 Accessのインポート・エクスポートで、オートナンバーで主キーを再付番してから、B.mdbのTESTテーブルにデータ追加する方法はないでしょうか? よろしくお願いいたします。

  • EXCELのピボットテーブルの表をデータ化したいのです。

    EXCELのピボットテーブルの表をデータ化したいのです。 ピボットテーブルは便利でよく利用するのですが、 出来た表は大区分、中区分、小区分と区分が同じものはグループ化され、 最初の1行目にのみ表示があり、同じものは何も表示されていません。 例えば   得意先1 ジャンル1 区分1 売上高             区分2 売上高        ジャンル2 区分1 売上高             区分2 売上高             区分3 売上高 のようになっています。 でも、このピボットテーブルをデータとして別の分析をしたいのです。 ですが、データとして使用するには   得意先1 ジャンル1 区分1 売上高   得意先1 ジャンル1 区分2 売上高   得意先1 ジャンル2 区分1 売上高   得意先1 ジャンル2 区分2 売上高   得意先1 ジャンル2 区分3 売上高 となっていてほしいのです。 例えば大量にある売上データを集計する際も、生データを持つと容量も増えますので 第一段階で得意先・ジャンル・商品・売上月・金額 のように要点別に集計したピボットテーダルを 作成し、それがデータ化できれば元データを削除してそれをデータとして 色々なピボットテーダル作成で分析が出来ると思うのです。 宜しくお願いいたします。

  • ACCESSでテーブルでの自動入力

    ACCESS 2007を使っています。 SQLとかは分かりません。(貼り付けとかも、そもそもどこに貼り付けるのかもよく分かりません) 得意先(100件)を、営業担当者(5人)にそれぞれに割り振ります。 得意先テーブル(得意先ID、名前、住所、担当者ID、営業担当者名)(とりあえずは、営業担当者名だけは空白) 営業担当者テーブル(担当者ID、営業担当者名)を 作成します。 クエリのほうで、以下の二つのテーブルの以下の要素を合体させたものを作ります。 得意先テーブルの(得意先ID、名前、住所、担当者ID) 営業担当者テーブルから(営業担当者名) すると、 得意先クエリ(得意先ID、名前、住所、担当者ID、営業担当者名)まで入ったもの、がつくれます。このクエリは、得意先ID、担当者ID両方がきちんと入力された項目のみがリストアップされます。 それで、以下疑問点なのですが、 ・基本的に、得意先の情報を新規で入力していく際は、この得意先クエリをベースに作成された、得意先フォームから入力していくというのが一般的なのでしょうか。 (テーブル自体に、上記の得意先テーブルに、得意先名まで入ったものを作成することは普通は、しないのでしょうか。入っていた方が何かと便利かと思うのですが、そういった用途には、クエリを基にしたフォームを使うものなのか。あくまでテーブルはデータの保管場所と考え、クエリを使用上の入出力の基本窓口にすべきなのでしょうか) ・現段階で、上記の得意先テーブルで、担当者IDが入力されていないものが多数あるのですが、(エクセルで取り込んだデータ)、この得意先クエリでは、それらは表示されません。そうすると、得意先テーブルから入力していく必要があります。その場合は、得意先テーブル自体か、そこから作られたフォームに、担当者ID(実際にはこれが、代理店IDで、結構多数あるのですが)、を入力していく形になるかと思います。この場合、得意先テーブルだけをベースとしたクエリやフォームをつくり、担当者IDの入力を(入力しやすい形、自動的に選択できるなど)にして、入力をとりあえず終えきるというのは基本でしょうか。 とりとめもない質問になってしまいましたが、よろしくおねがいします。 基本的な考え方など分かればと思います。

  • ピボットテーブルで集計したデータを…

    ピボットテーブルで集計したデータを… エクセル2007を使っています。 集計の元となる一覧をシート1に打ち込み 下のように1年を通じて作成していきます    月   日   品名   金額    取引先 1  4月  20日  A   ¥12.580  ○○株式会社 2  4月  20日  B   ¥36.851  ××商事 これをシート2でピボットテーブルで集計し、月でまとめたり、品名でまとめたり 取引先ごとを月で集計したりしています。 シート1(取引一覧)は毎日、取引内容が追加されていくので シート2(集計ピボットテーブル)は開くたびに更新されます。 取引先が扱っている品物は100種類くらいあり、 私はそのうちの30種類につき集計します。 残りは他のスタッフが分担して同じ作業をするのですが、 「取引内容元帳」なるものに、それぞれのスタッフが日ごとにデーターを転記していかなくてはならず、 現在は、一日ごとのピボットテーブルの集計を印刷し、 それを手打ちで「取引内容元帳」にうちこんでいく方法をとっています。 私が集計しているピボットテーブルのデータ(数値)を リンクを貼るようなカタチで「取引内容元帳」の決まったセルに 自動的に転記するようなことができませんか? 打ち込みの間違いもなく、これがシステム的にできれば たいへんうれしいのですが…  

  • Access2000のテーブルのフィールドについて

    Accessのテーブル設計で困っています。 担当者マスターテーブルに担当者CD(主キー)と担当者名のフィールドが入っています。取引先マスターテーブルには取引先CD、取引先名、担当者を2名いれたいのですが、どのようにしたらいいかわかりません。ひとつの取引先に2名の担当者がいる場合どのように管理をしたらいいでしょうか。1つの取引先に対し、1名の担当者だったら、担当者CDをいれクエリで出すことが出来るのですが、2名となるとどうなのでしょう? どなたかご教示ください!よろしくお願いいたします。

  • テーブルの削除について

    DoCmd.OpenQuery "更新"でテーブルAを更新クエリを実行データBの データを更新してから DoCmd.DeleteObject acTable, "データB" でテーブルを削除するとエラーで削除できません どの様にすねれば削除できるでしょうか アクセス2003 XP の環境です よろしくお願いします

  • アクセス2007 テーブルの全削除とデータ移動

    アクセス2007 テーブルの全削除とデータ移動 全テーブルを削除して、データをインポートしようとしています。 http://okwave.jp/qa/q5952603.html 以前の質問<QNo.5952603>の続きになってしまいますが。 >質問3. >削除後にインポートをしたいのですが。 >手動でアクセスメニュー>外部データ>アクセス(のインポート)>現在の~~>すべて選択(テーブル)>OK >これを実現するVBの記述は、どんなコードになるのでしょうか? 答え >DoCmd.TransferDatabase acImport, "Microsoft Access", strPATH, acTable, strTDef, strTDef, False なのですが、手動で行った場合の「オプション」>インポート「リレーションシップ=チェックON」の部分が 上記のお答えのコードで実現できませんでした。 各クエリの部分的なリレーションは残ってますが、全体のリレーション線が消えてしまいます。 どのようにしたら再現できますでしょうか?