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

MSSQL
巧用SQL链接服务器访问远程Access数据库
SQL Server如何删除群集实例
安装SQL 2005中的AdventureWorks数据库
SQL Server 2008中有关XML的新功能
SQL Server注入大全及防御
Sql Server 2000视图中小心使用*符号
Sql Server导出指定条件的数据
SQL Server 2008的在线事务处理
介绍SQL Server 2008的四项新特性
SQL Server 2008在数据仓库方面的一些优点
触发器对SQL Server数据库进行备份
设置在Access项目中检索的记录数
SQL Server关于SQL Agent使用技巧
把sql server所有表的所有者改为dbo
IIS、SQL Server和ASP.NET安全设置解决方案
SQL Server 2005日志文件损坏怎么办?
SQL Server数据库字典SQL语句
临时表在SQL Server和MySql中创建的方法
SQL Server数据库查询优化3种技巧
SQL Server数据库开发10个问题

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 156 ::
收藏到网摘: 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

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