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

MSSQL
sql 批量修改数据库表
mssql CASE,GROUP BY用法
利用SQL SERVER建立登录WINDOWS帐号
SQL Server 2008 正式版安装指南 包含序列号
SQL Server 2008图文安装教程
sql 语句 取数据库服务器上所有数据库的名字
sqlserver 数据类型转换小实验
SQL Server 存储过程解析
压缩技术给SQL Server备份文件瘦身
SQL Server 2005 还原数据库错误解决方法
Sql Server datetime问题
SQL语句 操作全集 学习mssql的朋友一定要看
格式导致的Excel导入sql出现异常的解决方法
SQL Server 数据库自动执行管理任务
sql Set IDENTITY_INSERT的用法
sql 修改表的所有者
过程需要参数 ''@statement'' 为 ''ntext/nchar/nvarchar'' 类型
mssql 建立索引
SQL Server 索引结构及其使用(一)--深入浅出理解索引结构
SQL Server 索引结构及其使用(二) 改善SQL语句

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


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

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