2011-10-31 21 views
0

データベースからレコードを削除する標準的な方法について知りたいと思います。データベースからレコードを削除する

たとえば、ユーザーがレコードを削除しましたが、エラーがあった場合にレコードを削除したり、誰が変更を行ったかを知るために、レコードのログとそのユーザーの履歴を保持したいとします。

そのユーザーが会社を離れると、このユーザーにリンクされている情報(ログなど)があるため、彼を完全に削除することはお勧めできません。しかし、彼を残して、単に彼を表示しないと、管理者は特定のユーザー名が利用できない理由を知らないかもしれません。

また、削除されたレコードを隠すのが標準的な方法である場合、データにアクセスする可能性のある巨大なテーブルにはなりませんか?

ご協力いただきありがとうございます。

+2

一部のデータは削除しないでくださいが、「非アクティブ」とマークしてください。私は通常、アカウントの削除を避けますが、代わりにアカウントを無効にします。データベース内の制約を使用して、一貫性のないデータを避けてください。 – galchen

答えて

0

最初に指定する必要があることを忘れないでくださいより多くのビジネスには問題が必要です。さらにそれは開放的な質問であり、したがって私の返答は主観的であるかもしれない。

あなたが最初に尋ねた最後の点について言及するだけで、 "潜在的に"巨大なテーブルは相対的なステートメントです。あなたはそれぞれの人のために何を守っていますか?それは彼らの雇用履歴全体の日常活動ログですか、それとも名目従業員データですか?

重要なデータの場合、特別なステータス列を使用してデータをマークすることができます(たとえば、レコードを削除するのではなく、誰かを引退、発砲などとしてマークすることができます)。データをアーカイブテーブルまたは別のアーカイブデータベースに移動することもできます。アーカイブ日付などの追加フィールドがあります。データを処理する方法は多数あります。

今日の技術では、ペタバイトのデータを効果的に格納できるデータベースを構築できます。

組織のニーズを見て、a)設計上の問題、またはb)プログラミング上の問題であると考えるよりも、その基準としてTHATを使用してください。

+0

あなたはポイントがあります。ビジネス上の決定が下され、実装方法を探しています。ユーザーの例は私が出会った最も簡単なものでした。他の例には、任意のテーブルからレコードを削除し、誰かがそれを削除したレコードを保持することが含まれます。 –

3

多くのプロジェクトでは、私はレコードを削除しませんが、削除されたものとして設定します。すべてのテーブルに対して作成したフィールドにtrueを設定します。
だから、例えば私が

UPDATE my_table SET deleted = true 
WHERE id = ... 

を使用しますが、有効なレコードを照会するとき、あなたの質問は、それはだ、本当にプログラミングまたはそのことについては、データベース設計の問題ではありません

SELECT * FROM your_table 
WHERE deleted = false 
+0

+1の場合、deleted = trueです。マクロそれは非常に良いアプローチのようです。しかし何百万の記録を持ち、常に新しい、新しい、そして新しい記録を出すのなら?それはデータベースが過負荷になる可能性はないと思いますか? –

+1

まあ、多分。とにかく、削除されたフィールドにインデックスを付けると助けになります。これを考えてみましょう:あなたがレコードを手に入れる必要がある場合、素早い選択肢はあまりありません;) – Marco

+0

@AwaisQarni:私の前のコメントを見てください。 – Marco

0

これ以上使用する予定がなく、今後データベースのレコードを保持することについて考えることはできません。次に、テーブルのサイズを維持するためにハード削除を実行してください。あなたのケースではそうではありません、あなたはあなたがログを保存する必要があるかどうか、つまりカスケード削除を実行するか、またはユーザーのみを削除し、

ブール値の列を追加して前述したように、表は良い考えです。もう1つのアプローチは、2番目のデータベースを使用し、元のデータベースから削除されたすべてのレコードを2次データベースに移動することです。

私は標準的な練習としては何もないと思いますが、あなたのニーズと実装に合った練習を見つける必要があります。

+0

2番目のデータベースは良いアイデアですが、データの一部が現在の/実際のデータベースに表示される必要があるため、実際的ではないかもしれません。例えば。ユーザーを削除しますが、彼が行った更新はまだ有効なままでなければなりません。しかし、それについて考えて何か... –

関連する問題