问题标签 [constraints]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
3343 浏览

database - 我应该检查代码中的 DB 约束还是应该捕获 DB 抛出的异常

我有一个将数据保存到名为 Jobs 的表中的应用程序。Jobs 表有一个名为 Name 的列,它有一个 UNIQUE 约束。Name 列不是 PRIMARY KEY。我想知道在尝试保存/更新新条目之前是否应该自己检查重复条目,或者是否最好等待数据访问层抛出异常。如果它很重要,我正在为这个应用程序使用 NHibernate


感谢大家的大力投入。

我找到了另一个原因,为什么我应该在代码中进行验证,而不仅仅是等待抛出异常(并被我的代码捕获)。似乎 NHibernate 只会抛出一个 NHibernate.Exceptions.GenericADOException ,这对于这种情况下异常的原因并不是很丰富。还是我在这里错过了 NHibernate 的一个方面?

0 投票
2 回答
20592 浏览

database - 有没有办法在 db2 v7 中启用/禁用约束?

我必须将表从 Oracle 数据库复制到 db2 v7 数据库中,为了做到这一点(避免数百万次删除和创建),我想知道 db2 是否具有类似 Oracle 的功能,可以临时启用/禁用约束而不删除他们。

在此先感谢,毛罗。

0 投票
4 回答
751 浏览

sql - 如何在 SQL 表中最好地执行单级递归?

假设您的组织中有一个分支表。其中一些是“主要”分支机构,而另一些则是延伸到主要分支机构的卫星办公室。除了这种只影响系统中一些事情的区别之外,分支都是对等的并且具有相同的属性(地址等)。对此建模的一种方法是在如下表中:

Where is_satellite_office= 1 如果这条记录是另一个分支的附属,并且satellite_to_branch_id指的是你是哪个分支的附属,如果有的话。

对表施加约束很容易,以便这两列在任何给定记录上达成一致:

但是,我真正想要的是一种方法来保证这种递归只深入一层......也就是说,如果我指向一个分支作为我的父级,它本身一定没有父级,并且它的值is_satellite_office必须是0. 换句话说,我并不真正想要一个完全递归的树结构,我只是想将其限制为单个父/子关系。这就是我要编写代码的方式,如果有一种方法可以在数据库中强制执行它不会像完全废话一样执行,我愿意。

有任何想法吗?我正在研究 MSSQL 2005,但首选通用(非供应商特定)解决方案。并且不需要应用触发器,除非真的没有其他方法可以做到这一点。

编辑:要清楚,satellite_to_branch_id是指向同一分支表中另一条记录的递归指针。我知道我可以删除is_satellite_office BIT并依赖IsNull(satellite_to_branch_id)给我相同的信息,但我发现明确一点更清楚,除此之外,这不是问题的要点。我真的在寻找一种纯 SQL 约束方式来防止递归深度大于 1。

0 投票
4 回答
2549 浏览

sql - 使用触发器强制约束

我正在尝试以一种我认为约束无法实现的方式在表上强制执行完整性...

我要应用的约束是,对于相同的“fk_item_id”,不应有任何具有重叠日期的条目。

笔记:

invalid_from 是有效期之后的瞬间。
这意味着以下两个时期都很好......

  • '2008 Jan 01 00:00' -> '2008 Feb 01 00:00' (整个 1 月)
  • '2008 年 2 月 1 日 00:00' -> '2008 年 3 月 1 日 00:00'(整个 2 月)

我可以在触发器中检查该规则。但是,当触发器确实发现非法插入/更新时,防止“非法”插入/更新发生的最佳方法是什么?

(如果insert包含两条有效记录和两条无效记录,我可以只停止两条无效记录吗?)

干杯,
德姆斯。

编辑:

在我上面的情况下,使用函数的约束效果很好。但我从来没有弄清楚为什么 RAISERROR 在触发器版本中不起作用。

我认为这是因为触发器是 AFTER 触发器,我需要一个 BEFORE 触发器,但这似乎不是一个选项......

0 投票
4 回答
1356 浏览

grails - 如何将 Grails 中由组合框表示的字段设为可选?

我正在使用 Grails 进行第一次实验,并且正在寻找一种方法让组合框表示的字段(例如一对一的域关联和具有窄范围约束的数字)是可选的,即应该有一个空的在组合框中输入。

如何做到这一点?我已经尝试nullable:true在静态属性中添加约束和列出字段optionals,但都没有产生所需的结果。

这些是我的域类:

0 投票
3 回答
586 浏览

sql-server - SQL Server - 根据另一列强制在一列中的唯一性

抱歉,如果我弄错了术语。如何在 MSSQL Server 2005 中定义约束以根据另一列强制一列的唯一性?

例如考虑最后两列:

0 投票
5 回答
893 浏览

database - DB约束可以忽略现有记录并仅申请新数据吗?

我想了解不同数据库引擎的答案,但在我们的例子中;我们有一些记录对于一列来说不是唯一的,现在我们想让该列唯一,这迫使我们删除重复值。我们使用 Oracle 10g。这合理吗?还是这类似于 goto 语句:) ?我们真的应该删除吗?如果我们有数百万条记录怎么办?

0 投票
2 回答
2552 浏览

sql - 在 MS SQLServer 中交换两行保留原始主键且无需手动更新

我有以下问题:我有像

我想交换它们,保留所有旧的主键和约束。当然,我可以通过更新行轻松地手动解决这个问题。我有点想知道是否有人对此类问题有任何出色的解决方案,而不仅仅是手动执行更新命令。我真的非常感谢任何建议或建议。

0 投票
2 回答
38532 浏览

sql - T-SQL:如何创建区分大小写的唯一键?

如何在varchar区分大小写的字段上创建唯一约束 (SQL Server 2005)?

目前我的约束看起来像这样:

当我尝试插入以下两个值时,我收到“违反 UNIQUE KEY 约束...”错误。

我希望将两个不同大小写的值作为 unqiue 处理。我想它将涉及以下代码,但我不知道它如何改变我的add constraint语法。

0 投票
2 回答
433 浏览

mysql - 当未设置某些列时,如何使mysql无法插入行?

我遇到了一个问题,可以在没有专门设置 INT NOT NULL 列的情况下将行插入表中(默认为 0,这对我的目的无效)

我以这种方式创建表:

我希望这个插入失败:

不幸的是,这行得通。(没有节点 WHERE ID=0)

有什么办法可以强制这个插入失败,而不是为插入创建触发器?

提前致谢,

克里斯

PS我正在使用mysql Ver 14.12 Distrib 5.0.45,用于redhat-linux-gnu(x86_64),使用readline 5.0