使用 DB2 对象:创建模式、表和视图
一般来说,数据存储在 DB2 中的关系表中。每个表由许多列和行组成。表列是在创建表期间定义的。还可以在创建表之后添加或删除它们。表中存储的数据需要与数据列定义保持一致。每个表可以有多个索引和视图。
视图(view) 就像是一个逻辑表,它由一个 SELECT 语句从一个或多个表或视图获得的结果集组成。与关系表不同,视图中的数据不需要物理地存储在硬盘上。当查询视图时就会获取数据。除了在系统编目中存储它的定义之外,视图不使用物理空间。在创建视图之后,可以使用数据操纵语言(Data Manipulation Language,DML)查询视图,甚至更新视图。视图提供了灵活的数据访问功能,可以访问一个表的子集或者来自多个表的结果集的联结,同时隐藏了基表中数据的复杂性。
为了提供数据库对象(比如表、索引和视图)的逻辑视图,使用一个或多个模式对它们进行分类。模式(schema) 是数据库对象的一个逻辑分类。可以使用相同或不同的模式创建多个数据库对象。例如,在表空间 SYSCATSPACE 中,所有基本系统表和索引都分组在同一个模式 SYSIBM 中。基本编目表和索引的所有视图分组在模式 SYSCAT 或 SYSSTAT 中。
这个练习演示如何创建模式、表和视图:
1、在 Control Center 中,点击 All Databases > HELLOWLD > Schemas。看一下在创建数据库时 DB2 创建的现有模式。点击右下方窗口中的 Create New Schema。
2、在 Create Schema 向导中,输入 HWLD 作为新的模式名称。使用默认的 Authorization Name。点击 OK 运行 CREATE SCHEMA 命令。同样,点击 Show SQL 就会看到实际的 DB2 命令。在命令完成之后,检查 HWLD 是否显示在模式视图中。
3、在创建对象时,指定它应该属于的模式。如果没有显式地指定模式名,那么在默认情况下会使用用户 ID 作为模式,但条件是用户应该具有 IMPLICIT_SCHEMA 特权(本系列中的下一个教程将详细讨论特权)。参见 参考资料 中对整个 Hello World 系列的链接。
4、为了创建表,在 Control Center 窗口的左边选择 All Databases > HELLOWLD > Tables。在右下方的窗口中点击 Create New Table。Create New Table 向导窗口启动,它会带领您执行创建表的步骤。
5、在 Create Table 向导中,首先从下拉菜单中选择 HWLD 作为模式名。输入 AUTHOR 作为表名。输入描述性的注释。点击 Next。
6、在 Columns 页面上,点击 Add 为 AUTHOR 表添加列。在 Add Column 页面上,指定 AUTHOR_NAME 作为列名,VARCHAR 作为数据类型,长度为 50。点击 OK。
7、点击 Add 添加第二个列,AUTHOR_ID 作为列名,数据类型是 Integer。点击 OK。再添加第三个列,MODULE_NAME 作为列名,数据类型是 CHARACTER,长度是 20。点击 OK。
8、应该会在 Columns 页面上看到这三列。
图 14. 创建表 —— 列
9、点击 Next。显示 Data Partitions 页面。
10、数据分区(Data partitioning) 是 DB2 9 中的一个新特性,它允许跨多个表空间对大型表进行分区。点击 Next 跳过这一步,因为 AUTHOR 表不是分区表。
11、在 Table spaces 页面上,选择 TBSP_DATA1 作为表空间。选择 Use Separate Index Space,并选择 TBSP_INDEX1 作为索引表空间。还可以为任何大对象指定单独的表空间,但是这里不需要这样做。点击 Next。
12、如果没有看到 TBSP_DATA1 或 TBSP_INDEX1,那么取消 Create Table 向导并确保从 Control Center 刷新表空间视图。
13、此时不用定义任何主键或惟一键、维或约束。在后续页面上一直点击 Next,直到到达 Summary 页面。
14、使用 Summary 页面上的 Show SQL 查看实际的 Create Table 命令。点击 Finish 创建 HWLD.AUTHOR 表。
15、应该会看到 DB2 Message 窗口(DB20000),这表示命令已经顺利完成,没有错误。关闭消息窗口。
16、在 Control Center Tables 视图中,点击刚才创建的 AUTHOR 表,在显示窗口中应该会看到表的列定义、模式和创建者。
图 15. Control Center —— Tables 视图
16、在检查 HWLD.AUTHOR 表之后,添加另一个列,AUTHOR_DOC。让它成为 XML 列,因为要在这个 XML 列中直接存储 XML 文档。
17、右键单击 AUTHOR,从菜单中选择 Alter,Alter Table 向导打开。点击 Add 启动 Add Column 向导。
18、在 Add Column 向导中,输入 AUTHOR_DOC 作为列名,选择 XML 作为数据类型。选择 Nullable,表示这个列可以包含 NULL 值。点击 OK。
19、检查 Alter Table 向导,确认已经添加了一个新的 XML 列。有一个选项可以将表数据存储为压缩格式,如果空间是个大问题或者表数据很大,那么可以考虑使用这个选项。在这里,数据保存为非压缩格式。点击 OK 让 ALTER TABLE 完成操作。应该会返回消息 DB20000。关闭消息窗口。
在 Control Center 中,选择 Table > Author,应该会看到数据类型为 XML 的第四个列。
20、为了创建基于 Author 表的视图,选择 Control Center > All Databases > HWLD > Views > Create New View。Create View 向导会带领您执行创建视图的步骤。
在 Create View 向导中,选择 HWLD 作为视图模式,输入 DB2_AUTHOR 作为视图名。
21、将 SQL 语句替换为以下语句:
(AUTHOR_NAME, MODULE_NAME)
AS
SELECT AUTHOR_NAME, MODULE_NAME FROM HWLD.AUTHOR WHERE MODULE_NAME='DB2 UDB'
22、检查选项应该选择 None,使视图属性为只读。点击 OK 创建视图 DB2_AUTHOR。
23、在 Control Center 中,选择 DB2_AUTHOR 视图,看看屏幕右下方面板中的视图定义。
图 16. 视图 —— 显示相关对象
24、点击 Show Related Objects。在 Show Related 页面上,点击 Tables 选项卡。显示这个视图的基表的相关信息。点击 Close。