1

外部キーに関連する問題があります。SQL Server 2008 を使用しています。

Customer と Invoice の 2 つのテーブルがあり、次のようになります。

Customer テーブル:
CustomerID
Name
Address

請求書テーブル:
InvoiceID
Date
CustomerID

Customer テーブルの CustomerID 列は主キーであり、Invoice テーブルの CustomerID 列には外部キーがあります。

Customer テーブルの行を削除したいのですが、Invoice テーブルの接続された行は削除しません。それを行う方法はありますか?

編集:
削除された顧客がログテーブルに保存されていることを忘れていたので、IDはまだ存在しますが、別のテーブルにあります

4

2 に答える 2

6

「Customer テーブルの行を削除したいのですが、Invoice テーブルの接続された行は削除しません。」

外部キーの全体的なポイントは、これを防ぐことです。

制約は、請求書が顧客に属していなければならないというルールを適用します。Invoice が Customer に属していない場合、アプリケーションではどのような意味になるのでしょうか? 代わりに何に属すべきですか?

または、請求書に支払う顧客がいない場合、ビジネス用語で言えば?


当然のことながら、私の暴言は、それInvoice.CustomnerIDが必須のコラムであると想定しています。おそらく、あなたのデータモデルではオプションにすることができます。その場合、カラムを NULL に設定すると、Customer レコードを削除できます。基本的なビジネス ルール - 請求書を支払わなければならない (または会社が倒産する) ことを考えると、これは欠陥のあるデータ モデルだと思いますが、ちょっと!

于 2013-01-02T13:07:45.313 に答える
0

こちらのように、SQL Management Studio から FK 制約を調整します。強調表示された削除ルールは、関連するテーブル レコードに暗示する強制の種類の概要を示しています。適切なオプションは、ドロップダウンで Set Default または Set Null にすることができます。添付画像をご検討ください。

ここに画像の説明を入力

于 2013-01-02T13:10:38.130 に答える