2010-11-09 86 views
1

比方說,我有這些SQL表:
一)
B)客戶
C)borrow_history(book_id,CUSTOMER_ID ...)外鍵和n到n的關係

我可以定義兩個從borrow_history參照的外鍵(上刪除級聯),引用本書客戶,所以:當書被刪除

  • borrow_history記錄連接到將被刪除。
  • borrow_history記錄連接到客戶將被刪除當客戶被刪除。

但我怎麼在某種程度上定義外鍵,那個時候他沒有borrow_history連接到他,所以刪除可以遞歸刪除也客戶客戶將被刪除?

是否有可能,還是我必須使用觸發器?

+1

當一本書(及其借閱歷史)出現時,客戶可以預先存在,但當該書(及其借用歷史記錄)不再存在時,客戶也可以先存在不再存在?這聽起來很奇怪。 – onedaywhen 2010-11-10 10:17:50

+0

目標是創造客戶,同時也是第一個借款記錄,換句話說,客戶不能事先存在,意圖不變是客戶在任何時候都不能連接到一些借閱歷史。 – kovarex 2010-11-10 11:26:11

回答

2

你必須爲此使用觸發器。

無論如何,只有在他沒有任何書籍的情況下,用戶不應該被刪除 - 其他因素如上次活動日期非常重要。

我會編寫一個腳本(並使用CRON運行它)刪除沒有任何borrow_history的用戶,並且上次操作的時間超過N天。

另一個提示 - borrow_history指向書中的外鍵應該設置爲ON DELETE RESTRICT。如果借書(或借書)不應該被刪除

+0

謝謝,順便說一句,我沒有經營一家書店:),這只是一個簡單的n對n關係的例子,實際上,我真的需要遞歸刪除所有沒有通過關係連接的數據。 – kovarex 2010-11-09 23:48:26