2008-09-17 76 views
0

我覺得我有一個嚴重的基本/愚蠢的問題,但我從來沒有看到/讀/聽到任何東西在這個方向。覆蓋約束從沒有行動級聯在運行時

說我有一個表用戶(用戶ID,姓名)和表偏好(ID,用戶id,語言)。這個例子是微不足道的,但可以擴展到多層次關係和更多表格的方式.. 當我的UI請求刪除一個用戶時,我首先要顯示一個警告,說明它的首選項也將被刪除。如果在某些時候數據庫被擴展了更多的表和關係,但是軟件沒有相應地調整(客戶端沒有更新),應該顯示一條通用消息。

我該如何執行此操作?用戶界面無法瞭解整個數據結構,因此不應該費心去逐步刪除所有關係以手動刪除所有依賴記錄。
我認爲這將與約束。 約束將是不採取任何行動所以約束將拋出一個可以被UI捕獲的錯誤。 UI收到確認後,約束條件應該變爲級聯

不知怎的,我感覺像我得到這一切錯了..

回答

1

我會做的是這樣的:

  1. 約束是CASCADE
  2. 如果應用程序檢查偏好存在。
  3. 如果他們這樣做,顯示警告。
  4. 如果不存在首選項,或者警告被接受,請刪除客戶端。

即時更改數據庫關係不會是一個好主意!

乾杯,

RB。

0

如果您擔心用戶沒有意識到刪除的完全影響,您可能需要考慮不實際刪除數據 - 而只需在名爲「marked_for_deletion」的列上設置一個標誌即可。 (這些條目可以在安全的時間後被刪除)
缺點是您需要記住過濾掉其他查詢中標記的行。這可以通過在表格上創建一個視圖來濾除標記的行,然後在查詢中始終使用視圖來緩解。