2011-11-29 68 views
4

我想在SQL Server Management Studio 2008中放置一个数据库,它将管理数据而不必以编程方式处理数据,但此刻我遇到了一些问题。SQL Server双向级联?

我有一个名为person的主表,这个表包含关于一个人的核心数据,并且这个表与一个叫做customer的第二个表相关联,如果他们希望拥有交易许可,它们就包含在这个表中。一旦交易发生,客户ID就被放入交易表中。

|Person| |Customer| |Transaction| 
|------| |--------| |-----------| 
| ID |-\ | ID |-\ | ID  | 
|  | \| person | \| Customer | 
|  | |  | |   | 

在这两个链接中,ID是PK的,次要项目(人/客户)是FK的。 我在这种安排下遇到的问题在于,如果一个人进行了交易并因此他们的客户ID出现在交易表中,那么他必须被保留。

我不是100%确定采取什么方法,客户与交易之间的“删除规则 - 无操作”之间的“删除规则 - 级联”会创建所需的效果吗?

任何想法的方法或更好的方法将非常赞赏在这个问题上。

回答

2

我想,是的,在Customer.Person外键的

ON DELETE CASCADE 

条款,并在Transaction.Customer外键的

ON DELETE NO ACTION 

子句将收到预期的效果。

然后任何企图删除一个人,将删除相关的客户行,除非有相关的Transcations。这会引发错误,并且DELETE将被回滚。

+0

谢谢你的鼓励,它工作正常。 – Jvr

+0

@Jvr,如果这是最好的回答你的问题,确保点击左边的小复选标记将其标记为已接受。 –

0

如果要删除的人在“事务”表中有任何记录,那么只需在人员表上删除触发器即可停止删除。