RDBのテーブル設計で

「updateやdeleteはさせず、すべての変更はレコードのinsertのみで実現する。変更の衝突に強く、また古いレコードがそのまま変更ログとしても機能する」
というやり方があるのを何かの解説記事で読んだ覚えがあります。

このようなメソッドについて詳しいページを、またこのメソッドの名前などあったら教えてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/06/18 11:20:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:winplus No.1

回答回数12ベストアンサー獲得回数0

id:Sampo

アイディアとしてはまさにそうなんですが、論理削除では削除フラグを立てる、ということはupdate操作なんですよね。

2009/06/12 09:07:22
id:tera-p No.2

回答回数92ベストアンサー獲得回数21

ポイント27pt

うーん.いくつか候補が思いつきます.

WORM (Write Once, Read Many)
「書き換え」を許さないデータ管理方式です.ただ,あまりRDBMSの文脈では聞きません.
Shared nothing
WORM で設計することにより実現できるアーキテクチャです.WORMの制約と引き換えに,高いスケーラビリティが得られます.
追記型データ管理
PostgreSQL のデータ管理方式として有名です.テーブル設計の技術ではないですが.

解説記事,ということで3つ目かな?であれば,データ管理 というページが役立つと思います.

id:winplus No.3

回答回数12ベストアンサー獲得回数0

ポイント26pt

「削除フラグを立てる」のは、有効な(最新の)データを区別するため。たとえば、incrementしたidや発生日時が最大のもの、というような条件で有効な(最新の)データを判断するのなら、update操作は不要になります。メリット・デメリットは「論理削除」と、そう変わらないと思います。

「履歴管理」をキーワードとする議論も参考になるかも。

http://www.oracle.co.jp/forum/thread.jspa?threadID=8009664&tstar...

などなど。

  • id:dev_zer0
    キーワード:データウェアハウス、DWH
  • id:Sampo
    あー、データウェアハウスも確かにその特徴を持っていますね。

    でも、今回知りたいのは蓄積が最初から目的のデータウェアハウスとは違って、例えば住所録のような本来更新を目的としたテーブルでありながらupdate/deleteを排除してしまう設計についてです。

    コメントありがとうございました。
  • id:idetky
    次々にデータをinsertしてって、
    データ表示の際に、同じ製品名なら最新のやつだけ表示させる
    って感じで良いんじゃない?

    こんなのに名前がついているとは思えないけど。。。
  • id:Sampo
    いや、もうまさにずばりそういうことです。

    そのやり方について、チューニングの方針とかログローテーションのやり方とかの付随するノウハウ体系があるはずなので、それについてまとめて調べたいわけです。
  • id:winplus
    なるほど、どんなことをお調べになっているのか分かりました。的外れな回答をして、すみません。

    たしかにinsertだけであれば、テーブルは常に記録順にソートされているわけですし、そういった点で、ノウハウはあるのかもしれません。

    「変更の衝突」を懸念される位で、しかも「変更ログ」が必要というのは、かなり大規模なデータを扱われることになると思います。ご質問の回答ではありませんが、以下の記事が何かヒントになるかも。
    http://www.itarchitect.jp/issue/-/113549.html
  • id:chuken_kenkou
    >たしかにinsertだけであれば、テーブルは常に記録順にソートされているわけですし

    「記録順にソート」を保証しているRDBMSが、具体的にあるのでしょうか?

    私の知るRDBMSでは、複数トランザクションからのinsertがあった場合の排他制御の仕組み、物理的な末尾まで一度辿った後の空きサーチなどで、必ずしも保証されなかったと記憶しているのですけどね。
  • id:winplus
    更新したくないとのことなので、勝手にトランザクションなし(MySQLのMyISAM)でもいいかと。でも、MySQLのMyISAMでも、たしかに並び順を保証はしていませんね。

    未熟者で、すみません。もっと勉強してから、回答・コメントします。
  • id:winplus
    未熟者ですが、もう一度だけ。
    TM(T字型)を提唱されている佐藤正美さんは、以下の手法を利用することで、「 「驚異的な」 パフォーマンス を実現することができる」と述べておられます。
    (1)「INDEX-only」
    (2)「ADD-only」

    http://www.sdi-net.co.jp/sdi_232.htm
    http://www.sdi-net.co.jp/sdi_236.htm
    http://www.sdi-net.co.jp/logico-33.htm
    http://www.sdi-net.co.jp/logico-34.htm
  • id:Sampo
    個別の回答への謝辞が遅れてしまったのでここで。

    >tera-pさま

    PostgreSQLのデータ構造の件はこれはこれで興味深かったです。ありがとうございまs。

    >winplusさま

    削除フラグを立てた新規レコードをinsertするのなら、insertだけで論理削除ができる、というのはその通りですね。
    INDEX-onlyはまた極端な手法だと思いますが、こんなところにも役に立つのかというのは新しい発見でした。ADD-onlyというのはキーワードになるかな? とちょっと期待しましたが、そうは問屋が卸しませんね。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません