SQL Server动态约束


SQL #sql server #动态约束2012-10-23 17:00
静态约束是关于数据库正确状态的约束。但有时要考虑变化过程的约束—也就是说,关于数据库从一种正确状态到另一种正确状态转移的约束。例如,一个关于人口的数据库,有一些对于“婚姻状况”的动态约束。例如,下面的状态转移是有效的:
• 未婚到已婚
• 已婚到丧偶
• 已婚到离异
• 丧偶到已婚
(等等),而下面的是非法的:
• 未婚到丧偶
• 未婚到离异
• 离异到丧偶
等等。回到供应商-零件数据库中,有另外一个例子(不允许供应商的状态值减小):
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 '在开始事务时就被理解为关系变量S和S P。
在静态约束与动态约束的概念中,对类型约束和属性约束没有意义。

相关文章

粤ICP备11097351号-1