从建模的角度看,在这种情况下,我对上移动“软删除”行到另一台(例如日志表),并使用硬删除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