解析依赖关系在SQL数据库中的引用:数据库依赖关系

  【摘 要】 SQL 依赖关系是在 SQL 表达式中使用的按名称引用,可使一个实体依赖于另一个实体。  【关键词】 依赖关系 引用实体  SQL 依赖关系是在 SQL 表达式中使用的按名称引用,可使一个实体依赖于另一个实体。在其定义中引用了另一个实体并且该定义存储在系统目录中的实体称为“引用实体”。被另一个实体引用的实体称为“被引用的实体”。数据库引擎跟踪两种类型的依赖关系。
  ·绑定到架构的依赖关系
  绑定到架构的依赖关系是一种两个实体之间的关系,只要引用实体存在,这种关系就可以防止被引用的实体被删除或更改。绑定到架构的依赖关系是在使用 WITH SCHEMABINDING 子句创建视图或用户定义函数时创建的。绑定到架构的依赖关系也可以于表在 CHECK 或 DEFAULT 约束或计算列定义中引用另一个实体(例如 Transact-SQL 用户定义函数、用户定义类型或 XML 架构集合)时创建。使用由两部分chema_name.object_name) 组成的名称指定对象不能称为绑定到架构的引用。
  ·非绑定到架构的依赖关系
  非绑定到架构的依赖关系也是一种两个实体之间的关系,但这种关系并不防止被引用的实体被删除或修改。
  图中包含两个实体:过程 X 和过程 Y。过程 X 包含一个对过程 Y 按名称引用的 SQL 表达式。过程 X 称为“引用实体”,而过程 Y 称为“被引用的实体”。由于过程 X 依赖于过程 Y,因此当过程 Y 不存在时,过程 X 将失败,并出现运行时错误。但是,当过程 X 不存在时,过程 Y 也不会失败。
  仅当表在计算列定义、CHECK 约束或 DEFAULT 约束中引用 Transact-SQL 模块、用户定义类型或 XML 架构集合时,才会将该表作为引用实体进行跟踪。整数值大于 1 的带编号的存储过程将不会作为引用实体或被引用的实体进行跟踪。数据库引擎将在创建、更改或删除引用实体时自动跟踪依赖关系信息,并将此信息记录在 SQL Server 系统目录中。例如,如果您创建了一个引用表的触发器,则这些实体间的依赖关系将被记录下来。如果您随后删除了该触发器,依赖关系信息将从系统目录中删除。
  SQL Server 早期版本中的依赖关系按 ID 跟踪,与之不同的是,当前版本中的依赖关系按名称跟踪。也就是说,即使引用实体创建时被引用的实体并不存在,数据库引擎仍可跟踪两个实体间的依赖关系信息。之所以会发生这种情况,是因为存在延迟名称解析。例如,即使数据库中并不存在存储过程所引用的表,也可以成功创建该存储过程,但是该存储过程不能执行。数据库引擎记录此过程和表之间的依赖关系,但是,因为对象尚未存在,所以无法记录表 ID。如果随后创建了该表,则表 ID 将随其他依赖关系信息返回。当被引用的实体按名称显示在引用实体的持久化 SQL 表达式中时,依赖关系信息将会被跟踪。采用以下方式按名称引用实体时,将会获得依赖关系信息:
  ·通过在 Transact-SQL模块定义中使用下列任一语句:
  ·数据操作语言 (DML) 语句(SELECT、INSERT、UPDATE、DELETE 或 MERGE)
  ·EXECUTE
  ·DECLARE
  ·SET(当 SET 与用户定义函数或用户定义类型一起使用时。例如:(DECLARE @var int; SET @var = dbo.udf1。)
  不会跟踪使用数据定义语言 (DDL) 语句(如 CREATE、ALTER 或 DROP)在 Transact-SQL 模块定义中引用的实体。
  ·通过使用 CREATE、ALTER 或 DROP TABLE 语句,条件是这些语句不在 Transact-SQL 模块中并且被引用的实体为在计算列、CHECK 约束或 DEFAULT 约束中定义的 Transact-SQL 用户定义函数、用户定义类型或 XML 架构集合时。
  当某个实体通过使用由三部分组成的有效名称引用另一个实体时,将创建跨数据库的依赖关系。当某个实体通过使用由四部分组成的有效名称引用另一个实体时,将创建跨服务器的引用。仅当显式指定服务器和数据库的名称时,才会记录相应的名称。例如,当指定为 MyServer.MyDB.MySchema.MyTable 时,会记录服务器和数据库的名称,但是,当指定为 MyServer..MySchema.MyTable 时,将只记录服务器的名称。有关有效的多部分名称的详细信息,请参阅 Transact-SQL 语法约定 (Transact-SQL)。存在下列限制:不跟踪 OPENROWSET、OPENQUERY 和 OPENDATASOURCE 语句的跨服务器依赖关系。不跟踪语句 EXEC (" ") AT linked_server 的依赖关系。
  参考文献:
  [1] 《数据库技术》 清华大学出版社.
  (作者单位:大庆职业学院 计算机系)

推荐访问:数据库中 解析 依赖 引用