DB2 侦探游戏
2009-12-22 00:00:00 来源:WEB开发网开始之前
关于本教程
本教程通过一个有趣的交互式游戏向 IBM DB2 的新用户介绍关系数据库概念,该游戏称为 DB2 侦探游戏。本文假设您没有数据库知识或结构化查询语言(Structured Query Language,SQL)编程经验。适合的读者包括小型企业业主、学生、教师或教授,或者想要了解数据管理的任何读者。
系统需求
要进行这个游戏,需要安装 IBM DB2 9,载入 DB2Game 数据库,并运行线索文件。
下载 DB2 Express-C 9
从产品下载 Web 页面 下载 DB2 9。
根据您的工作站平台选择合适的镜像文件。
单击 Download 并输入您的 IBM ID。如果还没有 IBM ID,可以免费注册一个。
查看您的个人信息和产品许可。单击 I confirm。
选择一种下载方法(Download Director 或 HTTP),然后单击 Download now。
安装 DB2 Express-C 9
下载完成之后,导航到包含下载文件的文件夹。
对文件进行解压缩。
在解压缩的文件夹中找到 setup.exe 并双击。出现 DB2 Setup Launchpad。
在 DB2 Setup Launchpad 中,在左侧面板中单击 Install a Product。
单击 DB2 Express 下面的 Install New。
在安装程序中,单击 Next 查看 License Agreement。您需要单击 Accept 才能继续安装,然后单击 Next。
选择 Typical 安装,然后单击 Next。
确认您准备 “Install DB2 Express Edition on this computer and save your settings in a response file”,然后单击 Next。
验证安装目录,并单击 Next。
在 User Information 屏幕上,使用下拉菜单将 Domain 设置为 None — use local user account。使用 db2admin 作为用户名并设置一个密码(可选地,您可以选择 LocalSystem 帐户,但如果使用这个选项,会带来一些限制 — 单击 Help 了解更多信息)。
确保选中了复选框 “Use the Same User Name and Password for the remaining DB2 Services”,然后单击 Next。
在 Configure DB2 instances 屏幕中,单击 Next。
当到达 Start copying files and create response file 屏幕时,单击 Finish 开始安装 DB2 产品。
安装完成之后,会出现一个带有消息 “Setup is complete” 的窗口。单击 Finish 完成安装过程。
出现一个标题为 “DB2 First Steps” 的 窗口。单击 Create profile。Web 浏览器打开一个名为 “DB2 First Steps” 的页面。这个页面包含许多有关 DB2 信息的有用链接,但是本教程不会使用。
安装 DB2 Detective Game 数据库
确保安装了 DB2 Express-C 9。
从本教程的 下载 部分下载 DB2 Detective Game 数据库文件。
在 C 盘创建一个名为 db2game 的目录。
将 db2detectivefiles.zip 文件解压缩到该目录。
从 Windows Start 菜单选择 All Programs > IBM DB2 > General Administration Tools > Control Center。
从界面顶部的菜单中选择 Tools > Command Editor。弹出一个命令编辑器窗口,允许您输入 SQL 语句。
从菜单中选择 Selected > Open。从 Look in 下拉菜单中选择 C:\,然后导航到 db2game 目录。从文件列表中选择 db2game.txt 并单击 OK。
单击 Execute 图标(类似于 “Play” 按钮的图标)。
运行 DB2 侦探游戏
要运行游戏的线索文件(db2game.jar),需要将其设置为使用 Java Virtual Machine (JVM) 软件(例如 javaw.exe)打开。为此:
右键单击 db2game.jar 文件。
选择 Properties。
在 General 选项卡下,将文件类型指定为 Executable Jar File。
Open With 窗口应该显示了您已经安装在本地的 JVM。如果实际情况不是这样,请单击 Change...。
在 Open With 窗口中找到并选择您的 JVM 软件(例如 javaw.exe)。
单击 OK。
单击 Apply。
单击 OK。
现在可以启动 db2game.jar 文件了。双击该图标,或者可以为该文件创建一个快捷方式,以便于访问。
注意:如果在安装期间碰到任何问题,可以在 DB2 Express 论坛 上发布您的疑问。
为 DB2 侦探游戏创建快捷方式
要在桌面上为 db2game.jar 文件创建一个快捷方式:
右键单击桌面的任何位置。
选择 New > Shortcut。
在名为 “Type the location of the item” 的字段中输入 C:\db2game\db2game.jar。
单击 Next。
在名为 “Type a name for this shortcut” 的字段中,输入 db2game(默认情况下它应该已经出现在该字段中了)。
单击 Finish。
您现在可以玩这个游戏了!
游戏场景
您是一个大型企业的安全部门的实习员工,作为培训的一部分,您被要求参与一个犯罪调查模拟,以帮助找到丢失的 ThinkPad® 计算机。
通过这个 DB2 侦探游戏,了解 DB2 9 和关系数据库管理的基础知识。展示如何将数据库技术应用于企业环境中,以帮助管理您的公司信息。这个初级教程介绍基本的 SQL 技能,以使您进入 DB2 侦探游戏的更高级别。
祝您好运,玩得开心!
介绍 DB2 和关系数据库
入门
这个解决方案集是 PDF 格式,您可以在本教程的 下载 部分找到。
学习目标
本教程假设您没有关系数据库或 SQL 知识。完成本教程之后,您将:
了解数据库概念,比如表、行(记录)、列(字段)和值
了解关系数据库、数据模型、惟一键、主键、外键和表联接
能够使用基本的 SQL 语句:select、update、insert 和 delete。
使用 DB2 Control Center 确认成功地导入了 DB2 侦探游戏数据库。
使用 DB2 Command Edition 导入数据库并创建和执行 SQL 代码
什么是关系数据库?
数据库是存储在表中的数据的集合,其中每个表由行和列构成。您可以将数据库看作一个传统档案柜的自动化的替代品,数据库相当于档案柜,表相当于档案柜中的文件夹,而文件夹中的数据相当于由行(记录)和列(字段)组成的电子表格,其中电子表格的每个单元格包含一个值。然而,因为数据库是自动化的,所以说您可以使用它们来管理和组织数据,从而可以快速地检索数据,分析数据并用来进行关键的商业决策。使用数据库您可以轻易地添加、更新、删除和查找(或者称为查询)数据。数据库被所有行业用来管理所有的事情,包括您的信用卡使用、银行帐号、保险信息、纳税和采购。
在关系数据库中,比如 DB2,数据可以根据各个表中的数据项之间定义的关系来组织和存取。这些表中的数据可以使用结构化查询语言(SQL)管理,SQL 是一个定义和操作关系数据库中的数据的标准化语言。这个教程将为您介绍关系数据库的概念和基本的 SQL 语句。
表、记录、字段和值
在关系数据库(比如 DB2)中,数据以表集合的形式提供:
数据库由一个表的集合组成。
表由逻辑上组织为列和行的数据构成。
表中的数据在逻辑上是相关的,数据库中的不同表之间定义了关系。
数据通过数学原则和叫做关系的操作来查看和管理,而表中的数据通过 SQL 来存取。
常规的表可包含最多 500 列、任意行以及最多 64 GB 的数据(不包括大对象)。
表中的每个单元格存储一个特定的数据项,叫做值。
表中的每个列(或字段)由相同数据类型的值组成。
表中的每一行(或记录)由值的序列构成,其中每一列一个值。
DB2 Detective Game 数据库由 4 个表组成:employee、hardware、lobby 和 security。图 1 展示了 DB2 侦探游戏的数据模型。数据模型是数据库中的各种表和它们之间的关系的图形化表示。
图 1. DB2 侦探游戏的数据模型
上面的数据模型向您展示了存储在每个表中的信息的类型:
employee 表存储每个员工的信息,比如说有他们的员工号、名字、经理、办公室号、电话号码和证件号。
security 表存储记录的信息是每个员工或者到访者进出大厦的时间(日期和时间)。
lobby 表存储根据名字分配给每个到访者的证件号。
hardware 表存储每台计算机的序列号和类型号及其位置,还存储主要使用那台计算机的员工的 ID。
在图 2 中,展示了 employee 表中存储的一个数据子集。
图 2. employee 表中存储的一个数据子集
在上面的 employee 表中,列(或字段)为:
employee_id
first_name
last_name
location
manager_id
extension
gender
hair_colour
badge_number
restricted
在上面的例子中行(记录)的编号为 1 到 17。注意在表中有很多记录,但是这里只显示了所有数据的一个子集。
表中的每个单元格保存着一个值。每个字段的可接受的值(或者数据)、类型在表创建的时候设置。例子包括 numeric、character string、binary string、date 和 time 数据类型:
numeric:整数、小数或浮点数
character string:字符、数字或者符号或图形的一个序列。
binary string:二进制对象,比如音频或视频文件
date and time:专门用于表示日期和时间的数据类型
例如,在 employee 表中,第 10 个记录的 extension 字段的值是 3432(数据类型为 numeric/integer)。第一个记录的 first_name 字段的值是 William(类型为 character string)。
SQL 语句
关系数据库技术的语言是结构化查询语言(SQL)。SQL 语句由 IBM 在上个世纪 70 年代发明,SQL 语言一直在发展,并且是存取关系数据库数据的惟一方法。
用于检索或更新数据的主要 SQL 语句包括:
SELECT:从一个或多个表查询数据
INSERT:向一个表中插入数据
UPDATE:更改表中现有的行
DELETE:从表中删除行
本教程将依次描述上述的每条 SQL 语句。
SELECT 语句
使用 SELECT 语句从一个或多个表检索数据。SELECT 语句的语法是:
SELECT column [,n] FROM tablename {,n};
例如,如果想要选择 lobby 表的所有行和列,而不指定要满足的任何条件,可以发出以下语句:
SELECT * FROM db2admin.lobby
这条语句将会产生以下结果:
图 3. SELECT 语句的结果
但是,如果想要从 lobby 表选择所有行和列,其中到访者的证件号大于 62 ,可以发出以下语句:
SELECT * FROM db2admin.lobby WHERE lobby.badge_number > 'V0062'
这条语句将会产生以下结果:
图 4. SELECT 语句的结果 2
如果想只选择 lobby 表中每一行的特定列(例如,first_name 和 last_name),其中到访者的证件号大于 62 ,可以执行以下查询:
SELECT lobby.first_name, lobby.last_name FROM db2admin.lobby
WHERE lobby.badge_number > 'V0062'
注意:需要使用逗号将 SELECT 语句上指定的每一列分隔开。另外注意,WHERE 子句可用于指定需要满足的条件。
上面的语句将会产生以下结果:
图 5. SELECT 语句的结果 3
可以使用 ORDER BY 子句对行进行排序和分类。例如,如果想将所有到访者证件号大于 62 的到访者按姓氏的字母顺序,可以发出以下语句:
SELECT * FROM db2admin.lobby
WHERE lobby.badge_number > 'V0062' ORDER BY lobby.last_name ASC
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
注意:可以以升序或降序的方式对值进行排序。
这条语句将会产生以下结果:
图 6. SELECT 语句的结果 4
SELECT 语句可以使用任意数量的关系运算符,包括 =、>、<、>=、<=、<>(例如,不等于),以及许多谓词,包括 LIKE、NOT LIKE、IS NULL、IS NOT NULL、BETWEEN、NOT BETWEEN、IN 和 NOT IN。本教程不会讨论所有这些运算符,仅向您介绍可能在 DB2 侦探游戏中使用的运算符。
在上面的 SELECT 语句的一些例子中,您看到了如何使用 >(大于)运算符根据证件号过滤特定的到访者。也可以通过完全相同的方式使用 =、<、>=、<= 和 <> 运算符。执行 DB2 侦探游戏时也可能使用 BETWEEN 谓词,我们将在后面讨论。
BETWEEN 谓词
BETWEEN 谓词比较一个值是否落在一个值区间内(也就是说所有在最大值和最小值之间的值)。例如,要找出证件号位于 59 和 66 之间的所有到访者,就可以使用下面的语句:
SELECT * FROM db2admin.lobby WHERE lobby.badge_number BETWEEN 'V0059' AND 'V0066'
这条语句将会产生以下结果:
图 7. SELECT 语句的结果 5
INSERT 语句
使用 INSERT 语句向表中添加数据,这条语句的语法是:
INSERT INTO tablename [(column_name1, column_name2, ...)]
VALUES (value1, value2, ...);
例如,要将一个名为 “DB2 Detective” 的到访者添加到 lobby 表,可以发出以下语句:
INSERT INTO db2admin.lobby (first_name, last_name, badge_number)
VALUES ('DB2', 'Detective', 'V0062')
这条语句将会产生以下结果:
图 8. INSERT 语句的结果
UPDATE 语句
使用 UPDATE 语句更改表中的数据。使用这条语句,就可以改变符合 WHERE 指定的搜索条件的每一行的一列或者多列值。该语句的语法是:
UPDATE tablename SET column_name1 = expression1, column_name2 = expression2, ...
[WHERE conditions_for_rows_to_meet_if_any];
注意:如果不使用 WHERE 子句,所有行都会被更新。
例如,要将证件号为 62 的到访者的 first name 更改为 “Joan”,可以发出以下语句:
UPDATE db2admin.lobby SET first_name = 'Joan'
WHERE lobby.badge_number = 'V0062'
现在,当您查询 lobby 表时,会产生以下结果:
图 9. UPDATE 语句的结果
如果省略了 WHERE 子句并执行下面的语句:
UPDATE db2admin.lobby SET first_name = 'Joan'
然后所有到访者的 first name 都被更新为 “Joan”,结果如下所示:
图 10. UPDATE 语句的结果 2
DELETE 语句
使用 DELETE 语句从表中删除记录(行)。该语句的语法是:
DELETE FROM tablename [WHERE conditions_for_rows_to_meet_if_any];
例如,看一下 lobby 表中的所有数据:
图 11. DELETE 语句的结果
要从 lobby 表中删除证件号为 62 的到访者的记录,可以发出以下语句:
DELETE FROM db2admin.lobby WHERE lobby.badge_number = 'V0062'
这条语句将会产生以下结果:
图 12. DELETE 语句的结果 2
badge_number V0062 的记录被成功删除了。
联接表
惟一键、主键、外键
根据定义,关系数据库的各个表中的数据是相关的,数据名称也是相关的。在一个关系数据表中,总有一列或者几列可以惟一地确定每一行。这些惟一的标识符叫作惟一键。再看一下 employee 表:
图 13. Employee 表
在 employee 表中,first_name、last_name、manager_id、gender、hair_colour 和 restricted 列都不能当作惟一键,因为它们不是某一行的惟一标识符:
第三条记录和第四条记录的 first_name 值都是 Oleg
第三条记录和第四条记录的 last_name 值都是 Glembotsky
第一条记录和第二条记录的 manager_id 值都是 278354
第一条记录和第二条记录的 gender 值都是 M
第二条记录和第三条记录的 hair_colour 值都是 black
第一条记录和第二条记录的 restricted 值都是 N
关系数据库中的表还可以有一个主键。主键用于将一个表中的记录与另外一个表中的相关记录进行联接。有一点需要注意,即每个表只能有一个主键,而主键必须也是一个惟一键。在选择主键的时候,最好选择具有静态值的列。在 employee 表中,last_name、location、manager_id 和 extension 列都被排除在主键的可能之外,因为对于一个员工来说这些值是容易根据时间发生变化的,因而不是静态的。根据这个标准,主键必须是惟一键而且必须是静态字段,对于 employee 表来说可能的主键为 employee_id 和 badge_number。在 DB2 侦探游戏创建时,employee_id 被定义为 employee 表的主键。
DB2 Detective Game 的数据模型显示了每个表的主键(如果有的话),以及在 DB2 Detective Game 数据库中的各种表之间定义的关系:
图 14. DB2 Detective Game 数据库
正如上面讨论的,employee_id 是 employee 表的主键。employee_id 也是 hardware 表中的一个字段。您可以从数据模型中看到,使用 employee_id 字段在 employee 表和 hardware 表之间定义了一种关系(如箭头所描述的)。employee_id 是 hardware 表的一个外键,因为它被定义为与 employee 表的主键相关。注意,hardware 表和 employee 表的 location 字段也相同,但该字段既不是主键,也不是外键。
注意:因为一个员工的位置或者办公室号是随着职业生涯变化的,location 不是一个稳定字段,所以将它定义为主键或者外键不是最好的决定。
数据模型还显示,badge_number 既是 security 表的主键,又是 employee 表和 lobby 表的外键(请再次查看箭头)。
主键和外键定义数据库中的表之间的关系,而且可用于将表链接在一起。将关系数据库的两个或更多表中的数据组合起来的过程称为联接表。例如,假设您需要知道使用序列号为 78-23672 的硬件资产的员工的名称。查询 hardware 表的所有字段只会告诉您使用每台机器的员工的 employee_id,如图 15 所示(仅显示了 employee 表的前 17 个记录):
图 15. 使用每台机器的员工的 employee_id
为了同时查看使用这台机器的员工的名字,必须将 hardware 表联接到 employee 表。可以将两个表联接起来,因为在它们之间定义了一种关系(employee_id 是 employee 表的主键和 hardware 表的外键)。要进行联接,可以发出以下语句:
SELECT * FROM db2admin.employee, db2admin.hardware
WHERE employee.employee_id = hardware.employee_id
运行这条语句会产生如下结果:
图 16. SELECT 语句的结果
现在每台机器的所有者名称都显示出来了。
如果再看一下 DB2 Detective Game 数据模型:
图 17. DB2 Detective Game 数据模型
您会看到可以对以下表进行联接:
security (primary key = badge_number) 与 lobby (foreign key = badge_number)
security (primary key = badge_number) 与 employee (foreign key = badge_number)
employee (primary key = employee_id) 与 hardware (foreign key = employeee_id)
不能对以下表进行联接,因为它们之间没有定义关系:
employee 与 lobby
hardware 与 lobby
hardware 与 security
下载
描述 | 名字 | 大小 | 下载方法 |
游戏文件 | db2detectivefiles.zip | 301KB | HTTP |
教师手册(包含解决方案) | DB2_Detective_Instructor.pdf | 102KB | HTTP |
学生手册(无解决方案) | DB2_Detective_Student.pdf | 92KB | HTTP |
解决方案 | DB2_Detective_Solution.pdf | 37KB | HTTP |
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
更多精彩
赞助商链接