3

アプリケーションにはバグがあるか、更新時にバグが発生し、適切なテスト スイートを使用しても、数か月または数年後に検出された隠されたバグ、孤立したレコード、どこにも指していないキーなどが生成されます。

Rails はデータベース レベルで参照整合性を強制しませんが、他の場所で説明したいくつかの正当な理由により、そのまま維持されますが、データベースが一貫した状態にあるかどうかを確認できるツールがあると便利です。

モデルは「あるべき」ものを記述しているため、オフライン ツールですべてのデータの整合性を検証することは可能ではないでしょうか。データをバックアップする前に、または単に開発者の睡眠のために定期的に実行できます。

このようなことはありますか?

4

2 に答える 2

2

私はそのようなツールを知りません。少なくとも、参照整合性の危険性については認識しています。では、なぜ自分を苦しめるのでしょうか。dportasが示唆しているように、そもそも外部キー参照を使用するだけです。

移行で使用するには、次のようなものを追加します。

execute('ALTER TABLE users ADD FOREIGN KEY (language_id) REFERENCES languages(id)')

ユーザーのlanguage_id列が、languagesテーブルの有効な行を参照するようにします。

DBMSによっては、これによって自動的にインデックスが作成されます。これらのタスクに使いやすいエイリアス関数を定義するrails用のプラグイン(pg_on_railsをチェックしてください)もあります。

バックアップファイルでのみ整合性をチェックすることは、エラーがすでに発生しており、データがすでに混乱している可能性があるため、無意味です。(私はそこに行ったことがあります)一方、上記のように外部キー制約を使用すると、整合性を台無しにするすべての操作が失敗します。

痛みを感じたとき(=手術を受けたとき)に歯科医に行くことと、魔法の歯磨き粉で一度歯を磨くことで、一生歯が元気になることを保証するものと考えてください。

考慮すべきもう1つのこと:破損したデータを挿入しようとするコードで例外が発生するため、アプリケーションのエラーを見つけるのがはるかに簡単になります。

したがって、外部キー制約を使用してください。これらのステートメントを既存のデータベースに簡単に追加できます。

于 2010-09-06T17:33:17.523 に答える
0

DBMS を使用して RI を適用するのはどうですか? それを行うためにRailsは必要ありません。

于 2010-09-01T22:20:25.013 に答える