使用check约束执行业务规则--

使用check约束执行业务规则--

ID:20438224

大小:55.50 KB

页数:4页

时间:2018-10-13

使用check约束执行业务规则--_第1页
使用check约束执行业务规则--_第2页
使用check约束执行业务规则--_第3页
使用check约束执行业务规则--_第4页
资源描述:

《使用check约束执行业务规则--》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、使用CHECK约束执行业务规则>>  如果你不熟悉CHECK约束,那么习惯上它们通过限制插入到一个字段中的值来执行字段域完整性。我发现CHECK约束很不幸地被用于大多数的数据模型中。在大多数的案例中,我看到使用触发器来执行业务规则,而这本来是应该用一个CHECK约束来执行的。我个人使用CHECK而不是触发器是基于很多个原因的。首先,我不需要浪费时间来写专门的代码。另外,CHECK约束是在数据库修改通过数据库引擎完成之前执行的,然而触发器是事故发生后检查的。使用触发器延长了一个事务的生命,如果检测到一个回滚事件那么代价可能是昂贵的

2、。  SQLServer允许你定义检查单独字段完整性的字段级别的CHECK约束。此外,SQLServer允许你使用一个表级别CHECK约束来检查多个字段的值。虽然它们被归类为表级别约束,但是这些CHECK约束的类型实际上是在行级别上检查的。最后,CHECK约束通过检查一个定义好的情形来看它的值为TRUE还是FALSE。  让我们来看看一些例子。我将建立一张示例表EMPLOYEE。作为表定义的一部分,我们将执行一个公司规则:在我们的系统中没有一个员工被允许赚取超过$100,000或者少于$30,000。   CREATETABLE

3、DBO.EMPLOYEE  (  EMPLOYEEIDINTIDENTITY(1,1)NOTNULL,  FIRSTNAMEVARCHAR(50)NOTNULL,  LASTNAMEVARCHAR(50)NOTNULL,  IS_MANAGERBITNULL,  SALARYMONEYNOTNULL,  BONUSPCTFLOATNOTNULL  )  GO  ALTERTABLEDBO.EMPLOYEE  ADDCONSTRAINTPK_EMPLOYEEPRIMARYKEY(EMPLOYEEID)  GO  ALTERTABL

4、EDBO.EMPLOYEE  ADDCONSTRAINTDF_EMPLOYEE_BONUSPCTDEFAULT0.00FORBONUSPCT  GO  ALTERTABLEDBO.EMPLOYEE  ADDCONSTRAINTCK_EMPLOYEE_SALARYCHECK(SALARYBETPLOYEE  GO  查看我们表中的约束,我们看到我们简单的字段级别约束已经定义好了:  图一  尝试把值插入到SALARY字段超出了我们定义的范围,这也被我们的数据库引擎成功捕捉到了。  INSERTINTODBO.EMPLOYEE(FI

5、RSTNAME,LASTNAME,SALARY)  SELECT'GEORGE','PLOYEE  ADDCONSTRAINTCK_EMPLOYEE_BONUSPCT  CHECK(IS_MANAGER=1ANDBONUSPCT>=5.00)  GO  INSERTINTODBO.EMPLOYEE(FIRSTNAME,LASTNAME,IS_MANAGER,SALARY,BONUSPCT)  SELECT'GEORGE','PLOYEE(FIRSTNAME,LASTNAME,

6、IS_MANAGER,SALARY,BONUSPCT)  SELECT'BEN','FRANKLIN',0,75000,2.50  GO  图三  然后发生了什么事呢?员工PLOYEE  DROPCONSTRAINTCK_EMPLOYEE_BONUSPCT  GO12下一页>>>>这篇文章来自..,。ALTERTABLEDBO.EMPLOYEE  ADDCONSTRAINTCK_EMPLOYEE_BONUSPCT  CHECK(CASEANAGER<>1ANDBONUSPCT>=

7、5.00THEN1ELSE0END=0)  GO  INSERTINTODBO.EMPLOYEE(FIRSTNAME,LASTNAME,IS_MANAGER,SALARY,BONUSPCT)  SELECT'BEN','FRANKLIN',0,75000,2.50  GO  现在试着使用正确的CHECK约束定义来插入Franklin,结果成功了。  图四  现在让我们尝试插入一个新的员工Jefferson。  INSERTINTODBO.EMPLOYEE(FIRSTNAME,LASTNAME,IS

8、_MANAGER,SALARY,BONUSPCT)  SELECT'THOMAS','JEFFERSON',NULL,80000,7.50  GO  图五  等待一秒钟,Jefferson没有被标记成一个管理人员但是他的引擎允许他

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。