2012-03-23 7 views
0

私はPlantGroupsのテーブルを持っているとしましょう。彼らはテーブルPlantsに依存しており、外部キーPlantIdを持っています。各PlantGroupには1つのプラントのみが含まれています。外部キーの関係を削除できる状況でデータの整合性を維持する方法

テーブル植物のレコードが削除され、または削除するように要求された場合
PlantGroups 
========== 
...data... 
PlantId 

Plants 
====== 
PlantId 

、どのようなプロセスは、PlantGroupsのデータの整合性を確保するために取られるべきですか?

さらに、対応するPlantGroupsレコードの他のデータ(削除が要求されたPlantsレコードに依存していたデータ)は、依然として関連性があり、保存する価値がありますか?

答えて

0

私はOption Otherと一緒に行くつもりです。 Oracles(NULL、CASCADE、RESTRICT、NO ACTION、DEFAULTをオプションとしてリストアップしている)を含む、私が読んだデータ整合性ガイドでは定義されていませんが、私は自分自身をロールバックします。

他の誰かが私により良いアプローチを納得させない限り、これが起こります。

PlantGroups 
=========== 
... data ... 
PlantId 

Plant 
===== 
PlantId 
bool isActive 

Plant isActiveの削除時にfalseに設定されます。これにより、データベースの管理に多くの余分なロジックが含まれますが、これらの依存フィールドの浅い削除が可能になります。カスケード削除オプションは、特定の年数を超えて廃止されたデータを処理するための最終的な選択肢となるでしょう。

あるいは

Iはまた、第1および保持データを削除同じスキーマた第二のデータベースを有することができます。

1

PlantGroupsが複数のPlantを持つことができる場合は、PlantGroupIDとPlantIDを持つ余分なテーブルが必要です。

達成しようとしていることに応じて、植物がない場合はPlantGroupを削除するロジックが必要な場合があります。しかし、空のグループを見落としたり、グループに植物を追加する必要があるときに表示するなど、空のグループを無視するロジックを追加する方が簡単かもしれません。

その他の質問については、カスケード削除を調べる必要があります。他の人がその情報をもっと多く提供できるかもしれません。

+0

編集した質問では、各プラントグループには1つのプラントしか含めることができません。 –

+0

ロジックを追加することは、私がやろうとしていることですが、私は他人が何を言わなければならないのか不思議です。私はカスケードの削除を認識していますが、質問に記載されているように、私はまだ関連するデータのためにそれを避けたいと思います。 –

+1

最新のプラント(またはプラントに関連するその他の情報)などの情報をプラントグループに保存し、現在のプラントを削除して後で新しいプラントに更新できるようにすることができます。あるいは、プラントのステータスを削除したことを示すようにプラントのステータスを保持して、他のロジックが情報に基づいたアクションを実行できるようにすることもできます。検索結果にアクティブなものを表示しない、または削除されていないプラントがあるまでフィールドを更新できないようにするなどです。これは、システムがこれらの関係をより動的か静的にする必要があるかどうかによって異なります。 – jheep

関連する問題