SQL Server双向级联?
问题描述:
我想在SQL Server Management Studio 2008中放置一个数据库,它将管理数据而不必以编程方式处理数据,但此刻我遇到了一些问题。SQL Server双向级联?
我有一个名为person的主表,这个表包含关于一个人的核心数据,并且这个表与一个叫做customer的第二个表相关联,如果他们希望拥有交易许可,它们就包含在这个表中。一旦交易发生,客户ID就被放入交易表中。
|Person| |Customer| |Transaction|
|------| |--------| |-----------|
| ID |-\ | ID |-\ | ID |
| | \| person | \| Customer |
| | | | | |
在这两个链接中,ID是PK的,次要项目(人/客户)是FK的。 我在这种安排下遇到的问题在于,如果一个人进行了交易并因此他们的客户ID出现在交易表中,那么他必须被保留。
我不是100%确定采取什么方法,客户与交易之间的“删除规则 - 无操作”之间的“删除规则 - 级联”会创建所需的效果吗?
任何想法的方法或更好的方法将非常赞赏在这个问题上。
答
我想,是的,在Customer.Person
外键的
ON DELETE CASCADE
条款,并在Transaction.Customer
外键的
ON DELETE NO ACTION
子句将收到预期的效果。
然后任何企图删除一个人,将删除相关的客户行,除非有相关的Transcations。这会引发错误,并且DELETE将被回滚。
答
如果要删除的人在“事务”表中有任何记录,那么只需在人员表上删除触发器即可停止删除。
谢谢你的鼓励,它工作正常。 – Jvr
@Jvr,如果这是最好的回答你的问题,确保点击左边的小复选标记将其标记为已接受。 –