2011-11-29 74 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

如果要刪除的人在「事務」表中有任何記錄,那麼只需在人員表上刪除觸發器即可停止刪除。