• ベストアンサー

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

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