【发布时间】:2013-03-12 20:24:01
【问题描述】:
我有一个具有 alive 列的表(称为表 A)。此列可以为 1 或 0。如果为 0,则表示已删除。这是软删除。
我遇到的问题是我想验证此表中行的外键约束。如果我要从表 A 中删除一行,那么由于它与其他行的关系,它通常会通过外键约束。这是好的和预期的。我遇到的问题是,由于我的删除是软的(只是更新一个标志),我在删除时没有得到任何约束检查。这意味着我需要手动检查关系。
我是否可以向使用 1 和 0 作为完整性约束的一部分的 oracle 表添加约束?例如,如果我将 alive 列更新为 0,它将达到约束,因此不允许将列更改为 0。
我可以这样做吗?
希望这是有道理的。
谢谢
【问题讨论】:
-
我认为你不能用外键约束来做到这一点。我认为你最好的选择是触发器。你想要一个例子吗?
-
如果您从表中删除一行并收到错误,则会引发异常。你如何更新你的旗帜?在单独的过程中还是在删除期间?没有 1 和 0 是 integr 的一部分。约束。例如,您只能在标志为 1 或 0 的地方添加检查约束。如果这有意义,您可能还会想到会更新某些其他表中的某些值的触发器。请发布示例数据、表格、数据等...
-
感谢您的 cmets。我正在考虑一个触发器,但希望我能够在一些约束下更简单地做到这一点。谢谢您的帮助。我将使用触发器...
-
我真的不知道你想在这里发生什么。您是否要确保软删除不会发生在具有子行的行上? “打破约束”是什么意思?
-
这类问题是正确思考的人反对软删除而偏爱硬删除和日志表的原因。
标签: sql oracle oracle10g constraints