【问题标题】:Insert Data ignoring contraints on Database插入数据忽略数据库上的约束
【发布时间】:2012-06-04 13:37:27
【问题描述】:

我的应用程序有一个复杂的数据模型,其中多个表具有复杂的关系。 UI 负责验证用户输入。但是,我有一个要求,用户希望暂时保存他的数据(有点像草稿),以便他可以继续对其进行更改一段时间,直到他满意为止。在这种情况下,验证不需要在那里,因为他可能不会立即输入一些强制性属性。虽然在这种情况下我可以轻松关闭验证,但数据库级别的 NON NULL 约束和引用完整性不允许我这样做。

还有哪些其他可行的方法来做这样的事情?由于涉及的表格太多,我不希望复制它们以让用户在一些临时表格中插入数据,直到最终确定他的草稿。

【问题讨论】:

  • 就像 David aldridge 指出的那样,您可以使用可延迟(最初是延迟的)约束,这将检查提交的约束,但不确定您是否希望在用户考虑一定数量的情况下对您的数据库进行开放事务时间。我会考虑通过一些向导按顺序引导用户完成这些步骤,随时在应用程序端保存数据,最后以正确的顺序插入数据库。

标签: oracle oracle11g validation nullable


【解决方案1】:

看看可延迟的约束:

create table daa_delete_me (col1 number not null deferrable);

alter session set constraints = deferred;

insert into daa_delete_me values (null); -- succeeds

commit; -- fails

insert into daa_delete_me values (null);

update daa_delete_me set col1 = 1;

commit; -- succeeds

【讨论】:

  • 使用可延迟约束,如果提交失败,将自动发出回滚。
  • 是的,这是真的,但如果 UI 确实负责验证,那么这不应该工作。很多时候我认为开发人员依赖应用程序而不应用数据库约束,所以这似乎是一个很好的折衷方案。
猜你喜欢
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多