sql - 一个检查约束还是多个检查约束?

标签 sql oracle database-design check-constraints

关于检查约束越少越好还是更多的任何建议?如果有的话,它们应该如何分组?

假设我有 3 列是 VARCHAR2(1 BYTE) , 每个都是一个 'T'/'F' 标志。我想为每列添加一个检查约束,指定只有字符 IN ('T', 'F')被允许。

我应该有 3 个单独的检查约束,每列一个:

COL_1 IN ('T', 'F')

COL_2 IN ('T', 'F') 

COL_3 IN ('T', 'F')

或单个检查约束:
COL_1 IN ('T', 'F') AND COL_2 IN ('T', 'F') AND COL_3 IN ('T', 'F')

我的想法是最好将这三个分开,因为这些列在逻辑上彼此无关。我有一个检查多个列的检查约束的唯一情况是,一个列中的值与另一列中的值之间是否存在某种关系,例如:
(PARENT_CNT > 0 AND PRIMARY_PARENT IS NOT NULL) OR (PARENT_CNT = 0 AND PRIMARY_PARENT IS NULL)

最佳答案

保持分开,它们是不同的列。另外,错误信息会显示失败的检查约束名称,您将更好地知道问题出在哪里。 future 的开发人员会困惑为什么它们都在一起,或者因为它们在不同的列上而不会注意到它们。

关于sql - 一个检查约束还是多个检查约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457344/

相关文章:

oracle - Java 应用程序的 Oracle TNS 效率低下(许多往返、延迟)的任何解决方案?

mysql - 本地化现有数据库

php - 如何将sql变成多条语句的事务?

mysql - 如何编写一个 mysql 查询,从一个表读取数据并写入另一个表?

mysql - 从 Oracle 到 MS-Access 再到 Mysql

sql - 临时中间表

database - 游标与重复代码/逻辑

c# - 用于图像和文档的 SQL 列的数据类型

sql - 在 MS Access 中实现 ROW_NUMBER/PARTITION BY

mysql - 我如何分组和 "prefer"一行