2012-03-27 6 views
2

リレーショナルデータベースでは、参照整合性を維持したままオブジェクトグラフからオブジェクトを削除する処理方法は何ですか?ある時点で、これは起こらなければならない。ソフト削除またはハード削除のいずれか。整合性を保持しながらオブジェクトグラフからオブジェクトを削除する

たとえば、製品が取り外されたとき、その製品を含む注文が依然として関連しているか、またはその製品を含む注文を含む請求書が依然として関連しているかどうかを確認する最良の方法は何ですか?あなたが(なぜなら、それを参照する請求書のあなたのケースでのような)製品が必要

ソリューション1

+0

この質問は重要であり、問​​題はいくつかの非常に信頼できる情報源によって認められています。 –

答えて

2

は、基本的には3「標準ソリューション」があります。これはデータが有効であることを意味し、唯一の変更は「在庫切れ」または「ポートフォリオ外」になることを意味します。いずれにしても、ビジネスプロセスでは、RMA状況やIRS関連の問題などを処理する必要があります。これは、製品を削除してはならないことを意味します。これは、製品のDBデータモデルなどに反映される必要のある製品の「状態」とはちょうど異なるものです。

パフォーマンスに関心がある場合は、いくつかのプロファイリングを行います。必要な場合は最適化オプションが多数あります。 。これらは、通常、「パーティショニング」である技術のRDBMSに依存している - すべてのRDBMSは、柔軟性に異なる独自の仕組みを持っているなど

ソリューション2

あなたが任意のデータでは必要ありません。すべて...ちょうどカスケード削除を行い、それで済むように...

ソリューション3

ヒストリカルデータのみが必要ですが、「将来のビジネスプロセス」ではこのエンティティが必要ないでしょう。この場合、一般的な解決方法は、 "アクティブ/生産的なテーブル"でカスケードされた削除を実行する前に書き込まれるアーカイブテーブルを持つことです。このスキームのわずかな変形は、必要な情報を「従属行」(あなたの場合は請求書)にコピーし、アクティブ/生産的な行(つまりケースの商品)を削除するだけです。

結論

複雑なシステムは、異なるビジネスプロセス/ユースケースの多くに対処するため、上記の技術の全てを採用する傾向がある - それぞれが関与する特定のビジネスプロセス/ユースケースにdepedingその場所を持っています。 ..

0

名前のない出所からの回答です。私はこれを言うだろう、彼はかなり尊敬され、敬意を表し、私は彼の名前を掲載するつもりはない。

私はここで自分の答えを受け入れるつもりではなく、恩恵を迂回するつもりはありませんが、彼の答えを示しています。

"完全な機能を備えたRDBMSを使用すると、" deleted_or_not "カラムでテーブルを分割することができます。これにより、すべての実稼働ローがコンパクトに格納されます。廃止予定のデータを表示したくない場合レポートにcustomers_including_deleted_rowsなどのわかりにくい名前をテーブル全体に付与し、ほとんどのアプリケーションコードが問い合わせるビュー "customers"(実際の行のみを含む)を作成するだけです。これはもちろん、周囲の古いデータ"

関連する問題