WEB开发网
开发学院数据库MSSQL Server 使用CHECK约束执行业务规则 阅读

使用CHECK约束执行业务规则

 2008-12-31 10:16:59 来源:WEB开发网   
核心提示: 然后发生了什么事呢?员工Washington成功插入但是Franklin插入失败,那么,使用CHECK约束执行业务规则(3),正如它被定义的,CHECK约束迫使所有的员工成为一个管理人员并且具有一个大于或等于5%的奖金比例,ALTER TABLE DBO.EMPLOYEEDROP CONS

然后发生了什么事呢?员工Washington成功插入但是Franklin插入失败。那么,正如它被定义的,CHECK约束迫使所有的员工成为一个管理人员并且具有一个大于或等于5%的奖金比例。如果所有的员工必须是具有大于或者等于5%的奖金比例的管理人员,那么这就没有什么问题。然而,这不是我们想要执行的业务规则。我们想要确保如果一个员工不是管理人员,那么他就不能执行查果5%奖金的界限。因此我们应该怎样使CHECK约束有条件地执行完整性呢?你可能想使用一个触发器。尽管如此,正如我在开篇提到的,CHECK是用来检查TRUE/FALSE条件的。因此,你可以平衡这两种方法来产生一个可以执行条件检查的CHECK约束。让我们通过使用这些原则来重新创建我们的CHECK并试着重新插入员工Franklin。

   ALTER TABLE DBO.EMPLOYEE
  DROP CONSTRAINT CK_EMPLOYEE_BONUSPCT
  GO
  ALTER TABLE DBO.EMPLOYEE
  ADD CONSTRAINT CK_EMPLOYEE_BONUSPCT
  CHECK (CASE WHEN IS_MANAGER <> 1 AND BONUSPCT >= 5.00 THEN 1 ELSE 0 END = 0)
  GO
  INSERT INTO DBO.EMPLOYEE (FIRSTNAME, LASTNAME, IS_MANAGER, SALARY, BONUSPCT)
  SELECT 'BEN', 'FRANKLIN', 0, 75000, 2.50
  GO

现在试着使用正确的CHECK约束定义来插入Franklin,结果成功了。

使用CHECK约束执行业务规则

图四

现在让我们尝试插入一个新的员工Jefferson。

   INSERT INTO DBO.EMPLOYEE (FIRSTNAME, LASTNAME, IS_MANAGER, SALARY, BONUSPCT)
  SELECT 'THOMAS', 'JEFFERSON', NULL, 80000, 7.50
  GO

使用CHECK约束执行业务规则

图五

上一页  1 2 3 4  下一页

Tags:使用 CHECK 约束

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接