我正在尝试在SQL Server Management Studio 2008中组建一个数据库,该数据库将管理数据而无需以编程方式处理数据,但我现在遇到了一些问题.
我有一个名为person的主表,该表包含有关某人的核心数据,并且这个表链接到第二个名为customer的表,如果他们希望拥有交易权限,则会将其包含在内.交易完成后,客户ID将被放入交易表中.
|Person| |Customer| |Transaction|
|------| |--------| |-----------|
| ID |-\ | ID |-\ | ID |
| | \| person | \| Customer |
| | | | | |
在这两个链接中,ID是PK,而次要项目(人/客户)是FK.
我在这种安排中遇到的问题在于,如果他们进行了交易,则必须保留一个人,因此他们的客户ID出现在交易表中.
我不是百分之百确定采取什么方法,客户之间的“删除规则 – 没有行动”的人 – 客户之间的“删除规则 – 级联”会产生预期的效果吗?
在这个问题上,我们非常赞赏任何想法或更好的方法.
最佳答案 我想,是的,是的
ON DELETE CASCADE
Customer.Person外键中的子句,和
ON DELETE NO ACTION
Transaction.Customer外键中的子句将具有所需的效果.
然后任何删除Person的尝试都将删除相关的Customer行,除非有相关的Transcations.这将引发错误,DELETE将被回滚.