数 据 库 应 用 基 础 实 验 指 导 书 杨 福 兴 北 京 邮 电 大 学 机 电 工 程 实 验 教 学 中 心 2007.9
实 验 一 数 据 库 试 验 环 境 搭 建 试 验 1. 掌 握 安 装 数 据 库 服 务 器 和 客 户 机 的 方 法 2. 掌 握 测 试 客 户 机 与 服 务 器 连 通 性 的 方 法 3. 熟 悉 pl sql developer 的 操 作 界 面 1. 根 据 本 章 介 绍 的 过 程, 练 习 安 装 oracle9i( 或 者 oracle 10g) 数 据 库 服 务 器 和 客 户 机 2. 在 客 户 机 端 练 习 运 行 网 络 配 置 助 手 工 具, 学 习 配 置 网 络 服 务 名, 并 测 试 其 连 通 性 3. 熟 悉 pl sql developer 的 操 作 界 面 三 实 验 步 骤 1. 找 到 oracle9i( 或 者 oracle 10g) 数 据 库 的 安 装 光 盘 或 者 镜 像 文 件 ; 2. 运 行 数 据 库 服 务 器 的 服 务 端 的 安 装 程 序 ; 3. 按 照 安 装 向 导 安 装 程 序, 直 到 安 装 完 毕, 其 中 要 注 意 : a) 安 装 数 据 库 字 符 集, 要 选 择 中 文 字 符 集, 即 HZK16; b) 在 安 装 过 程 中 要 记 住 数 据 库 要 求 设 置 的 初 始 用 户 和 密 码 初 始 账 户 包 括 :sys, system; c) 记 住 自 己 安 装 的 数 据 库 服 务 名 称 ( 很 重 要, 在 后 面 的 客 户 端 设 置 时 要 用 到 ) 4. 数 据 库 客 户 端 设 置, 其 步 骤 如 下 : a) 找 到 oracle9i( 或 者 oracle 10g) 数 据 库 的 安 装 光 盘 或 者 镜 像 文 件 ; b) 运 行 数 据 库 服 务 器 的 客 户 端 的 安 装 程 序 ; c) 选 择 管 理 员 安 装 选 项 进 行 安 装, 直 到 安 装 完 毕 ; d) 设 置 数 据 库 客 户 端 侦 听 应 用 具 体 方 法 如 下 : i. 打 开 侦 听 设 置 应 用 程 序, 即 : 系 统 -> 程 序 ->Oracle->Configuration and Migration Tools->Net Manager ii. 展 开 树 型 菜 单 中 的 本 地, 再 展 开 服 务 名 称, 并 点 中 服 务 名 称, 点 击 菜 单 上 的 编 辑 下 的 创 建, 即 打 开 侦 听 应 用 服 务 程 序, 安 装 向 导, 设 置 好 相 应 的 服 务 名 称, 并 测 试 通 过 e) 安 装 pl sql developer 5. 熟 悉 pl sql developer 的 操 作 界 面 实 验 二 数 据 库 建 表 试 验 a) oracle 数 据 库 用 户 模 式 的 建 立 删 除 修 改 ; b) 掌 握 表 的 建 立 修 改 查 看 删 除 操 作 c) 掌 握 索 引 的 建 立 修 改 查 看 删 除 操 作 1. 使 用 命 令 行 方 式 将 下 面 各 表 建 立 到 教 学 管 理 数 据 库 中, 其 结 构 和 数 据 如 下 表 所 示 : 注 意 : 表 创 建 存 在 先 后 顺 序, 实 际 操 作 中 注 意 体 会 1
编 号 专 业 名 称 一 级 学 科 二 级 学 科 专 业 varchar(40) varchar(40) varchar(40) 编 号 院 系 名 称 主 页 院 系 varchar(100) 编 号 = 专 业 _ 编 号 编 号 = 院 系 专 业 _ 编 号 编 号 专 业 _ 编 号 院 系 _ 编 号 院 系 专 业 对 应 表 <ak,fk1> <ak,fk2> 编 号 = 院 系 _ 编 号 课 程 编 号 = 先 行 课 编 号 学 号 院 系 专 业 _ 编 号 姓 名 性 别 出 生 日 期 籍 贯 身 高 体 重 入 学 年 月 学 生 int int <fk> 职 工 编 号 姓 名 性 别 出 生 年 月 最 后 学 历 毕 业 院 校 职 称 教 师 职 工 编 号 = 职 工 编 号 课 程 编 号 先 行 课 编 号 课 程 名 称 开 课 学 期 课 程 varchar(40) <fk> 课 程 编 号 = 课 程 编 号 选 课 编 号 学 号 开 课 编 号 平 时 成 绩 期 中 成 绩 期 末 成 绩 期 评 成 绩 学 号 = 学 号 学 生 选 课 int int <ak,fk2> <ak,fk1> 开 课 编 号 = 开 课 编 号 开 课 编 号 课 程 编 号 开 课 学 年 开 课 学 期 职 工 编 号 课 程 性 质 考 试 类 型 学 分 上 课 地 点 上 课 时 间 开 课 int smallint <ak,fk2> <ak> <ak> <ak,fk1> 院 系 表 (T_yx) 编 号 yxbh 6 TRUE 院 系 名 称 yxmc 20 主 页 yxzhy varchar(100) 100 专 业 表 (T_zhy) 编 号 zhybh 6 TRUE 2
专 业 名 称 zhymc varchar(40) 40 一 级 学 科 yjxk varchar(40) 40 二 级 学 科 ejxk varchar(40) 40 院 系 专 业 对 应 表 (T_yx_zhy) 编 号 yxzhybh 6 TRUE 专 业 _ 编 号 zhybh 6 TRUE 院 系 _ 编 号 yxbh 6 TRUE 教 师 表 (T_Teacher) 职 工 编 号 zgbh 10 TRUE 姓 名 xm 20 性 别 xb 4 出 生 年 月 csny 10 最 后 学 历 zhxl 4 毕 业 院 校 byyx 20 职 称 zc 20 课 程 表 (T_Course) 课 程 编 号 CNO 10 TRUE 先 行 课 编 号 CPNO 10 TRUE 课 程 名 称 CNAME varchar(40) 40 开 课 学 期 KKXQ 4 开 课 表 (T_KAIKE) 开 课 编 号 KKNO int TRUE 课 程 编 号 CNO 10 TRUE 开 课 学 年 KKXN 10 开 课 学 期 KKXQ 10 职 工 编 号 ZGBH 10 TRUE 课 程 性 质 KCXZ 10 考 试 类 型 KSLX 10 3
学 分 XF smallint 上 课 地 点 SKDD 20 上 课 时 间 SKSJ 20 学 生 表 (T_Student) 学 号 Sno 10 TRUE 院 系 专 业 _ 编 号 yxzhybh 6 TRUE 姓 名 Sname 20 性 别 Ssex 4 出 生 日 期 Birth 10 籍 贯 jg 20 身 高 sg int 体 重 tz int 入 学 年 月 rxny 10 学 生 选 课 (T_XK) 选 课 编 号 xkbh int TRUE 学 号 Sno 10 TRUE 开 课 编 号 kkbh int TRUE 平 时 成 绩 PSCJ 4 期 中 成 绩 QZCJ 4 期 末 成 绩 QMCJ 4 期 评 成 绩 QPCJ 4 2. 用 命 令 行 方 式 为 某 基 本 表 创 建 索 引, 查 看 其 信 息, 然 后 删 除 它 实 验 三 数 据 操 纵 试 验 熟 练 掌 握 SQL 数 据 查 询 和 数 据 操 纵 命 令 的 使 用 方 法 1. 针 对 教 学 管 理 系 统 的 数 据 表, 完 成 下 面 操 作 a) 向 教 学 管 理 系 统 的 每 个 表 中 录 入 5 条 记 录 录 入 时 注 意 体 会 外 键 约 束 b) 创 建 教 师 表 2(teacher2), 向 表 中 录 入 5 条 不 同 的 记 录, 注 意 与 教 师 表 中 数 据 必 须 不 同, 主 要 体 现 在 主 键 上 c) 用 多 行 数 据 录 入 的 方 法 将 教 师 表 2 中 数 据 录 入 到 教 师 表 d) 利 用 表 间 数 据 复 制 的 方 法 创 建 教 师 表 3(teacher3), 查 看 教 师 表 3 的 内 容, 体 会 4
表 间 数 据 复 制 的 含 义 e) 删 除 教 师 表 3 中 所 有 数 据, 删 除 教 师 表 3 f) 永 久 删 除 教 师 表 2 中 数 据, 删 除 教 师 表 2 g) 显 示 所 有 学 生 情 况 h) 显 示 职 称 是 讲 师 的 职 工 号 姓 名 出 生 日 期 i) 显 示 与 某 个 学 生 某 门 课 程 成 绩 相 同 的 选 修 该 门 课 程 的 所 有 学 生 的 学 号 姓 名 j) 显 示 成 绩 在 60 分 以 上 的 学 生 姓 名 教 师 姓 名 和 课 程 名 称 k) 将 某 个 学 生 所 学 课 程 成 绩 低 于 60 分 的 课 程 列 出 来 l) 将 某 门 课 程 成 绩 低 于 60 分 的 学 生 的 成 绩 改 为 60 分 m) 再 找 出 学 生 表 中 年 龄 最 大 和 最 小 的 女 同 学 的 年 龄 和 姓 名 n) 统 计 表 一 共 有 多 少 名 20 岁 以 上 的 女 同 学 o) 查 询 籍 贯 为 北 京 市 年 龄 在 20 岁 以 上 人 数 多 于 4 人 的 女 生 在 各 个 学 院 的 分 布 情 况 ; 实 验 四 视 图 操 纵 1. 掌 握 视 图 的 建 立 查 询 修 改 删 除 操 作 2. 掌 握 同 义 词 的 建 立 查 询 修 改 删 除 操 作, 比 较 对 同 义 词 的 操 作 与 对 原 数 据 库 对 象 的 操 作 是 否 一 致 3. 掌 握 序 列 的 建 立 查 询 修 改 删 除 操 作, 利 用 序 列 向 数 据 库 表 中 插 入 数 据 4. 掌 握 存 储 过 程 的 建 立 查 询 修 改 删 除 执 行 操 作 5. 掌 握 存 储 函 数 的 建 立 查 询 修 改 删 除 执 行 操 作, 比 较 与 存 储 过 程 的 不 同 6. 掌 握 触 发 器 的 建 立 查 询 修 改 删 除 操 作, 比 较 表 级 与 行 级 触 发 器 的 不 同 1. 创 建 显 示 学 生 成 绩 的 视 图, 显 示 结 果 包 含 学 生 学 号 学 生 姓 名 课 程 号 课 程 名 称 教 师 编 号 教 师 姓 名 成 绩 修 改 该 视 图 使 其 只 查 询 出 成 绩 不 及 格 的 相 关 信 息 2. 为 教 师 表 建 一 同 义 词, 利 用 同 义 词 检 索 表 中 数 据, 比 较 与 教 师 表 的 数 据 是 否 一 致 3. 建 一 序 列, 利 用 序 列 向 成 绩 表 中 插 入 成 绩 数 据 4. 建 一 存 储 过 程, 利 用 传 入 参 数 传 入 教 师 性 别, 显 示 教 师 表 中 不 同 性 别 的 教 师 数 量, 执 行 它 5. 建 一 存 储 函 数, 利 用 传 入 参 数 传 入 教 师 性 别, 返 回 教 师 表 中 不 同 性 别 的 教 师 个 数, 执 行 它, 比 较 与 存 储 过 程 的 不 同 6. 建 一 级 联 删 除 表 级 行 级 触 发 器, 当 删 除 某 个 学 生 的 信 息 时, 将 成 绩 表 中 该 学 生 的 成 绩 一 并 删 除, 比 较 表 级 与 行 级 触 发 器 的 结 果 实 验 五 数 据 库 设 计 试 验 1. 掌 握 Power Designer 的 安 装 方 法 2. 熟 悉 Power Designer 使 用 环 境 3. 掌 握 利 用 Power Designer 进 行 可 视 化 数 据 库 概 念 模 型 逻 辑 模 型 的 设 计 5
1. 安 装 Power Designer; 2. 熟 悉 Power Designer 使 用 环 境 ; 3. 设 计 下 面 业 务 需 求 的 数 据 库, 包 括 概 念 模 型 和 逻 辑 模 型 的 建 立 a) 设 有 一 商 务 数 据 库 用 以 处 理 销 售 记 帐, 它 涉 及 的 信 息 包 括 : i. 顾 客 姓 名, 所 在 单 位 及 电 话 号 码 ; ii. 商 品 名 称, 型 号 及 单 价, 某 顾 客 购 买 某 商 品 的 数 量 和 日 期 ; iii. 假 设 无 同 名 顾 客, 无 同 名 商 品, 电 话 公 用 ( 指 同 一 单 位 的 顾 客 使 用 同 一 电 话 ), 顾 客 只 可 在 不 同 日 期 购 买 同 一 商 品 b) 某 学 生 管 理 信 息 系 统 要 求 管 理 学 生 的 基 本 信 息, 成 绩, 住 宿 具 体 业 务 规 则 有 : i. 同 性 别 的 学 生 必 须 住 在 同 一 幢 宿 舍 楼 ; ii. 同 一 门 课 程 有 多 个 老 师 上 课, 并 且 某 门 课 程 可 能 有 先 行 课 ; 不 同 的 老 师 上 同 一 门 课 使 用 不 同 的 教 材 ; iii. 同 一 个 学 生 可 以 选 多 门 课 程 ; iv. 对 学 生 进 行 分 班 管 理 各 班 都 设 有 一 到 多 名 指 导 老 师,; v. 该 学 校 有 多 幢 宿 舍 楼, 且 男 女 生 要 求 占 用 的 楼 的 数 量 大 于 2 幢, 并 要 求 管 理 其 基 本 信 息, 如 编 号 具 体 位 置 房 间 数 能 容 纳 的 人 数 等 ; 安 排 宿 舍 时, 男 女 同 学 不 能 安 排 在 同 一 栋 楼 ; 4. 将 上 面 建 立 好 的 逻 辑 模 型, 转 换 称 为 物 理 模 型, 并 生 成 到 oracle 数 据 库 中 实 验 六 综 合 实 验 1. 掌 握 利 用 计 算 机 高 级 程 序 设 计 语 言 连 接 数 据 库 ; 2. 利 用 高 级 程 序 设 计 语 言 从 数 据 库 中 获 取 数 据 3. 利 用 高 级 程 序 设 计 语 言 对 数 据 库 中 的 数 据 进 行 修 改 删 除 等 1. 利 用 VC++ 连 接 oracle 数 据 库 ; 2. 利 用 VC++ 从 oracle 数 据 库 中 获 取 数 据 ; 3. 利 用 VC++ 对 oracle 数 据 库 进 行 数 据 更 新 和 删 除 三 实 验 环 境 : (1) 安 装 pl sql developer ; (2) 安 装 VC++ 6 企 业 版 ; (3) 安 装 oracle 数 据 库 客 户 端 程 序 ; 四 实 验 步 骤 (4) 在 数 据 库 服 务 器 上 启 动 oracle 数 据 库 服 务 具 体 步 骤 如 下 : a) 如 果 为 windows 服 务 器, 则 可 以 通 过 查 看 服 务 的 方 式 启 动 服 务 b) 如 果 数 据 库 服 务 器 操 作 系 统 为 Linux 或 者 Unix, 则 以 oracle 用 户 登 录 系 统 后, 新 开 一 个 控 制 台, 并 键 入 命 令 sqlplus, 然 后 键 入 / as sysdba, 系 统 连 接 到 数 据 库, 键 入 startup 即 可 启 动 数 据 库 服 务, 再 键 入 exit 退 出 数 据 库 6
环 境, 再 键 入 lsnrctl start 启 动 oracle 数 据 库 监 听 服 务 (5) 在 装 有 VC++ 的 机 器 上 设 置 oracle 数 据 库 的 DNS 网 络 命 名 服 务 名 称, 具 体 步 骤 如 下 : a) 打 开 侦 听 设 置 应 用 程 序, 即 : 系 统 -> 程 序 ->Oracle->Configuration and Migration Tools->Net Manager b) 展 开 树 型 菜 单 中 的 本 地, 再 展 开 服 务 名 称, 并 点 中 服 务 名 称, 点 击 菜 单 上 的 编 辑 下 的 创 建, 即 打 开 侦 听 应 用 服 务 程 序, 安 装 向 导, 设 置 好 相 应 的 服 务 名 称, 并 测 试 通 过 (6) 在 装 有 VC++ 的 机 器 上 设 置 oracle 数 据 库 的 ODBC 连 接 具 体 如 下 : a) 打 开 控 制 面 板 ; b) 打 开 管 理 工 具 ; c) 打 开 数 据 源 (ODBC) d) 选 择 用 户 DSN 或 者 系 统 DSN tab 页 面 ; e) 选 择 添 加 按 钮 ; f) 选 择 oracle 数 据 库 驱 动 程 序 ; g) 在 相 应 输 入 框 中 输 入 相 关 数 据, 要 注 意, 在 TNS Service Name 文 本 输 入 框 中 输 入 刚 才 设 置 好 的 DNS 命 名 服 务 名 称 (7) 选 择 菜 单 File New, 系 统 将 显 示 New 对 话 框 (8) 选 择 Projects 标 签, 在 显 示 的 项 目 类 型 中 选 择 MFC AppWizard(exe) (9) 在 右 边 的 Project Name 编 辑 框 中 输 入 项 目 名 称, 如 MyDatabaseExam, 然 后 按 OK (10) MFC AppWizard 将 分 几 步 询 问 你 有 关 要 建 立 的 新 项 目 的 配 置 第 一 个 对 话 框 问 你 是 创 建 哪 种 类 型 的 应 用 ( 单 文 档 多 文 档 还 是 对 话 框 类 型 ), 选 择 创 建 单 文 档 应 用 Single document, 然 后 按 Next 按 钮 (11) 翻 过 后 面 的 五 个 页 面 ( 按 Next), 每 个 页 面 可 以 让 你 改 变 项 目 的 不 同 选 项, 这 个 例 子 暂 时 不 设 置 这 些 选 项 (12) 最 后 一 个 MFC AppWizard 屏 幕 告 诉 你 App Wizard 为 你 自 动 产 生 的 类 单 击 Finish 键,AppWizard 显 示 一 个 关 于 该 项 目 的 摘 要, 列 出 这 些 类 和 你 所 选 择 的 特 征 测 试 数 据 库 连 接 代 码 如 下 : CString ConnectString = "DSN=Mydatabase;UID=bjyddx;PWD=bjyddx"; CDatabase dbconn; CDBException pex; try if(!dbconn.isopen()) dbconn.openex(connectstring,cdatabase::noodbcdialog); TRACE(" 数 据 库 连 接 成 功!\n"); 7
catch(cdbexception *pex) pex->reporterror(); TRACE(" 数 据 库 连 接 失 败!\n"); pex->delete(); 从 数 据 库 中 查 询 数 据 代 码 如 下 : CDatabase dbconn; CDBException pex; try if(!dbconn.isopen()) dbconn.openex(connectstring,cdatabase::noodbcdialog); TRACE(" 数 据 库 连 接 成 功!\n"); catch(cdbexception *pex) pex->reporterror(); TRACE(" 数 据 库 连 接 失 败!\n"); pex->delete(); CString x_sql; CString str_name; CRecordset x_recordset(&dbconn); x_sql="select * from t_student where sno=2006001"; try if(!x_recordset.isopen()) if(x_recordset.open(crecordset::snapshot,x_sql,crecordset::readonly))//crecordset::read Only if(!x_recordset.iseof()) x_recordset.getfieldvalue("sname",str_name); x_recordset.close(); 8
catch(cdbexception *pex) pex->reporterror(); pex->delete(); 9