1

我有一个与外键有关的问题。我正在使用 SQL Server 2008。

有 2 个表,客户和发票,它们看起来像这样:

客户表:
CustomerID
Name
Address

发票表:
InvoiceID
Date
CustomerID

Customer 表中的 CustomerID 列是主键,Invoice 表中的 CustomerID 列有外键。

我想删除 Customer 表中的一行,但删除 Invoice 表中的连接行。有没有办法做到这一点?

编辑:
我忘了提到已删除的客户存储在日志表中,因此 ID 仍然存在,但在不同的表中

4

2 回答 2

6

“我想删除 Customer 表中的一行,但不删除 Invoice 表中的连接行。”

外键的全部和全部目的是防止您这样做。

该约束强制执行规定发票必须属于客户的规则。那么,如果发票不属于客户,这在您的应用程序中意味着什么?它应该属于什么?

或者用商业术语来说,如果发票没有支付它的客户?


当然,我的咆哮假设这Invoice.CustomnerID是一个强制性列。也许您的数据模型允许它是可选的。在这种情况下,将列设置为 NULL,然后您可以删除客户记录。鉴于基本的业务规则——必须支付发票(否则公司破产)我认为这将是一个有缺陷的数据模型,但是,嘿!

于 2013-01-02T13:07:45.313 回答
0

从SQL Management Studio调整您的FK约束如这里。突出显示的删除规则轮廓概述了要暗示在相关的表记录上的强制执行,我看到的批准选项可以在下拉列表中设置默认值或设置空值。请考虑所附图片。

在此处输入图像描述

于 2013-01-02T13:10:38.130 回答