SQL Server「リサイクルビン」
-
29-09-2019 - |
質問
他の機能も含まれるコンテンツ管理Webサイトを構築しています。管理者メンバーが管理パネルを介してアイテムを削除する場合、このアイテムを30日間「リサイクルビン」に移動したい(その後自動的に削除されます)。
この機能を実装する最良の方法は何ですか?
私が持っていたアイデアの1つは、テーブルに「削除された」ビット列を持つことでした。 WHERE Hide=0
. 。しかし、これは私がこの状態を配置することを忘れないでください。 SELECT
テーブルから。
私が持っていたもう1つのアイデアは、レコードが削除されたときに移動する2番目のテーブルを持つことでした。しかし、私は自分のウェブサイトで多くのテーブルを使用しているので、これはテーブルの量を2倍にし、テーブル構造を重複させることを意味します(将来的に一貫性の問題を引き起こす可能性があります)。
理想的には、すべてのレコードが移動される「リサイクルビン」テーブルを持ちたいと思いますが、これにはすべての異なるテーブルからデータを保存できるように100列の列が含まれている可能性があります。
誰かが他のアイデアを持っているなら、それは最も感謝されるでしょう。
ありがとう。
解決
私が知っているほとんどの実装は使用しています deleted
列(ブール値ではなく、タイムスタンプなので、いつ削除されたかがわかります)。はい、これをすべてのクエリに追加する必要がありますが、ORMレイヤーを使用しているので、1回だけ追加する必要がありますか?このようにすることをお勧めします。
Wikipediaは、記事の現在およびアーカイブされたバージョンに複数のテーブルを使用していますが、それはリーグ外であるため、古いバージョンよりもはるかに頻繁に現在のバージョンが要求されるためです。
使用したい場合 RecycleBin
テーブル、あなたは行のシリアル化を検討し、それらをに置くことを検討するかもしれません value
すべての個別の列を保存する代わりに列。もちろん、これは削除されたアイテムの個々の列の内容をクエリする必要がない場合にのみ機能します。
他のヒント
isdeleted列を使用することは良いテクニックです。
これを、通常の削除操作の代わりにフラグを使用するトリガーの代わりに削除と組み合わせることができます。ビューでテーブルを包むこともできます。そうすることで、非削除行のみがビューで露出しています。