当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server:容易忽视的动态约束

MSSQL
sql server的保留关键字
SQL2000 关于 Java JDBC 驱动的安装和设定
SQL Server2005数据库查询中使用CTE
如何整理SQL Server输入数据
SQL优化34条
怎样用SQL服务器调节器收集重要信息
黑客经验谈 MSSQLSA权限入侵的感悟
SQL Server企业管理器和查询分析器简介
SQL Server开发人员应聘常被问的问题
限制系统管理员对SQL Server进行访问
升级到SQL Server 2005之后转换登录
SQL Server 2000中监控失败的登录尝试
MSSQL移动到新服务器出现不匹配问题
让你见识一下SQL Server口令的脆弱性
全面调整SQL Server的硬件性能计划
SQL SERVER数据导成INSERT
SQL Server中保护数据的安全选项
防范SQL注入攻击的新办法
SQL Server数据库安全管理机制详解
妙用SQL子查询来从子表里删除数据

MSSQL 中的 SQL Server:容易忽视的动态约束


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 87 ::
收藏到网摘: n/a

静态约束是关于数据库正确状态的约束。但有时要考虑变化过程的约束—也就是说,关于数据库从一种正确状态到另一种正确状态转移的约束。例如,一个关于人口的数据库,有一些对于“婚姻状况”的动态约束。例如,下面的状态转移是有效的:

未婚到已婚

已婚到丧偶

已婚到离异

丧偶到已婚

(等等),而下面的是非法的:

未婚到丧偶

未婚到离异

离异到丧偶

等等。回到供应商-零件数据库中,有另外一个例子(不允许供应商的状态值减小):

CONSTRAINT  TRC1 IS EMPTY

     (((S ‘ {S#, STATUS } RENAME  STATUS  AS  STATUS ‘)

        JOIN  S {S# ,STATUS})

WHERE  STATUS’  >  STATUS );

解释:引入如下的约定:在更新操作进行之前,关系变量名(这里是S ')已被理解为指向

对应的关系变量。这样,本例中的约束就可以这样理解: ( a )将更新前后的关系变量在供

应商号上进行连接; ( b )找到旧元组值大于新元组值的元组; ( c )结果集必须为空(因为连接建立在供应商编号上,任何旧值大于新值的元组表示状态值减小)。

注意:约束T R C 1是关系变量上的动态约束(它只适用于单个的关系变量,这里是

“供应商”),而且检查是立即执行的。下面有一个数据库动态约束的例子(所有供应商对

某一种零件供应的总数量不能减少)

  CONSTRAINT TRC2 IS_EMPTY

( ( ( SUMMARIZE SP’ PER S’{S#}  ADD SUM (QTY) AS SQ’)

  JOIN

  ( SUMMARIZE SP PER S (S#)  ADD  SUM  (QTY) AS SQ)  )

WHERE SQ’ >SQ );

约束T R C 2是一个数据库动态约束(它涉及两个关系变量,供应商和发货);因此,检查

被延迟到提交时,关系变量名S 'S P '在开始事务时就被理解为关系变量SS P

在静态约束与动态约束的概念中,对类型约束和属性约束没有意义。