• ベストアンサー

削除フラグってどうなんでしょう?

kitchenkabuの回答

回答No.2

No1さんのような目的が主だと思いますが、 性能の観点から「削除フラグ」を利用することもあります。 deleteはコストが高いので、フラグを更新するだけにして、 例えば低負荷の時間帯にまとめてdeleteするような設計に することがあります。

sweepea
質問者

お礼

ご回答ありがとうございます。 > deleteはコストが高いので、フラグを更新するだけにして、 そうなんですか。知りませんでした。 ただ、それと外部キーの便利さを天秤にかけたら、やはり、外部キーは捨てがたいです。

関連するQ&A

  • 参照整合性制約と外部キー

    FOREIGN KEYは、外部キー制約になるのでしょうか? FOREIGN KEYは、参照整合制約になるのでしょうか? 参照整合制約は、FOREIGN KEYで、その制約を成り立たせるために、外部キーがあるとおもっているのですが間違ってないでしょうか? ご教授お願いします。

  • リレーションシップと外部キー制約について

    ■最終的にやりたいこと ・なるべくコード(SELECT文など)を見ずに、「DB」「テーブル定義者」「ER図」等からテーブル間の関係性を把握したい ■具体例 ・投稿一覧。「userテーブル」「postテーブル」 ・「postテーブル」の「user_id」カラムは、「userテーブル」の「id」カラムに対応 ※簡易な場合はある程度想像は付くのですが、ちょっと複雑な構成になると途端に苦労するので、何か良い方法はないかと思い、質問しました ■質問 ◆「リレーションシップを組む」際、「外部キー制約」はかけるのでしょうか? 例えば、上記「投稿一覧」DBを構築する際では、どうするのでしょうか? 1.普通、「外部キー制約」をかける 2.普通、「外部キー制約」をかけない 3.どちらでも良い ◆「外部キー制約」は何の為にかけるのでしょうか? ・「SELECT&JOIN」でデータ取得出来るのであれば、「外部キー制約」と「リレーションシップ構築」に関係性はないと思うのですが、そういう認識で合っているでしょうか? ・参照先データが削除されたら整合性がとれなくなる場合のみかけるものでしょうか? ◆「リレーションシップを確認」する目的で、「外部キー制約」をかけても良いのでしょうか? ・「データ削除の整合性」ではなく、「リレーションシップを確認」する目的で外部キー制約」をかけても良いのでしょうか? ◆「外部キー制約」以外に、「リレーションシップを確認」する方法はあるのでしょうか? ・コード(SELECT文など)を見ずに、テーブル間の「リレーションシップを確認」する方法としては、「外部キー制約」以外に何かあるのでしょうか? ・そもそも、「外部キー制約確認」=「リレーションシップ確認」という考えは正しいのでしょうか?

    • ベストアンサー
    • MySQL
  • Oracleの制約構文に関して

    Oracleの外部キー(参照整合性)制約に関して質問です。 定義済みの列制約に対して、追加の定義方法がわかりません。 CREATE TABLE TMP (T_COL1 NUMBER(4) CONSTRAINT PK_COL1 PRIMARY KEY, T_COL2 VARCHAR2(10) CONSTRAINT U_COL2 UNIQUE, T_COL3 NUMBER(2) CONSTRAINT FK_COL3 REFERENCES EMP(E_COL1) ); 上記のSQL文を実行した後にT_COL3の制約に"ON DELETE CASCADE" を追加する方法を教えて頂けますでしょうか?

  • 外部キー制約について

    外部キー制約をよく理解しておりません。 親表と子表に外部キー制約がある場合は、トランザクション中であっても 不整合は許されないのでしょうか? INSERTする場合は必ず親表から、 DELETEする場合は必ず子表からとなるのですか?

  • 削除フラグ

    こんにちわ。今まで、同じような質問をしてきたものです。 PHPの掲示板で削除機能を作成しようとしています。 投稿番号や削除キーがあっていれば、削除をするという 削除フラグまではを作成したのですが、実際の削除(論理削除)がうまく行かず、苦悩しております。下のarray_splice()の配列から特定の行を削除・置換する関数を使用し削除をしようとしているのですがこれでは論理削除などはできないでしょうか?関数ではできないのでしょうか?また、if( $temp[5] !=0 )とすることで、物理削除ではなく表示を させないということで、論理削除としようと考えました。 掲載した記述部分は、削除ボタンが押されたら削除処理をする 部分です。また、実際の書き込み部分も記述させていただきます。 <?php $NO = $_POST["NO"]; $hoge = $_POST["hoge"]; $delkey = $_POST["delkey"]; # 削除ボタンが押されたら if($submit =="削除"){ $data = file("data.txt"); foreach( $data as $value){ $temp = explode("\t",$value); if($temp[4] == $NO && $temp[6] ==$delkey ){ //削除フラグを0以外にする処理 if( $temp[5] !=0 ){ array_splice($data, $temp[4], 1); } } } } ?> 書き込み部分は下のようにしています。 $file = fopen("data.txt", "w"); fwrite($file, "$name\t$mail\t$body\t$dt\t$count\t$flag\t$delkey\n".implode("", $data)); fclose($file);

    • ベストアンサー
    • PHP
  • 参照整合性制約は、実装するのが当たり前?

    よろしくお願いします。 自分は、数年間開発経験のあるSEです。 Oracleの参照整合性制約は、実装するのが当たり前と思ってましたが、そうでもないのでしょうか? というのは、情報処理の本などを見ると 「RDBMSは参照整合性制約の実装により、更新異状を排除することが重要な機能」 などと書いてあり、なるほど、そうかと思ったものでした。 もちろん、開発に携わったシステムでも実装されてました。ここまでは良かったのですが・・・ 最近、関わっているシステムは、Oracleですが、参照整合性制約は実装されおらず、 全てアプリケーションがその辺を頑張ってます。 まあ、古いシステムなのでしょうがないかと思っていたのですが、今度のシステム更改(DB再設計含む)でも、 参照整合性制約は実装しない、というのです。 なんで実装しないのか、DB担当でないので分からないのですが、参照整合性制約を実装しないRDBなんて クリープを入れないコーヒーのようなものではないかと、私は思うのです。 この感覚は、正しいのでしょうか? 専門家の方、経験豊富な方、ご意見お待ちしております。 よろしくお願いします。

  • すべてのテーブルのすべてのレコードを削除する方法

    データベースを扱うプログラムに対してユニットテストを行いたいと思っています。 それぞれのテストが終了するごとにすべてのテーブル内のすべてのレコードを削除したいのですが、 delete from table_a; delete from table_b; delete from table_c; ... のように書くと、外部キー制約に引っかかってしまい削除できないことがあります。 短いSQL文で複数のテーブル内のレコードをすべて削除する方法はないのでしょうか? よろしくお願いします。 ちなみに、私が現在使っているDBMSはPostgreSQL 8.1です。

  • 引数が介在しているのかも知れませんが、…。

    オブジェクト図で連関エンティティが盛り込まれる際には、 RDBの主キー・外部キーの様に、 繋ぎ合わせの基準値が参照されているのでしょうか?

  • CREATE テーブルでの複数外部キーの設定

    MySQL5.1で、1つの表に複数の外部キーを持つとき、 CREATEテーブル発行の仕方について教えてください。 1、以下表3つ作成 得意先表 {得意先コード(主),得意先名} 注文表 {年月日,得意先コード(外),商品コード(外),数量} ※得意先コード、商品コードに、on delete cascadeをつける。 商品表 {商品コード(主),商品名,商品区分コード(外),単価} の三つの表があります。 質問)、注文表に、2つの外部キー(得意先コード・商品コード)を設定したいと思っています。 CREATE TABLE IF NOT EXISTS `注文表` ( `注文日` date DEFAULT NULL, `得意先コード` varchar(10) DEFAULT NULL REFERENCES 得意先表(得意先コード) on delete cascade, `商品コード` varchar(10) DEFAULT NULL REFERENCES 商品表(商品コード) on delete cascade, `数量` int(11) DEFAULT NULL ) の外部キーを列制約で作成するのがいいのでしょうか? 表制約では、二つの外部キーを設定できないと思いましたので・・・。 ご教授お願いします。

  • キーの目的

    すいませんが、教えてください。データベースに、主キーや外部キーというのがあります。これを設定する目的は、何なのでしょうか?意味は、本によくあるのですが、その目的が理解できないので、教えてください。 仮に、主キーを設定しても、検索でレスポンスが早くなることはないですね。 ユニーク制約をテーブルに付ける目的と同じで、単に整合性を保つだけの目的でしょうか? であれば、整合性を考えなければ、キーを設定する必要はないのでしょうか?