2

データベースにAppointmentsテーブルとCentersテーブルの関係を設定しようとしています。

システムに関する1つの癖は、ユーザーのエリアにセンターが記録されていない場合でも、予定を記録できるようにする必要があることです。この場合、リンクcentreidの値は0になります。

これは、次のエラーが発生していることを意味します。

ALTERTABLEステートメントがFOREIGNKEY制約'fk_appointments_centres"と競合しました。

関係を作成するために使用しているコードは次のとおりです。

alter table appointments
add constraint fk_appointments_centres
foreign key (centreid)
references centres(centreid)
on delete cascade
go

クライアントはシステムからセンターを削除する機能を必要としているため、これは非常に重要です。その場合、データを適切に維持するために、センターが削除された場合はセンターの予定も削除する必要があります。

理想的には、この関係を機能させたいのですが、Centersテーブルのcenterid列がそうであるように、IDENTITY_INSERT ONこれは機能しないと思います。

他に2つのオプションが考えられますが、それらは理想的ではないため、可能であればこれを機能させたいと思います。

誰かが私を助けることができますか?

編集
MSDNで、誰かが既存のデータを検証しないことを勧めたところを見たところです。これはうまくいくようですが、これは今後のデータ入力にどのように影響しますか?ここで参照

4

1 に答える 1

0

存在しない参照IDを持つ可能性のある列のレコードにFKを設定するのは良い考えではないと思います!(参照先のID 0のセンターはありますか?)

1:0を使用する代わりに、代わりにNULLを使用してみてください。それならFKが機能するからです。

2:この参照をサポートできるIDなどの特別なIDを使用して「admin」レコードを作成します

3:最後のケースでは、そのテーブルでDeleteトリガーを使用して「手動」にすることができますが、その解決策はお勧めしません。

于 2012-09-04T07:56:31.360 に答える