Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 在INSERT语句期间使用CHECK约束验证数据是否是一种好的做法_Oracle_Validation_Plsql_Check Constraints - Fatal编程技术网

Oracle 在INSERT语句期间使用CHECK约束验证数据是否是一种好的做法

Oracle 在INSERT语句期间使用CHECK约束验证数据是否是一种好的做法,oracle,validation,plsql,check-constraints,Oracle,Validation,Plsql,Check Constraints,在将数据插入表、使用检查约束或使用if语句之前,哪种方法被认为是更好的验证数据输入的方法?有没有更好的方法来验证它 (一) (二) 如果更新/插入可以来自多个应用程序/脚本,特别是临时查询,那么检查约束将所需的业务逻辑放在一个位置,这是一件好事 如果更新/插入来自一个应用程序/源,那么最好在应用程序(在本例中是存储过程)中进行检查 拥有一个检查约束是一个包罗万象的问题,但它有点隐蔽。如果更新/插入可以来自多个应用程序/脚本,特别是临时查询,那么检查约束可以将所需的业务逻辑放在一个位置,这是一件好

在将数据插入表、使用检查约束或使用if语句之前,哪种方法被认为是更好的验证数据输入的方法?有没有更好的方法来验证它

(一)

(二)


如果更新/插入可以来自多个应用程序/脚本,特别是临时查询,那么检查约束将所需的业务逻辑放在一个位置,这是一件好事

如果更新/插入来自一个应用程序/源,那么最好在应用程序(在本例中是存储过程)中进行检查


拥有一个检查约束是一个包罗万象的问题,但它有点隐蔽。

如果更新/插入可以来自多个应用程序/脚本,特别是临时查询,那么检查约束可以将所需的业务逻辑放在一个位置,这是一件好事

如果更新/插入来自一个应用程序/源,那么最好在应用程序(在本例中是存储过程)中进行检查


检查约束是一种包罗万象的约束,但它有点隐蔽。

这取决于-通常需要采用多层次的方法

例如,您可能有一组简单的业务规则,这些规则可以作为检查约束直接在数据库中维护。我仅将这些用于简单、独立的检查

示例-检查Y/N标志:

alter table example_table add constraint ck_example_table_flag
check (flag is null or flag in ('Y', 'N');
在这种情况下,如果您在该列中获得任何其他值,您就知道数据是错误的,并且这不是一个将随时间而改变的规则。添加此约束将防止任何应用程序损坏您的数据

对于可能不自包含的更复杂的业务规则,例如,如果日期取决于输入值的人员或另一个表中另一个字段的内容,则我将在“应用程序”中处理此问题

有时“应用程序”是数据库——在这种情况下,检查约束可能位于表触发器或处理所有表更新的打包pl/sql中。例如:

example_app.update_data(id => 1000, value => 'foo');
如果这就是处理数据更新的方式,那么将业务规则作为检查约束、通过检查触发或直接在
update\u data
过程中处理也没有什么错

在许多企业环境中,应用程序层和数据库层将由不同的团队处理。如果您在支持应用程序层的团队中,您可能会发现为数据库团队提出更改请求以设置检查约束太痛苦了——在这种情况下,向应用程序层添加一点逻辑会让您感觉更简单。相反,数据库团队可能会发现它更简单


@波希米亚人喜欢在有多个客户端时使用检查约束来强制执行数据完整性。

这取决于-通常需要采用多层方法

例如,您可能有一组简单的业务规则,这些规则可以作为检查约束直接在数据库中维护。我仅将这些用于简单、独立的检查

示例-检查Y/N标志:

alter table example_table add constraint ck_example_table_flag
check (flag is null or flag in ('Y', 'N');
在这种情况下,如果您在该列中获得任何其他值,您就知道数据是错误的,并且这不是一个将随时间而改变的规则。添加此约束将防止任何应用程序损坏您的数据

对于可能不自包含的更复杂的业务规则,例如,如果日期取决于输入值的人员或另一个表中另一个字段的内容,则我将在“应用程序”中处理此问题

有时“应用程序”是数据库——在这种情况下,检查约束可能位于表触发器或处理所有表更新的打包pl/sql中。例如:

example_app.update_data(id => 1000, value => 'foo');
如果这就是处理数据更新的方式,那么将业务规则作为检查约束、通过检查触发或直接在
update\u data
过程中处理也没有什么错

在许多企业环境中,应用程序层和数据库层将由不同的团队处理。如果您在支持应用程序层的团队中,您可能会发现为数据库团队提出更改请求以设置检查约束太痛苦了——在这种情况下,向应用程序层添加一点逻辑会让您感觉更简单。相反,数据库团队可能会发现它更简单


@当有多个客户端时,使用检查约束来加强数据完整性是一个波希米亚式的想法。

支持使用检查约束的另一个考虑因素是,它们可以通过允许优化人员推断某些值不能出现在表中来提高性能

如果存在限制日期列检查以下内容的约束:

我的列>日期“2010-01-01”

。。。带有谓词的查询,例如:

my_col=日期“2009-01-01”


。。。可以确定不会从该表返回任何行。

支持使用检查约束的另一个考虑因素是,它们可以通过允许优化人员推断某些值不能出现在表中来提高性能

如果存在限制日期列检查以下内容的约束:

我的列>日期“2010-01-01”

。。。带有谓词的查询,例如:

my_col=日期“2009-01-01”

。。。可以确定不会从该表返回任何行