SQL删除外键问题

Mar*_*arc 1 sql foreign-keys sql-server-2008

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

有两个表,Customer和Invoice,它们看起来像这样:

客户表:
CustomerID
名称
地址

发票表:
InvoiceID
日期
CustomerID

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

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

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

APC*_*APC 6

"我想删除Customer表中的一行,但不删除Invoice表中的连接行."

外键的整个和整个点是为了防止你这样做.

约束强制执行规则,该规则声明发票必须属于客户.那么,如果发票不属于客户,那么在您的申请中意味着什么?它应该属于什么?

或者以商业术语来说,如果发票没有付费的客户


对于copurse,我的咆哮假定这Invoice.CustomnerID是一个强制性的专栏.也许您的数据模型允许它是可选的.在这种情况下,将teh列设置为NULL,然后您可以删除Customer记录.鉴于潜在的业务规则 - 必须支付发票(或公司破产)我认为这将是一个有缺陷的数据模型,但嘿!

  • @Marc - 为什么单独的表而不是`is_deleted`标志或`deleted_date`?你可以有一个过滤器,以显示只有活跃的客户. (2认同)