0

限られた量のデータを保持するテーブル(A)があり、主キーであるフィールドの1つが、1つではなく、他のテーブルからの多くの外部キーによって参照されているとします。

これらのテーブルの外部キーには、前述のテーブル(A)に対する制約があり、テーブル(A)の行が削除され、他のテーブルFKの1つがその行への参照を保持している場合、削除は失敗します。

OK、データベース設計が処理されたので、ソフトウェア、この場合はPHPの問題になりました。テーブル(A)から行を削除しようとしましたが、参照が保持されている場合に行を削除できないことを確認するには、どのようにチェックする必要がありますか?

すべてのテーブルを事前にチェックする場合がありますが、これにはすべてのチェックでコーディングが必要であり、メンテナンスの悪夢になります。さらに、これはクロスデータベースアプリケーションである必要があるため、単純に削除を試みることはできません。したがって、返されるエラーコードは一貫していません。

私は人々が通常このシナリオにどのように取り組むかを知りたいと思っています。PHPを使用していると述べましたが、この状況はどの言語にも当てはまるはずです。

4

1 に答える 1

1

一般に、これを処理するには、PRIMARY KEYテーブルでDELETEステートメントを実行し、例外をトラップし、発生したときにトランザクションをロールバックします。その後、ユーザーに任意の形式で障害を報告できます。これは、すべての参照テーブルが実際にFOREIGNKEYをPRIMARYKEYテーブルに宣言している場合に機能します。

最初に本当にチェックする必要がある場合は、データベースに存在するキーを「イントロスペクト」するコードを記述し、参照する外部キーごとにテーブルと列の名前を抽出し、各テーブルに対してSELECTCOUNTを発行する必要があります。残念ながら、各データベースエンジンには、データベース構造について学習するための独自のメソッドがあるため、サポートするデータベースエンジンごとにコードを作成する必要があります。

于 2012-10-31T02:19:58.527 に答える