3

私のプロジェクトのコンセプトは、いくつかの質問をデータベースに挿入し、人々が提供する回答を作成することです。ただし、これらの質問と管理者は後で管理者が変更できます (削除することもできます)。

答えと質問を取り戻す必要があります。ただし、正確な質問と回答を取得する必要があります。つまり、管理者がデータベースでそれらを変更したとしても、正確な質問を意味します。

それは、質問と回答の状態を保存する一種のヒストリー マネージャーです。

データベース全体の履歴などを管理できますが、それを管理するよりスマートな方法はありますか?

4

2 に答える 2

0

解決策 1.トリガー

最も簡単な解決策 (特定のニーズに応じて) は、おそらく on update/insert/delete トリガーをテーブルに追加することです。これにより、データが挿入/更新/削除されたときに追加のログを実行できます。そうすれば、データベースへの手動の介入もカバーされます...

詳細については、 http://dev.mysql.com/doc/refman/5.1/en/triggers.htmlを確認してください。

解決策 2。

バージョン履歴を保持する簡単な方法の 1 つは、基本的に同一のテーブルを作成することです (たとえば、_version 接尾辞を付けて)。どちらのテーブルにもバージョン フィールドがあり、メイン テーブルでは、更新するたびに値を増やします。バージョン テーブルには、(id, version) に複合主キーがあります。

実際のテーブルで更新を行うときはいつでも、重複データを含む新しい行をバージョン テーブルに挿入します。バージョン履歴を見つけたいときはいつでも、SELECT * FROM content_version WHERE id = CONTENT_ID ORDER BY version のようなものを実行するだけです。

Doctrine ORM のようなものを使用する場合、イベント リスナーを介して自動的にこれを行う動作があります。ここで確認できます: http://www.doctrine-project.org/documentation/manual/1_2/en/behaviors#core-behaviors:versionable

ソースから

于 2013-04-10T09:45:40.853 に答える
0

まず、この状況では決して削除しないでください。各行にブール値フラグを作成し、それを 1 に設定して削除をマークしてから、このフラグを考慮しながらすべてのクエリを実行します。これにより、実際に DB からプルーニングするのではなく、削除済みとして「マーク」することができます。

これには、外部キーの関係を完全に混乱させたり、保持したいものを雪崩で削除したりしないという利点もあります。

そこから、データベース トリガーを調べることができます。これらを使用すると、特定の操作 (更新、挿入、削除) で事前に格納されたステートメントを実行できます。これにより、変更の「ログ テーブル」を保持できます。

于 2013-04-10T09:43:51.467 に答える