電子書籍の厳選無料作品が豊富!

システムの改修で今まで物理消去する挙動をしていた項目を
論理消去として消去フラグを立てて実際のデータは残すという変更を
したいです

データベースはSQLserverです

つまり今までdaleatしていたところをupdateで消去フラグを立てるのだと
思いますが

プログラミングを学び始めたばかりで
具体的にどの文をどう変更すればいいのかイメージがわきません
消去フラグを立てるということは
データの受け取り側にもそのための処理を加えないといけませんよね?

VS2005でASP.net、C#を使ってWebアプリをSQLと連携させています
現在はTransaction-SQLについて調べながらという感じです

抽象的な質問になってしまっているかと思いますが
システム開発関係者の方にご意見伺いたいと思いますので
よろしくお願いします。

A 回答 (3件)

>論理更新については検索ヒットもなくよくわかりませんでした



論理削除は削除したレコードを残しておいて、後で何を削除したか
確認できるようにすることですが、論理更新では更に一歩すすめて
レコードの更新を

・旧レコードの論理削除
・旧レコードの内容を更新したものを新規挿入。

に置き換えます。つまり全ての更新履歴がDBの中に
残ることになります。金銭を扱うDBではよくやる処理方式です。
レコードは作成日付、更新日付や更新回数など、おきまりの
列をもつことになります。
    • good
    • 0
この回答へのお礼

助かりました

なるほどよくわかりました
重ねて詳しくご回答くださりありがとうございます

お礼日時:2015/06/18 14:43

論理削除は奥が深いですよ。


たとえば、一意制約のある列があり、
レコードを挿入するとき、その列の値を過去に
削除したレコードのものと同じ値にしたい場合
どうするか? とか
削除したレコードと同じPKのレコードをどうやって作るかとか?
論理削除するなら、論理更新(論理削除+挿入)もやるのか? とか?

同時更新があり得る場合、トランザクションの設計も複雑化します。

後は、検索クエリーに必ず削除フラグを条件に入れる。

も必須ですね。

論理削除を導入する場合は、更新系はストアドで実装することを
お勧めします。各自がバラバラにSQLを書いていたら
えらいことになります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

一意制約→重複をゆるさないこと
PK→プライマリキー(主キー)の略
など現場で使われるであろう単語がいくつかありためになります
ただ論理更新については検索ヒットもなくよくわかりませんでした
論理消去に挿入を加えたものというニュアンスにとれますが
どこになにを挿入するのでしょうか

論理消去が奥の深いということや
設計が複雑化する場合についても教えていただき
ありがとうございます

最後におっしゃっていることと的外れのことかもしれませんが
データベースの動きはほとんどすべてストアドで実装してあると
思います

お礼日時:2015/06/18 09:28

案1


DELETE → UPDATE ... SET delete_flag = 1
SELECT/UPDATE → delete_flag の条件を必ず記載する

案2
DELETE → トリガーで delete_flag = 1 の更新に差し替える
SELECT/UPDATE → トリガーで delete_flag の条件を追加する

追加案
大量データの場合、delete_flag の条件を適用ずみビューで SELECT する
    • good
    • 1
この回答へのお礼

助かりました

ご回答ありがとうございます

またも端的に要所をまとめていただきありがたいです
頂いた回答をもとに
調べ進めてみます。

お礼日時:2015/06/18 09:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す