從建模的角度看,在這種情況下,我對上移動「軟刪除」行到另一臺(例如日誌表),並使用硬刪除APC的評論傾斜。
另一種選擇(未測試)是包括在參考約束軟刪除列,如:
CREATE TABLE dept (
dept_id number,
alive number,
constraint alive_ck check (alive in (0,1)),
constraint dept_pk primary key (dept_id, alive),
constraint dept_uk unique (dept_id)
);
CREATE TABLE emp (
emp_id number,
dept_id number,
alive number,
constraint emp_pk primary key (emp_id),
constraint emp_dept_fk
foreign key (dept_id, alive)
references dept (dept_id, alive)
);
注意,部門表過的dept_id獨一無二的,但也有一個約束過度(dept_id爲,alive)來允許emp的引用約束。
這意味着您的應用程序現在需要在軟刪除一個部門的同時更新所有的emp行,並且如果您沒有對其進行編碼,那麼該約束將有效地確保該部門不能被軟刪除,除非emps首先被刪除(或軟刪除 - 儘管你必須使約束延遲才能工作)。
我不認爲你可以用外鍵約束來做到這一點。我認爲你最好的選擇將是一個觸發器。你想要一個例子嗎? – 2013-03-12 21:00:58
如果您從表中刪除一行並收到錯誤,則會拋出異常。你如何更新你的國旗?在單獨的過程中還是在刪除過程中?沒有1和0是Integr的一部分。約束。您只能添加檢查約束,例如,您的標誌位於1或0的位置。如果這有意義,您也可以考慮觸發器來更新某些其他表中的某些值。請發佈樣本數據,表格,數據等... – Art 2013-03-12 21:01:47
感謝您的意見。我正在考慮一個觸發器,但希望我能夠更簡單地做一些約束。謝謝您的幫助。我會用一個觸發器來代替... – RNJ 2013-03-12 21:10:21