Kingbase-数据定义9-外部数据&其他数据库对象&依赖跟踪

12 外部数据
KingbaseES 实现了部分的 SQL/MED 规定,允许我们使用普通 SQL 查询来访问位于 KingbaseES 之外的数据。
这种数据被称为 外部数据 (注意这种用法不要和外键混淆,后者是数据库中的一种约束)。
外部数据可以在一个 外部数据包装器 的帮助下被访问。一个外部数据包装器是一个库,它可以与一个外部数据源通讯,并隐藏连接到数据源和从它获取数据的细节。其他类型的外部数据包装器可以在第三方产品中找
到。如果这些现有的外部数据包装器都不能满足你的需要,可以自己编写一个。
要访问外部数据,我们需要建立一个 外部服务器 对象,它根据它所支持的外部数据包装器所使用的一组选项
定义了如何连接到一个特定的外部数据源。接着我们需要创建一个或多个 外部表 ,它们定义了外部数据的结构。一个外部表可以在查询中像一个普通表一样地使用,但是在 KingbaseES 服务器中外部表没有存储数据。
不管使用什么外部数据包装器, KingbaseES 会要求外部数据包装器从外部数据源获取数据,或者在更新命令
的情况下传送数据到外部数据源。
访问远程数据可能需要在外部数据源的授权。这些信息通过一个 用户映射 提供,它基于当前的 KingbaseES
角色提供了附加的数据例如用户名和密码。
13 其他数据库对象
表是一个关系型数据库结构中的核心对象,因为它们承载了我们的数据。但是它们并不是数据库中的唯一一
种对象。有很多其他种类的对象可以被创建来使得数据的使用和刮泥更加方便或高效。在本章中不会讨论它
们,但是我们在会给出一个列表:
视图
函数、过程和操作符
数据类型和域
触发器和重写规则
14 依赖跟踪
当我们创建一个涉及到很多具有外键约束、视图、触发器、函数等的表的复杂数据库结构时,我们隐式地创
建了一张对象之间的依赖关系网。例如,具有一个外键约束的表依赖于它所引用的表。
为了保证整个数据库结构的完整性, KingbaseES 确保我们无法删除仍然被其他对象依赖的对象。例如,尝试
删除 外键 中的产品表会导致一个如下的错误消息,因为有订单表依赖于产品表:
DROP TABLE products;
ERROR: cannot drop table products because other objects depend on it
DETAIL: constraint orders_product_no_fkey on table orders depends on table
products
HINT: Use DROP ... CASCADE to drop the dependent objects too.
该错误消息包含了一个有用的提示:如果我们不想一个一个去删除所有的依赖对象,我们可以执行:
DROP TABLE products CASCADE;
这样所有的依赖对象将被移除,同样依赖于它们的任何对象也会被递归删除。在这种情况下,订单表不会被
移除,但是它的外键约束会被移除。之所以在这里会停下,是因为没有什么依赖着外键约束(如果希望检查
DROP ... CASCADE 会干什么,运行不带 CASCADE DROP 并阅读 DETAIL 输出)。
KingbaseES 中的几乎所有 DROP 命令都支持 CASCADE 。当然,其本质的区别随着对象的类型而不同。我们
也可以用 RESTRICT 代替 CASCADE 来获得默认行为,它将阻止删除任何被其他对象依赖的对象。
Note: 根据 SQL 标准,在 DROP 命令中指定 RESTRICT CASCADE 是被要求的。但没有哪个数据库系统
真正强制了这个规则,但是不同的系统中两种默认行为都是可能的。
如果一个 DROP 命令列出了多个对象,只有在存在指定对象构成的组之外的依赖关系时才需要 CASCADE
例如,如果发出命令 DROP TABLE tab1, tab2 且存在从 tab2 tab1 的外键引用,那么就不需要
CASCADE 即可成功执行。
对于用户定义的函数, KingbaseES 会追踪与函数外部可见性质相关的依赖性,例如它的参数和结果类型,但
不追踪检查函数体才能知道的依赖性。例如,考虑这种情况:
CREATE TYPE rainbow AS ENUM ( 'red' , 'orange' , 'yellow' ,
'green' , 'blue' , 'purple' );
CREATE TABLE my_colors (color rainbow, note text);
CREATE FUNCTION get_color_note (rainbow) RETURNS text AS
'SELECT note FROM my_colors WHERE color = $1'
LANGUAGE SQL;
SQL 元函数的解释见 查询语言函数 )。 KingbaseES 将会注意到 get_color_note 函数依赖于 rainbow
类型:删掉该类型会强制删除该函数,因为该函数的参数类型就无法定义了。但是 KingbaseES 不会认为
get_color_note 依赖于 my_colors 表,因此即使该表被删除也不会删除这个函数。虽然这种方法有缺
点,但是也有好处。如果该表丢失,这个函数在某种程度上仍然是有效的,但是执行它会导致错误。创建一
个同名的新表将允许该函数重新有效。
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值