第 5 章 数 据 库 创 建 概 述
绝 大 多 数 的 应 用 程 序 由 于 某 种 实 在 的 需 求 而 开 始 设 计 假 定 你 的 硬 盘 需 要某 种 特 殊 的 维 护 下 一 步 就 是 描 述 你 所 需 要 的 功 能 例 如 一 个 实 用 程 序 可 能需 要 访 问 磁 盘 资 源 确 定 是 否 有 问 题 并 最 终 解 决 所 发 现 的 问 题 一 考 虑 到 某种 功 能 就 可 以 开 始 查 看 用 户 接 口 最 后 创 建 使 设 备 正 常 运 转 所 需 的 代 码
所 有 这 些 步 骤 数 据 库 应 用 程 序 都 要 求 你 依 然 要 有 已 知 的 应 用 程 序 需 求
然 | 后 | 决 | 定 | 那 | 个 | 应 | 用 |
程 |
序 | 要 | 做 | 什 | 么 | 不 | 过 | 数 |
据 |
库 |
应 |
用 |
程 |
序 |
还 |
要 |
增 |
加 |
一 |
步 |
数 |
据 | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
库 | 应 | 用 | 程 | 序 | 的 | 主 | 要 |
功 |
能 | 是 | 访 | 问 | 数 | 据 | 并 | 有 | 条 |
件 |
地 |
允 |
许 |
用 |
户 |
操 |
纵 |
它 |
当 |
然 |
这 |
是 | |||
一 | 个 | 非 | 常 | 简 |
化 |
了 |
的 |
说 |
法 | 实 | 际 | 过 | 程 | 要 | 复 | 杂 | 得 |
多 |
在 |
真 |
正 |
进 |
行 |
数 |
据 |
库 |
应 |
用 |
程 |
序 | |||
设 | 计 | 之 |
前 |
— | — | 明 | 确 |
地 |
说 | 在 | 创 | 建 | 任 | 何 | 用 | 户 | 界 |
面 |
元 |
素 |
之 |
前 |
— |
— |
必 |
须 |
首 |
先 |
设 |
计 |
数 |
据 |
库 本 身
决 定 如 何 设 计 你 的 数 据 库 的 部 分 过 程 是 规 划 出 你 计 划 如 何 访 问 数 据 库 以 及计 划 在 数 据 库 中 放 入 多 少 数 据 例 如 如 果 唯 一 的 目 标 只 是 存 储 一 些 个 人 姓 名和 地 址 那 么 就 不 会 需 要 基 于 服 务 器 的 DB M S 数 据 库 管 理 系 统 你 还 要 清晰 地 知 道 所 用 的 程 序 设 计 语 言 是 否 能 够 操 作 所 使 用 的 DB M S 在 第 4 章 中 我们 研 究 了 三 种 从 V is u a l C + + 访 问 数 据 库 的 方 法 ODB C O LE - D B 和 ADO 我甚 至 说 明 了 如 何 设 置 ODB C 的 数 据 源 名 称 (D S N ) 最 后 我 们 讨 论 了 不 用 获 得
额 外 的 驱 动 程 序 即 能 访 问 的 DB M S 的 类 型 以 及 在 需 要 时 获 取 驱 动 程 序 的 途 径不 过 知 道 如 何 访 问 数 据 库 并 不 是 说 你 已 经 知 道 数 据 库 都 包 含 些 什 么
注 在 可 以 设 计 数 据 库 之 前 要 知 道 如 何 访 问 它 以 及 数 据 库 的 内 部 结 构 的工 作 方 式
本 章 中 我 们 将 学 习 数 据 库 的 内 部 知 识 — — 并 探 查 与 DB M S 相 关 的 数 据 我 们 将 简 单 地 介 绍 一 下 数 据 库 的 基 础 知 识 例 如 学 完 本 章 后 你 会 知 道 什 么是 表 以 及 如 何 定 义 表 我 们 还 要 学 习 查 询 和 索 引 还 要 考 察 几 个 界 面 元 素 比如 窗 体 等 但 这 只 是 最 基 本 的 知 识 最 重 要 的 部 分 是 你 会 理 解 数 据 库 是 如 何运 行 的 这 是 用 C+ + 访 问 它 们 的 先 决 条 件
由 于 篇 幅 所 限 还 有 一 些 问 题 本 章 中 没 有 讨 论 我 不 想 花 很 多 时 间 去 探 讨关 系 数 据 库 理 论 市 面 上 这 样 的 书 很 全 本 章 结 束 时 你 可 能 不 会 全 面 地 掌握 SQ L 结 构 化 查 询 语 言 或 完 全 理 解 用 户 界 面 设 计 总 而 言 之 通 过 本 章 你 会 掌 握 创 建 后 续 章 节 中 用 到 的 简 单 数 据 库 所 需 的 一 切 知 识 应 该 把 本 章 看作 是 数 据 库 的 入 门 资 料 仅 此 而 已
Web 链 接 如 果 需 要 更 多 的 关 于 特 定 数 据 库 问 题 的 信 息 而 不 是 仅 限 于 大多 数 书 籍 所 提 供 的 或 某 个 人 所 谈 到 的 信 息 可 以 试 一 试 新 闻 组 例 如你 会 在 comp.theor y.info-retrieval newsgroup 中 找 到 很 多 理 论 信息 一 系 列 完 整 的 comp.datab ase.<product name > 新 闻 组 比 如comp.datab ase.ms-access 也 提 供 了 许 多 帮 助 你 会 看 到 这 些 新闻 组 可 以 帮 助 你 发 现 隐 藏 在 数 据 库 设 计 之 后 的 理 论 问 题 它 们 还 可 以指 导 你 克 服 设 计 自 己 的 数 据 库 时 所 面 临 的 障 碍
1 构 造 块 概 述
每 个 数 据 库 都 是 由 模 块 化 的 片 组 成 的 有 存 储 数 据 的 片 组 织 数 据 的 片 还 有 的 片 允 许 你 查 找 数 据 库 中 特 定 片 的 信 息 数 据 库 还 包 含 接 口 元 素 和 允 许 你操 纵 所 包 含 数 据 的 代 码 片 然 而 在 设 计 C+ + 应 用 程 序 时 你 多 半 会 忽 略 后 两种 模 块 化 的 片 事 实 上 我 们 在 本 章 中 不 讨 论 编 码 因 为 编 写 C+ + 应 用 程 序 不需 要 它 我 们 只 简 单 地 讨 论 窗 体 因 为 它 们 在 你 从 V isu a l C + + 访 问 数 据 库 结 构 之前 提 供 了 测 试 DB M S 中 你 的 数 据 库 结 构 的 便 利 方 式
注 释 我 们 要 为 本 章 中 所 有 的 示 例 使 用 Microsoft Access 并 不 是 因 为Access 更 好 一 些 而 是 因 为 它 提 供 了 大 量 的 工 具 可 以 使 数 据 库 设计 过 程 更 加 容 易 Access 还 是 Microsoft Office 专 业 版 软 件 包 的 一部 分 所 以 在 阅 读 本 书 时 很 可 能 你 们 中 许 多 人 的 手 头 都 有 Access 的 拷 贝 请 记 住 你 应 该 会 有 所 收 获 并 把 它 们 应 用 到 其 它 的 DBMS 产 品 中 去
图 5 .1 概 述 了 V is u a l C + + 数 据 库 管 理 器 以 及 数 据 库 是 如 何 交 互 作 用 的 如果 你 现 在 实 在 不 理 解 图 中 的 一 切 是 如 何 进 行 的 那 也 无 须 担 心 我 们 将 在 随 后的 章 节 中 讨 论 所 有 的 元 素 现 在 这 张 图 只 是 大 体 说 明 各 种 部 件 是 如 何 连 接 到一 起 的
可 移 植 性 开 始 设 计 过 程 之 前 一 定 要 确 保 数 据 库 和 你 选 择 的 DBMS 实 际 上可 以 和 Visual C++ 相 协 作 使 用 ODBC 之 外 的 ADO OLE-DB 和 DAO 的能 力 应 该 能 够 极 大 地 增 加 找 到 正 确 解 决 办 法 的 机 会 另 外 如 果 决 定从 多 个 平 台 访 问 数 据 库 的 话 需 要 保 证 有 办 法 以 想 为 其 编 写 应 用 程 序的 所 有 平 台 上 使 用 数 据 库 并 保 证 DBMS 支 持 文 件 和 记 录 锁 定 的 标 准
方 法 可 计 算 |
简 言 之 性 问 题 |
在 最 后 决 定 使 用 哪 一 个 DBMS 尤 其 是 计 划 在 多 种 机 器 上 使 用 |
之 前 DBMS |
必 须 检 查 每 一 个 的 情 况 下 更 应 如 |
|
---|---|---|---|---|---|
此 |
|||||
数 据 库 |
最 好 把 数 据 库 看 成 是 一 个 容 器 见 图 5 .1 数 据 库 用 来 存 储 要 用 于 存 储 和操 纵 数 据 的 全 部 元 素 大 多 数 的 数 据 库 是 单 个 的 文 件 比 如 A cce s s 用 的 M D B 文 件 也 可 以 使 用 有 分 离 文 件 的 产 品 文 件 都 存 储 在 一 个 像 目 录 的 地 方 在 这种 情 况 下 目 录 就 像 数 据 库 — — 它 是 把 所 有 其 它 元 素 保 持 在 一 起 的 容 器
注 释 Ashton-Tat e dBASE 的 发 明 者 首 次 在 单 个 Xbase 表 格 DBF 文 件 中 使 用 了 数 据 库 这 一 术 语 事 实 上 这 个 文 件 的 扩 展 名 D B F 的 意思 就 是 数 据 库 文 件 这 一 销 售 策 略 带 来 的 后 果 是 一 些 人 仍 然 对什 么 是 表 以 及 什 么 是 数 据 库 感 到 迷 惑 数 据 库 是 一 个 把 所 有 其 它 数 据元 素 保 存 在 一 起 的 容 器 其 中 包 括 代 码 窗 体 表 查 询 索 引 和 报告 不 管 你 现 在 在 想 什 么 遍 及 全 书 的 术 语 数 据 库 总 是 指 这 样 一个 容 器 它 将 一 个 数 据 集 的 所 有 数 据 元 素 都 保 存 在 一 起
图 5 .1 V is u a l C + + 数 据 库 管 理 器和数 据库 本身 之间的 关系
数 据 库 并 不 只 是 端 坐 在 那 里 看 上 去 很 可 爱 一 个 被 称 为 数 据 库 管 理 器 的特 殊 应 用 程 序 可 以 在 文 件 内 部 查 看 并 提 取 所 需 的 一 切 如 果 你 正 在 建 立 数 据 库可 能 想 看 看 已 经 定 义 的 查 询 或 者 窗 体 另 一 方 面 作 为 一 个 用 户 你 唯 一 的 兴趣 可 能 是 包 含 在 表 内 的 一 些 难 以 理 解 的 比 特 不 管 你 需 要 什 么 数 据 库 管 理 器正 是 这 样 的 应 用 程 序 它 在 数 据 库 内 查 找 并 为 你 提 取 所 需 要 的 东 西 本 质 上 讲数 据 库 管 理 器 像 一 个 正 在 碗 柜 这 个 容 器 中 找 东 西 的 人 那 样 寻 找 某 个 玻 璃 器 具或 者 什 么 吃 的 东 西
注 和 任 何 用 户 一 样 Visual C++ 请 求 数 据 管 理 器 从 数 据 库 获 取 它 所 需 要的 东 西
把 数 据 库 管 理 器 和 数 据 库 放 在 一 起 就 形 成 了 数 据 库 管 理 系 统 (D B M S ) 在V is u a l C + + 的 情 况 下 用 来 处 理 数 据 的 数 据 库 管 理 器 和 你 编 写 的 程 序 共 用 数 据管 理 器 的 规 则 换 言 之 用 户 要 提 出 请 求 必 须 和 应 用 程 序 交 互 作 用 反 过 来应 用 程 序 请 求 数 据 管 理 器 提 供 用 户 所 请 求 的 数 据 数 据 管 理 器 会 返 回 数 据 应用 程 序 将 其 显 示 出 来 这 听 起 来 好 像 有 很 多 工 作 要 做 实 际 上 并 非 如 此 对 C+ + 程 序 员 来 说 大 部 分 工 作 是 自 动 完 成 的 至 少 用 M F C A ppW iz a rd 创 建 应 用 程 序时 是 这 样
表
表 是 数 据 库 内 唯 一 可 以 保 存 数 据 的 结 构 其 它 每 种 结 构 都 被 设 计 成 以 某 种方 式 处 理 数 据 窗 体 用 于 显 示 数 据 索 引 用 于 排 序 数 据 查 询 寻 找 特 定 的 数 据片 实 际 存 储 数 据 的 唯 一 结 构 就 是 表
那 么 表 是 如 何 拼 装 起 来 的 呢 图 5 .1 已 很 好 地 说 明 了 这 一 点 请 回 想 一 下你 用 笔 和 纸 创 建 的 其 它 表 或 者 是 你 在 类 似 本 书 的 书 籍 中 看 见 过 的 表 表 通常 包 含 行 和 列 同 样 数 据 库 中 的 表 也 包 含 行 和 列
行 就 是 记 录 每 个 记 录 代 表 了 要 收 集 的 所 有 数 据 的 一 次 出 现 例 如 如 果你 在 创 建 姓 名 和 地 址 表 那 么 行 记 录 应 该 包 含 一 个 人 的 所 有 信 息 至 少 应该 包 含 设 计 表 时 要 求 保 存 的 信 息 — — 我 们 会 在 后 面 看 到 表 是 以 节 省 数 据 库 服务 器 空 间 的 方 式 组 合 起 来 的 你 仍 然 可 以 看 到 正 在 过 目 的 任 何 数 据 的 完 整 图片
注 行 记 录 总 是 包 含 要 存 储 在 数 据 库 中 的 数 据 实 例
每 一 个 表 列 或 称 做 字 段 都 包 含 一 类 数 据 例 如 可 能 有 名 为 La s t_ N a m e 的 表 列 字 段 这 个 字 段 应 包 含 你 的 姓 名 与 地 址 数 据 库 中 所 有 人 的 姓 名 字段 只 保 存 一 类 数 据 你 不 能 用 单 个 字 段 在 一 个 记 录 中 保 存 地 址 信 息 而 在 另 一个 记 录 中 保 存 年 龄 信 息 如 果 既 要 保 持 地 址 信 息 又 要 保 持 年 龄 信 息 就 必 须 构造 两 个 字 段
注 列 字 段 包 含 一 类 数 据 如 姓 氏 或 者 地 址
从 表 中 获 取 特 定 的 一 段 数 据 或 者 数 据 元 素 很 容 易 你 所 需 要 完 成 的 任 务 就是 请 求 特 定 的 行 记 录 和 列 字 段 从 数 据 库 中 获 取 数 据 的 过 程 — — 不 管它 是 包 括 一 个 数 据 元 素 还 是 包 括 表 提 供 的 所 有 记 录 — — 都 称 为 查 询 本 质 上 讲在 你 向 数 据 库 管 理 器 提 出 一 个 问 题 后 它 就 提 供 与 该 问 题 相 匹 配 的 数 据 予 以 响应 V is u a l C + + 在 提 出 问 题 时 很 大 程 度 上 要 依 赖 一 种 特 殊 的 语 言 这 就 是 SQ L
结 构 化 查 询 语 言 但 是 你 会 发 现 在 使 用 ADO O LE - D B 或 DAO 时 也
可 以 利 用 其 它 的 机 制 随 着 课 程 的 进 展 我 们 会 越 来 越 熟 悉 SQ L 但 是 如 果 想设 计 复 杂 工 程 的 话 就 要 花 一 些 额 外 的 时 间 来 学 习 这 门 语 言
注 创 建 查 询 就 像 是 询 问 数 据 库 关 于 表 内 容 的 问 题
索 引
如 果 再 看 一 下 图 5 .1 你 就 会 注 意 到 表 第 一 列 中 的 项 并 没 有 按 字 母 顺 序 排
序 | 没 |
错 |
数 |
据 |
库 |
不 |
存 |
储 |
你 |
以 |
特 |
别 |
的 |
顺 |
序 |
发 |
送 |
给 |
表 |
的 |
项 |
— |
— |
事 |
实 |
上 |
如 |
果 |
数 |
据 | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
库 | 不 | 排 | 序 | 的 |
话 |
其 |
效 |
率 |
可 |
能 |
会 | 更 | 高 | 如 | 果 | 每 | 次 | 某 |
个 |
人 |
添 |
加 |
或 |
删 |
除 |
记 |
录 |
时 |
数 |
据 | |||
库 | 管 | 理 | 器 | 都 | 要 | 重 | 新 |
排 |
序 | 表 | 中 | 所 | 有 | 的 | 记 | 录 | 你 | 可 | 能 |
就 |
做 |
不 |
了 |
太 |
多 |
的 |
工 |
作 |
了 |
不 |
用 | ||
说 | 你 | 并 | 非 | 总 | 是 | 需 |
要 |
数 | 据 | 的 | 顺 | 序 | 相 | 同 | 所 | 以 | 两 | 个 |
人 |
没 |
有 |
必 |
要 |
去 |
争 |
论 |
数 |
据 |
的 |
顺 |
序 |
是 什 么 一 个 人 可 能 想 要 地 址 表 以 姓 氏 来 排 序 另 一 个 人 可 能 又 需 要 表 按 Z IP
代 码 排 序
注 数 据 库 把 数 据 放 在 表 的 末 尾 不 能 保 证 会 以 什 么 样 的 顺 序 来 查 找 未 编索 引 的 表 中 的 数 据
那 么 如 何 以 某 种 顺 序 获 得 所 需 的 信 息 呢 答 案 是 索 引 图 5 .1 说 明 了 每 个记 录 都 要 考 虑 的 两 个 原 则 第 一 索 引 不 能 包 含 整 个 表 的 所 有 项 — — 它 只 包 含一 个 子 集 在 这 里 它 只 包 含 第 一 个 字 段 列 内 的 项 第 二 索 引 是 有 序 的索 引 包 含 了 指 向 表 中 的 记 录 的 指 针 不 过 图 5 .1 没 有 显 示 出 来 换 言 之 在 选择 记 录 时 所 看 到 的 数 据 和 数 据 库 管 理 器 用 来 查 找 整 个 记 录 的 指 针 是 成 对 的排 序 索 引 允 许 你 快 速 地 查 找 想 要 的 那 类 数 据 指 针 允 许 你 查 找 表 中 的 整 个 记 录使 用 索 引 还 允 许 两 个 人 以 两 种 不 同 的 顺 序 访 问 一 个 表 中 的 数 据 因 为 索 引 有 序
而 表 无 序 所 以 可 以 为 用 户 所 需 的 每 一 种 数 据 排 序 方 式 定 义 一 个 索 引
没 必 要 把 索 引 限 制 在 单 个 表 内 使 用 很 多 数 据 库 管 理 器 允 许 你 创 建 跨 越 多个 表 的 索 引 只 要 那 些 表 是 相 关 的 即 可 例 如 为 了 掌 握 客 户 的 采 购 情 况 可以 创 建 两 个 表 第 一 个 表 包 含 客 户 列 表 而 第 二 个 表 包 含 每 次 采 购 的 细 节 索引 可 以 用 消 费 者 ID 字 段 加 采 购 编 号 来 排 序 两 个 表 首 先 是 以 客 户 为 序 然 后 是以 采 购 编 号 为 序
注 只 要 表 以 某 种 方 式 相 关 索 引 就 可 以 跨 越 多 个 表
我 们 来 看 一 看 这 个 多 表 索 引 概 念 实 际 上 是 如 何 工 作 的 图 5 .2 说 明 了 多 表 索引 的 一 个 示 例 请 注 意 C lie n ts 客 户 和 Pu rc h a s e s 采 购 表 间 是 有 关 系 的两 表 中 编 号 为 0001 的 C lie n t ID 识 别 名 叫 A n n 的 客 户 但 是 C lie n ts 客 户 表 只 有 C lie n t ID 的 一 个 拷 贝 因 为 一 次 只 有 一 个 客 户 可 以 使 用 C lie n t ID 因 为客 户 可 以 多 次 采 购 所 以 Pu rc h a s e s 采 购 表 包 含 每 个 C lie n t ID 的 多 个 拷 贝
请 注 意 在 Pu rc h a s e s 采 购 表 中 记 载 A n n 采 购 了 $20 这 次 采 购 由 编 号 为 97001 的 P u rc h a s e ID 识 别 此 外 每 一 个 P u rc h a s e ID 都 是 唯 一 的 否 则 无 法 将 一次 采 购 与 另 一 次 采 购 区 分 开 来 现 在 看 一 下 索 引 它 包 含 两 个 值 C lie n t ID 和P u rc h a s e ID 它 先 由 C lie n t ID 排 序 然 后 由 Pu rc h a s e ID 排 序 虽 然 表 是 无 序 的 但 是 该 索 引 却 有 序 索 引 中 的 指 针 允 许 你 在 两 个 表 中 查 找 信 息
不 要 认 为 索 引 也 被 限 制 在 表 内 的 直 接 项 上 很 多 数 据 库 程 序 员 都 发 明 了 组合 表 项 的 方 法 甚 至 可 以 用 特 殊 等 式 产 生 非 表 的 索 引 数 据 很 明 显 数 据 库 管理 器 制 定 的 规 则 限 制 了 把 什 么 放 入 索 引 的 选 择 换 言 之 如 果 数 据 库 管 理 器 不允 许 就 不 能 把 某 种 数 字 计 算 添 加 到 索 引 中 去 同 时 如 果 以 最 初 预 想 的 顺 序
在 屏 幕 上 显 示 数 据 时 有 麻 烦 可 以 先 做 一 下 试 验
注 一 些 DBMS 不 限 制 你 在 索 引 中 使 用 哪 些 字 段 名 你 也 可 以 使 用 复 杂 的 表达 式
可 惜 的 是 A cce s s 没 有 提 供 在 数 据 库 设 计 视 图 中 创 建 复 杂 索 引 的 简 明 方 式可 以 创 建 包 含 多 个 字 段 的 索 引 可 以 分 别 控 制 那 些 字 段 排 序 的 顺 序 但 是 不 能直 接 使 用 等 式 或 者 其 它 复 杂 的 指 令 在 一 些 情 况 下 可 以 用 SQ L 语 句 创 建 复 杂的 索 引 但 其 本 身 就 很 复 杂 幸 运 地 是 你 可 以 把 复 杂 的 索 引 作 为 查 询 的 一 部分 来 提 供 我 们 会 在 本 章 的 后 面 讨 论 这 一 点
图 5 .2 索引 可以 跨越 多个表
技 巧 DBMS 不 允 许 直 接 向 索 引 中 添 加 等 式 或 者 计 算 值 但 是 你 可 以 通 过向 表 中 添 加 特 殊 的 计 算 字 段 来 实 现 这 一 点 该 字 段 可 以 包 含 计 算 值而 索 引 又 包 含 这 个 特 殊 的 字 段 例 如 可 以 用 Access 完 成 这 个 工 作它 允 许 用 Expression Builder 表 达 式 生 成 器 给 一 个 字 段 赋 缺 省值 如 果 用 户 从 来 没 有 见 过 这 个 字 段 那 么 结 果 就 是 你 可 以 为 了 编 索引 而 使 用 的 特 殊 字 段 如 你 所 见 结 果 是 一 样 的 只 不 过 完 成 的 方 法稍 稍 复 杂 了 一 点
查 询
再 看 一 下 图 5 .1 我 用 来 定 义 查 询 项 的 图 标 表 示 这 是 一 个 大 概 的 看 法 — — 查询 是 向 数 据 库 提 出 的 有 关 它 所 包 含 数 据 的 提 问 可 能 会 有 人 向 你 展 示 难 以 理 解的 复 杂 的 SQ L 语 句 试 图 让 你 相 信 查 询 并 不 是 一 个 简 单 的 过 程 一 个 简 单 的事 实 是 查 询 就 是 一 个 提 问
注 始 终 要 记 住 查 询 就 是 向 数 据 库 提 出 的 有 关 它 所 包 含 数 据 的 提 问
每 个 查 询 都 有 特 定 的 部 件 但 这 个 信 息 只 是 帮 助 你 以 DB M S 可 以 理 解 的 方式 来 简 述 这 个 提 问 请 记 住 DB M S 实 际 上 对 操 纵 数 据 库 的 内 容 负 责 记 住这 一 点 我 们 来 看 一 看 比 较 简 单 的 SQ L 语 句 它 允 许 你 查 看 两 个 相 关 表 中 的 所有 记 录
S E L E C T F o o d s .* , O rd e r s .*
F R O M F oods IN N E R J O IN O rd e rs O N F o o d s .F o o d_ ID = O rde rs .F o o d _ ID
W H E R E ( ( ( " F oo d_ ID " )< > " V E G - 0 0 0 01- S P L " ) )
OR DE R B Y F o o d s . F o o d _ ID ;
首 先 我 要 指 出 在 使 用 A cce s s 时 没 有 必 要 使 用 像 这 样 的 SQ L 语 句 除 非你 实 在 想 用 A cce s s 会 用 Se le c t Q u e r y 选 择 查 询 对 话 框 帮 助 你 创 建 SQ L 语句 现 在 让 我 们 看 一 看 这 条 查 询 语 句
我 们 要 做 的 第 一 件 事 是 选 择 两 个 表 以 及 这 两 个 表 内 的 所 有 字 段 S ELE C T 语 句 要 DB M S 选 择 一 些 数 据 F ood s 食 品 和 O rd e rs 订 货 是 两 张 表 出现 在 表 名 后 的 星 号 (* ) 要 DB M S 选 择 两 张 表 中 所 有 的 字 段 如 果 想 选 择 特 定 的 字段 应 该 以 < ta b le n a m e > .< fie ld n a m e > 格 式 输 入 字 段 名
SQ L 语 句 的 下 一 行 看 起 来 确 实 很 复 杂 但 它 所 要 做 的 只 是 要 DB M S 建 立两 张 表 的 关 系 FR O M 关 键 字 告 诉 DB M S 主 表 是 F oods 食 品 IN N E R J O IN 说 明 如 何 创 建 与 从 表 O rd e rs 订 货 的 关 系 ON 关 键 字 说 明 我 们 准 备 建 立 关系 的 字 段 在 这 里 两 张 表 都 有 一 个 同 名 的 字 段 我 们 就 用 它 来 创 建 关 系 创建 关 系 的 标 准 是 有 两 个 包 含 相 同 类 型 信 息 的 字 段 就 像 我 在 图 5 .2 中 说 明 的那 样 在 这 种 情 况 下 两 个 相 关 的 字 段 都 是 C lie n t ID 对 主 表 中 的 每 一 个 项 来说 从 表 通 常 都 包 含 多 个 项 虽 然 这 并 不 是 绝 对 要 求 的 对 主 表 中 的 每 一 个 记录 从 表 不 是 非 得 有 一 个 项 与 之 对 应
可 以 用 SQ L 来 限 制 实 际 获 取 的 记 录 数 在 这 里 我 们 告 诉 DB M S 不 想 看到 F ood_ID 字 段 等 于 V E G - 00001- S P L 的 任 何 记 录 很 明 显 可 以 用 任 何 标 准 来限 制 取 回 的 记 录 数 选 择 标 准 可 能 变 得 非 常 复 杂
最 后 OR DE R B Y 关 键 字 告 诉 DB M S 你 想 如 何 排 序 记 录 在 这 里 我 们 想
基 于 F ood_ID 字 段 的 内 容 以 升 序 次 序 来 排 序 记 录 因 为 SQ L 允 许 完 全 利 用 表 达式 所 以 你 可 以 使 OR DE R B Y 子 句 要 多 复 杂 就 多 复 杂 可 以 用 等 式 或 其 它 任何 所 需 的 标 准 以 正 好 需 要 的 顺 序 获 取 想 要 的 数 据
Web 链 接 如 果 你 确 实 想 熟 练 掌 握 S Q L 请 看 http://www .opengroup.org.
/ot/search .htm 处 的 Open Group Web 站 点 Open Group 是 OSF 和X/Open 的 组 合 输 入 SQL 然 后 在 询 问 想 要 寻 找 的 内 容 时 单 击 Search 搜 索 按 钮 你 会 发 现 一 系 列 的 S Q L 规 范
与 A cce s s 不 同 V is u a l C + + 在 大 多 数 情 况 下 会 要 求 你 手 工 创 建 这 些 SQ L 语句 时 间 不 长 你 就 会 发 现 在 A cce s s 或 你 正 在 使 用 的 任 何 DB M S 中 创 建 所需 要 的 查 询 是 提 高 开 发 速 度 的 一 种 方 式 尤 其 在 你 对 编 写 SQ L 语 句 了 解 不 多 的时 候 更 是 如 此
注 窗 体 在 屏 幕 上 表 示 用 查 询 从 数 据 库 收 集 到 的 数 据
窗 体 和 报 告
到 现 在 为 止 我 们 谈 论 了 很 多 管 理 和 存 储 问 题 不 错 在 可 以 使 用 数 据 库之 前 它 要 求 内 部 管 理 结 构 全 都 正 确 但 是 如 果 不 能 以 某 种 方 式 使 用 收 集 到的 信 息 那 么 确 实 没 有 任 何 理 由 说 工 作 已 经 完 成 了 窗 体 和 报 告 是 实 际 使 用 数据 库 信 息 的 两 种 最 普 通 的 方 法
注 报 告 通 过 打 印 表 示 用 查 询 从 数 据 库 收 集 到 的 数 据
通 常 窗 体 表 示 在 屏 幕 上 看 到 的 数 据 而 报 告 表 示 发 送 到 打 印 机 的 相 同 数
据 窗 体 常 常 显 示 为 已 请 求 的 所 有 记 录 的 网 格 或 者 一 次 只 显 示 一 条 记 录 报告 总 是 显 示 已 收 集 到 的 一 系 列 完 整 的 数 据 但 它 通 常 不 使 用 网 格 格 式 典 型 情况 下 报 告 提 供 已 请 求 数 据 的 某 种 结 构 化 视 图
深 入 窗 体
我 们 再 来 谈 一 谈 窗 体 如 前 所 述 通 常 用 两 种 方 式 来 表 现 窗 体 中 的 数 据
网 格 中 的 所 有 记 录 或 者 一 次 显 示 一 条 记 录 图 5 .3 显 示 了 典 型 的 网 格 视 图 图 5 .4 则 显 示 了 典 型 的 单 记 录 细 节 视 图 网 格 法 的 主 要 优 点 是 可 以 得 到 数 据 的 整 体 印象 使 用 这 种 视 图 时 正 确 地 排 序 数 据 一 定 会 有 好 处 — — 当 记 录 数 超 出 一 屏 信息 时 可 以 容 易 地 看 到 记 录 之 间 的 关 系 例 如 在 以 网 格 显 示 之 前 可 以 用 产品 类 型 来 排 序 库 存 数 据 库 这 样 就 可 以 看 到 库 存 中 有 多 少 相 似 项
图 5 .3 网格 视图 允许 你一次 看到 多条 记录
图 5 .4 单记 录细 节视 图允许 你看 到一 个记录 的所 有信息
使 用 数 据 网 格 视 图 的 缺 点 也 十 分 明 显 不 但 所 有 的 字 段 都 挤 在 一 起 而 且如 果 不 水 平 滚 动 的 话 很 可 能 看 不 到 表 或 表 集 中 全 部 的 字 段 当 然 可 以很 快 地 获 得 许 多 记 录 的 概 述 但 是 看 不 到 个 别 记 录 的 完 整 情 况 一 些 数 据 库 应用 程 序 克 服 了 这 种 限 制 允 许 从 网 格 视 图 的 一 组 记 录 中 选 择 单 个 记 录 然 后 再转 换 到 单 记 录 细 节 视 图 方 式
技 巧 一 定 要 放 置 你 认 为 用 户 在 设 计 网 格 视 图 窗 体 时 最 需 要 的 字 段 这 样才 能 极 大 地 减 少 用 户 查 找 重 要 数 据 时 必 须 做 的 水 平 移 动 次 数 一 旦 根据 重 要 性 对 数 据 进 行 了 排 序 后 就 可 以 实 现 第 二 步 把 相 似 的 数 据 聚集 到 一 起 例 如 把 所 有 的 电 话 号 码 保 存 在 一 个 地 址 数 据 库 中 是 非 常有 用 的 这 样 试 图 查 找 特 定 人 的 住 址 时 只 要 逐 个 调 用 号 码 就 可 以了 可 以 通 过 事 件 监 视 用 户 的 使 用 或 者 用 应 用 程 序 实 际 地 观 察 它 们以 此 来 测 试 网 格 的 排 列 用 户 查 找 数 据 时 所 必 须 做 的 移 动 越 少 越 好
单 记 录 视 图 有 精 确 表 示 一 个 记 录 的 优 点 你 可 以 看 到 记 录 所 提 供 的 一 切 当 然 一 看 到 图 5 .4 这 种 表 示 的 缺 点 立 刻 就 明 显 了 不 像 网 格 视 图 单 记 录 视图 不 提 供 任 何 种 类 的 概 述 不 能 用 它 来 分 析 趋 势 或 者 得 到 整 个 表 内 容 的 更 完整 的 情 况 由 于 这 个 原 因 单 记 录 视 图 通 常 被 保 留 作 表 数 据 的 详 细 视 图 一 旦用 网 格 视 图 找 到 了 想 要 的 东 西 就 可 以 用 它 来 编 辑 或 者 验 证 要 删 除 的 记 录
注 用 网 格 视 图 向 用 户 提 供 可 以 用 来 选 择 记 录 的 概 述 然 后 用 单 记 录 视 图让 用 户 一 眼 就 看 到 记 录 的 全 部 细 节
第 三 种 窗 体 视 图 你 可 能 也 会 经 常 使 用 它 由 添 加 了 网 格 的 单 记 录 视 图 窗 体组 成 单 个 记 录 显 示 主 表 的 内 容 例 如 它 可 能 显 示 如 姓 名 地 址 和 电 话 号 码这 样 的 客 户 信 息 网 格 包 含 与 主 记 录 相 匹 配 的 从 表 内 的 记 录 例 如 网 格 可 能包 含 一 年 中 某 客 户 进 行 的 所 有 采 购
注 始 终 要 避 免 数 据 过 多 而 使 得 窗 体 杂 乱 无 章 如 果 有 必 要 的 话 可 使 用多 重 窗 体 来 避 免 屏 幕 杂 乱
可 惜 的 是 要 做 出 一 个 出 色 的 组 合 型 窗 体 是 十 分 困 难 的 除 非 严 格 限 制 网
格 显 示 的 字 段 数 否 则 网 格 会 占 据 很 多 的 屏 幕 资 源 结 果 很 多 组 合 窗 体 看 起来 都 很 拥 挤 而 且 就 是 因 为 有 太 多 的 东 西 要 看 反 而 很 难 看 得 见 数 据 了 问 题是 你 想 使 查 找 数 据 很 容 易 而 这 限 制 了 用 户 在 任 一 给 定 窗 体 上 的 位 移 量
单 记 录 视 图 的 另 一 种 窗 体 使 用 多 重 窗 体 来 避 免 屏 幕 杂 乱 的 问 题 假 定 实 际上 需 要 50 个 字 段 来 描 述 才 能 了 解 库 存 中 的 一 个 项 目 视 图 在 一 个 屏 幕 上 显 示 那么 多 的 字 段 就 会 产 生 极 大 的 杂 乱 没 有 人 可 以 找 到 所 需 要 的 东 西 在 这 里应 该 创 建 一 个 概 述 记 录 中 的 数 据 的 主 窗 体 然 后 由 辅 窗 体 提 供 详 细 的 资 料 例如 可 以 在 一 个 辅 窗 体 上 放 入 库 存 注 释 因 为 注 释 往 往 要 占 据 很 多 的 空 间 还可 以 在 分 离 的 窗 体 上 放 入 特 定 项 目 的 厂 商 数 据 因 为 在 很 多 情 况 下 一 般 来 说你 不 会 再 排 序 新 的 项 目 了 当 然 添 加 辅 窗 体 就 是 向 主 窗 体 中 添 加 细 节 按 钮这 会 进 一 步 减 少 可 用 的 屏 幕 空 间 量 要 权 衡 屏 幕 杂 乱 和 一 个 窗 体 上 按 钮 过 多 的混 乱 因 素 在 一 些 情 况 下 最 好 的 答 案 是 除 非 确 实 需 要 某 条 信 息 否 则 不 要显 示 它
深 入 报 告
最 初 人 们 设 想 计 算 机 可 以 产 生 无 纸 办 公 室 现 在 好 像 并 没 有 实 现 这 一 点用 计 算 机 产 生 的 报 告 比 任 何 用 打 字 机 的 办 公 室 产 生 的 报 告 还 要 多 事 实 上 创建 报 告 是 很 容 易 的 以 至 于 还 没 有 真 正 地 去 思 考 时 报 告 纸 就 已 经 开 始 产 生 了
传 统 的 报 告 赋 予 你 这 样 的 能 力 将 信 息 存 储 在 数 据 库 中 并 以 纸 的 形 式 输出 但 是 报 告 不 必 要 再 出 现 在 纸 上 了 例 如 如 果 你 有 一 个 W e b 站 点 需 要使 雇 员 及 时 了 解 公 司 当 前 的 状 况 就 可 以 发 表 能 在 In te rn e t 浏 览 器 中 阅 读 的 形 式的 报 告 电 子 邮 件 也 在 通 信 中 发 挥 了 更 大 的 作 用 你 可 能 会 发 现 报 告 必 须 是
电 子 格 式 这 样 才 能 把 它 邮 寄 给 别 人
不 论 报 告 采 取 哪 一 种 |
形 式 它 都 具 有 一 些 确 定 |
的 特 性 需 |
要 |
在 | 创 | 建 | 过 |
程 |
中 |
---|---|---|---|---|---|---|---|---|---|
加 以 考 虑 这 些 特 性 是 |
组 织 目 的 和 接 受 对 象 |
下 面 各 段 就 |
讨 |
论 |
要 |
着 |
重 |
考 |
虑 |
的 这 些 问 题 |
|||||||||
组 织 在 可 以 组 织 报 |
告 之 前 需 要 考 虑 想 在 报 |
告 中 看 到 哪 |
种 |
信 | 息 | 该 |
信 |
息 |
有 | 多 | 少 |
是 |
重 | 复 | 的 |
除 |
去 | 不 | 需 |
要 |
的 |
数 |
据 | 为 | 你 |
想 |
要 |
查 |
看 |
的 |
数 |
据 | 腾 |
出 |
空 | 间 | — | — | 当 | 使 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
用 | 已 | 打 | 印 | 的 | 媒 | 体 | 时 | 这 | 种 | 考 | 虑 | 非 | 常 | 重 | 要 | 因 | 为 | 在 |
使 |
用 | 数 | 据 | 的 | 时 | 候 | 就 | 不 | 能 | 再 | 用 | 上 | ||
它 | 了 | 腾 | 出 | 空 | 间 | 的 | 另 | 一 | 种 | 方 | 式 | 是 | 使 | 所 | 有 | 重 | 复 | 数 |
据 |
都 | 在 | 报 | 告 | 的 | 同 | 一 | 行 | 上 | 这 | 个 | |||
过 | 程 | 称 | 为 | 分 | 组 | 创 | 建 | 分 | 组 | 不 | 但 | 节 | 省 | 了 | 空 | 间 | 还 | 可 |
以 |
帮 | 助 | 报 | 告 | 的 | 阅 | 读 | 者 | 更 | 快 | 地 | 查 |
找 到 所 需 的 信 息
目 的 报 告 的 目 的 确 定 应 该 包 括 多 少 信 息 摘 要 是 否 会 替 代 详 细 的 资 料清 单 既 要 给 读 者 提 供 所 需 的 全 部 信 息 又 不 能 让 无 用 的 信 息 使 报 告 显 得 杂 乱这 一 点 很 重 要 例 如 没 有 必 要 把 客 户 数 据 库 的 每 一 个 细 节 都 告 诉 经 理 他 们真 正 感 兴 趣 的 是 最 后 一 行 每 个 客 户 采 购 了 多 少 或 者 是 每 次 采 购 的 金 额 有 多大
我 们 再 来 看 一 看 我 在 图 5 .2 中 介 绍 过 的 C lie n ts 和 Pu rc h a s e s 表 如 果 你 为 此表 创 建 了 采 购 报 告 那 么 肯 定 想 包 括 Pu rc h a s e s 采 购 表 中 的 全 部 摘 要 信 息但 是 为 了 节 省 空 间 最 好 把 所 有 像 C lie n t ID 和 N a m e 字 段 这 样 的 客 户 信 息 用作 标 题 分 组 采 购 信 息 在 像 这 样 的 报 告 中 可 能 不 需 要 所 有 的 客 户 信 息 例如 如 果 这 个 报 告 的 目 的 是 产 生 一 个 电 话 号 码 表 就 可 能 无 须 添 加 地 址 信 息
如 果 想 创 建 一 个 关 于 客 户 的 一 般 报 告 该 怎 么 办 呢 在 这 种 情 况 下 可 能 要
包 括 C lie n ts 客 户 表 中 的 所 有 客 户 信 息 而 排 除 Pu rc h a s e s 采 购 表 中 像 Pu rc h a s e ID 这 样 的 信 息 另 外 可 能 只 要 简 单 地 合 计 每 个 客 户 的 采 购 值 并 在 报 告 中 列入 单 个 数 字 而 不 是 创 建 每 次 采 购 的 详 细 清 单
接 受 对 象 观 众 观 众 会 影 响 编 制 报 告 的 类 型 例 如 你 可 能 会 发 现 给 同 事 看 的 报 告 可 以 采 用 非 常 简 单 易 读 的 格 式 你 可 能 需 要 这 样 的 格 式 因 为这 样 的 报 告 包 括 了 很 多 详 细 的 信 息 另 一 方 面 从 管 理 角 度 讲 又 要 使 报 告 更精 致 一 些 才 行
技 巧 不 要 低 估 你 作 为 程 序 员 对 报 告 的 需 求 当 然 可 以 试 着 用 屏 幕 上 的窗 体 排 除 所 遇 到 的 数 据 库 设 置 问 题 但 是 报 告 可 以 帮 助 你 查 找 隐 藏更 深 的 错 误 例 如 你 可 能 会 发 现 数 据 库 有 微 妙 的 数 学 错 误 你 只有 在 打 印 数 据 库 内 容 时 才 会 看 到 它 如 果 只 是 在 屏 幕 上 看 数 据 库 内容 这 个 错 误 可 能 不 是 很 明 显 一 定 要 把 你 设 计 的 报 告 实 际 打 印 出 来才 能 看 到 它 们 在 显 示 数 据 库 的 内 容 方 面 同 样 非 常 有 效 虽 然 你 是 在 用C + + 设 计 应 用 程 序 但 是 了 解 DBMS 本 身 能 干 些 什 么 会 对 在 Visual C++ 环 境 内 设 计 更 好 的 报 告 有 所 帮 助
- 2 创 建 数 据 库
现 在 看 一 看 数 据 库 这 儿 的 数 据 库 不 会 是 你 曾 经 见 过 的 最 复 杂 的 数 据 库实 际 上 开 始 时 它 只 包 括 两 个 表 本 节 的 整 个 目 的 就 是 让 你 从 基 础 开 始 虽 然
我 们 要 为 这 个 示 例 使 用 A cce s s 你 当 然 也 可 以 把 学 到 的 基 础 知 识 应 用 到 其 它 数据 库 产 品 中 去
注 释 我 们 在 全 书 中 都 要 用 到 这 个 示 例 数 据 库 所 以 即 使 你 不 打 算 把 Access 用 作 你 的 DBMS 理 解 它 的 创 建 过 程 也 相 当 重 要 后 面 数 据 库 章 节 中 的所 有 示 例 代 码 都 是 以 这 个 示 例 表 为 基 础 的 你 看 到 的 演 示 原 则 上 同 样适 用 于 其 它 DBMS 请 记 住 Visual C++ 使 用 ODBC 和 DAO 两 种 类 它们 都 不 依 赖 于 特 定 的 数 据 库 实 现
你 需 要 完 成 的 第 一 件 工 作 是 创 建 一 个 新 的 数 据 库 下 面 的 过 程 帮 助 你 从 头开 始 所 有 的 示 例 程 序 都 假 定 你 将 数 据 库 命 名 为 Sa m p le 并 把 它 存 储 在 DB _ S a m p 目 录 中 当 然 任 何 名 字 和 位 置 也 都 是 可 以 的
- 启
动 M icro s o f t A c ces s 你 会 看 到 如 下 图 所 示 的 M icro s o f t A c ces s 对 话 框它 询 问 你 想 要 做 些 什 么
-
选
择 B la n k D a ta b a s e 空 白 数 据 库 选 项 然 后 单 击 OK 会 看 到 F ile N e w D a ta b a s e 文 件 新 数 据 库 对 话 框 它 看 起 来 与 F ile Sa v e 文 件 保 存 对 话 框十 分 相 似
-
输
入 数 据 库 名 本 示 例 使 用 Sa m p le 选 择 保 存 数 据 库 的 目 录 本 示 例使 用 DB _ S a m p 然 后 单 击 C re a te 创 建 这 时 会 出 现 如 下 图 所 示 的 空 白D a ta b a s e 对 话 框
现 在 有 了 可 以 任 意 使 用 的 空 白 数 据 库 可 以 开 始 用 表 查 询 和 数 据 库 具 有的 其 它 部 件 来 填 充 这 个 数 据 库 了 下 面 的 章 节 会 说 明 如 何 创 建 本 书 中 示 例 程序 所 需 的 元 素 当 然 你 也 可 以 根 据 需 要 添 加 任 意 多 的 数 据 库 元 素 为 进 行 实验 而 建 立 一 个 示 例 数 据 库 是 个 不 错 的 想 法
注 释 下 面 章 节 中 的 所 有 过 程 都 假 定 你 打 开 了 示 例 数 据 库 并 准 备 使 用 如 果 在 前 面 的 步 骤 中 都 遵 守 了 示 例 的 约 定 应 该 会 看 到 Sample: Database 对 话 框
- 3 添 加 表
在 示 例 数 据 库 中 我 们 需 要 使 用 两 个 表 第 一 个 表 Fo o d s 食 品 包 含 一 系
列 食 品 库 存 项 第 二 个 表 O rd e r
食 品 表 开 始
订 货 包 含 食 品 项 的 订 货 信 息 我 们 从 创 建 Fo o d s
-
选
择 S a m p le : D a ta b a s e 示 例 数 据 库 对 话 框 的 Ta b le s 表 选 项 卡
-
单
击 N e w 新 建 会 看 到 如 下 图 所 示 的 N e w T a b le 新 建 表 对 话 框
- 加 亮 D e s ig n V ie w 设 计 视 图
选 项 然 后 单 击 OK 会 看 到 如 图 5 .5 所示 的 Ta b le 表 设 计 对 话 框
图 5 .5 T a ble 表 设 计 对 话框让 你创 建示 例数据 库所 需的表
我 们 花 几 分 钟 讨 论 一 下 Ta b le 表 设 计 对 话 框 在 这 个 表 中 有 三 列 第 一
列 F ie ld N a m e 字 段 名 包 含 字 段 的 名 称 在 这 里 需 要 填 入 的 只 是 描 述 这 个 字段 将 保 持 信 息 类 型 的 名 称 虽 然 A cce s s 允 许 在 字 段 名 中 使 用 空 格 但 要 避 免 这样 去 做 以 便 V is u a l C + + 能 够 更 加 容 易 地 访 问 该 字 段 在 字 段 名 中 单 词 间 添 加空 格 的 最 佳 方 式 是 使 用 像 这 样 的 下 划 线 F ie ld _ N a m e 还 要 放 弃 使 用 任 何 非字 母 数 字 字 符 如 磅 符 号 (# ) 或 和 符 号 (& )— — 使 用 这 些 字 符 肯 定 会 导 致 C+ + 程序 发 生 故 障
第 二 列 D a ta T y p e 数 据 类 型 定 义 字 段 将 要 保 存 数 据 的 数 据 类 型 A cce s s
定 义 了 大 量 的 数 据 类 型 各 数 据 类 型 如 下 所 示
注 释 下 列 数 据 类 型 反 映 了 Office 97 版 的 Access 中 所 有 的 数 据 类 型 你会 发 现 较 早 版 的 Access 提 供 的 可 供 选 择 的 数 据 类 型 要 少 一 些 我们 不 会 在 示 例 数 据 库 中 使 用 任 何 更 新 的 数 据 类 型 所 以 较 早 版 的Access 应 该 可 以 良 好 地 运 行
-
Te
x t 文 本 包 含 255 个 或 更 少 字 符 的 短 字 符 串
-
M
e m o 备 忘 录 用 于 存 储 注 释 或 其 它 大 段 文 本 的 长 字 符 串
-
N
u m b e r 数 字 任 何 数 值 值 包 括 B y te 字 节 In te g e r 整 数
L ong In te ge r 长 整 数 S in g le 单 精 度 实 数 D oub le 双 精 度 实 数 和 R e p lic a tion ID 复 制 ID
注 释 C++ 程 序 员 会 通 过 术 语 GUID 全 局 唯 一 标 识 了 解 Replicatio n ID 复 制 I D 在 C++中 Replicatio n ID 用 于 识 别 Access 对 象
-
D
a te / T im e 日 期 / 时 间 A cce s s 中 几 种 日 期 和 / 或 时 间 格 式 中 的 一 种
-
C
u rre n c y 货 币 用 来 存 储 货 币 值 的 特 殊 数 字 格 式
-
A
u to N u m b e r A c c e s s 可 以 提 供 一 个 计 数 器 作 为 表 的 主 键 主 键 确 保 每一 个 记 录 都 有 唯 一 的 可 以 用 来 访 问 它 的 值 所 以 创 建 主 键 是 必 要 的
-
Y
e s / No C + + 程 序 员 会 把 它 作 为 B oo le a n 布 尔 值 来 识 别 可 以 把 它格 式 化 为 A cce s s 中 的 Y e s / No O n / O f f 或 T ru e / F a ls e 但 是 格 式 化 该 值的 能 力 并 不 影 响 它 仍 是 一 个 B oo le a n 布 尔 值 这 一 事 实
-
O
LEO b je c t OL E 对 象 一 种 由 主 机 支 持 的 OL E 对 象
-
H
y p e rlin k 超 链 接 这 种 数 据 类 型 最 近 才 被 添 加 到 A cce s s 中 它 允许 你 存 储 去 往 网 络 资 源 的 UNC 统 一 命 名 协 定 路 径 或 去 往 In te rn e t 资源 的 UR L 统 一 资 源 定 位 器 A cce s s 甚 至 支 持 在 W e b 网 页 上 使 用 锚地 关 于 UR L 和 锚 地 的 详 尽 讨 论 请 参 见 第 8 章
-
L ookup W iz a rd 查 找 向 导 在 有 些 情 况 下 你 想 让 用 户 从 特 定 的 选择 列 表 中 选 择 而 不 是 把 值 输 入 到 表 中 L ookup W iz a rd 查 找 向 导 允许 你 创 建 对 数 据 库 中 另 一 个 表 的 引 用 用 来 填 充 这 个 字 段 用 户 会 在 屏幕 上 看 到 一 个 列 表 框 或 组 合 框 可 以 在 第 二 个 表 的 预 定 义 选 择 列 表 中 选择
Ta b le 表 设 计 对 话 框 的 第 三 列 D e s c r ip t io n 描 述 允 许 你 向 表 中 添 加注 释 以 便 说 明 字 段 的 作 用 当 数 据 库 变 得 很 大 时 你 就 会 发 现 以 文 档 化 方 式说 明 数 据 库 每 个 表 中 各 个 项 的 准 确 目 的 是 极 为 必 要 的 有 时 候 你 会 发 现 起 初设 计 数 据 库 时 合 理 的 字 段 不 再 需 要 了 你 会 发 现 如 果 没 有 正 确 的 文 档 要 定位 这 些 消 耗 额 外 空 间 的 字 段 就 困 难 多 了
在 Ta b le 表 设 计 对 话 框 的 左 下 角 你 会 看 到 一 个 被 称 为 F ield P ro p erties
字 段 属 性 的 带 选 项 卡 的 对 话 框 在 这 里 输 入 表 的 A cce s s 专 用 格 式 化 信 息在 很 多 情 况 下 会 看 到 极 小 化 了 的 C a p tio n 标 题 属 性 C a p tio n 标 题 属 性定 义 了 A cce s s 如 何 在 窗 体 和 报 告 中 说 明 相 应 的 字 段 你 还 会 发 现 设 置 标 题 使设 计 应 用 程 序 变 得 稍 微 容 易 了 一 些 因 为 它 促 使 你 在 设 计 工 程 的 时 候 就 考 虑 了用 户 界 面 问 题
就 在 Ta b le 表 设 计 对 象 中 F ield P ro p erties 字 段 属 性 的 右 边 有 一 个凹 下 的 方 框 这 个 框 通 常 包 含 了 有 用 的 提 示 信 息 例 如 如 果 单 击 F ie ld N a m e
字 段 名 列 这 个 框 会 告 诉 你 包 括 空 格 在 内 字 段 名 最 多 可 以 有 64 个 字 符 长现 在 我 们 已 经 熟 悉 了 Ta b le 表 设 计 对 话 框 的 工 作 方 式 那 就 来 创 建 两 个
表 把 下 图 是 F oods 食 品 表 中 包 含 的 字 段 简 单 地 输 入 图 中 所 示 的 各 项图 中 还 显 示 了 应 该 使 用 哪 一 个 数 据 类 型
表 5 .1 包 含 了 需 要 为 每 一 个 字 段 输 入 的 属 性 值
在 完 成 这 张 表 之 前 我 们 还 要 做 上 两 件 事 要 做 的 第 一 件 事 是 定 义 主 键我 们 要 用 F ood_ID 字 段 来 建 立 F oods 食 品 表 和 O rd e rs 订 货 表 的 关 系所 以 把 它 作 为 我 们 的 主 键 采 用 下 面 的 过 程 定 义 表 的 主 键
表 5. 1 Fo od s 表的属性 值
字段 |
属性 名 |
值 |
---|---|---|
F o od- ID |
F ie ld S iz e |
13 |
Inpu t M a s k |
A A A \- 0000 0\- C C C ;;_ |
|
Ca p t io n |
食品 标识 符 |
|
D e fa u lt V a lu e |
" V E G - 0000 1 - S P L " |
|
R e qu ire d |
Y e s 不复 制 |
|
A l lo w Ze ro Le n g th |
N o |
|
Inde x e d |
Y e s 不复 制 |
|
N a m e |
F ield S ize |
5 0 |
Ca p t io n |
食品 名称 |
|
D e fa u lt V a lu e |
" 卷心 菜 " |
|
R e qu ire d |
Y e s |
|
A l lo w Ze ro Le n g th |
N o |
|
Inde x e d |
Y e s 不复 制 |
|
Pe r is h a b le |
C a p t io n |
易腐 坏吗 ? |
D e fa u lt V a lu e |
T ru e |
|
V a lid a tio n T e x t |
必须 输入 Y e s 或 No |
|
R e qu ire d |
Y e s |
|
Inde x e d |
Y e s 复制 完成 |
|
S to rage_ L i fe |
C a p t io n |
保存 期限 |
续 表
D e fa u lt V a lu e |
7 |
|
---|---|---|
V a lid a tio n R u le |
> 0 |
|
V a lid a tio n T e x t |
值必 须大 于 0 |
|
R e qu ire d |
N o |
|
Inde x e d |
N o |
- 单
击 F ood_ID 字 段 左 边 的 方 框 整 个 字 段 被 加 亮 如 下 图 所 示
- 用
Ed it |P r im a r y K e y 编 辑 |主 键 命 令 创 建 主 键 A cce s s 会 在 F ood_ID
字 段 的 左 侧 添 加 一 个 像 钥 匙 一 样 的 小 图 标
定 义 了 主 键 后 你 会 想 到 要 看 一 看 所 有 索 引 用 V ie w |Inde xe s 视 图 |索 引 命 令 或 单 击 工 具 条 上 的 Inde xe s 索 引 按 钮 显 示 Inde xe s 索 引 对 话 框 如上 图 所 示 请 注 意 A cce s s 允 许 定 义 单 个 字 段 或 一 组 字 段 的 索 引 但 不 能 用 计算 域 或 等 式 来 创 建 索 引 你 会 在 后 面 看 到 使 用 查 询 可 以 突 破 这 个 限 制
单 击 Inde xe s 索 引 对 话 框 上 的 C lo s e 关 闭 框 将 其 关 闭 现 在 保 存 我们 的 第 一 张 表 单 击 工 具 条 上 的 Sa v e 保 存 按 钮 A cce s s 显 示 一 个 对 话 框 要 求 输 入 表 名 输 入 F oods 然 后 单 击 OK 表 名 会 出 现 在 S a m p le :D a ta b a s e 对
话 框 中 单 击 C lo s e 关 闭 框 关 闭 Ta b le 表 设 计 对 话 框
我 们 用 相 同 的 过 程 创 建 第 二 张 表 在 此 情 况 下 表 名 是 O rd e rs 下 面 是 O rd e rs
表 所 需 的 全 部 字 段 项 图 中 还 包 含 了 每 个 字 段 的 数 据 类 型 请 注 意
P u rc ha s e _N u m be r 和 F ood_ID 字 段 都 被 用 作 主 键 P u rc ha s e _N u m be r 是 这 张 表 中取 唯 一 值 的 字 段 表 5 .2 包 含 了 完 整 的 需 要 为 这 张 表 定 义 的 属 性 值
你 应 该 注 意 到 表 5 .1 中 F ood_ ID 字 段 的 属 性 和 表 5 .2 中 相 同 项 的 属 性 存 在一 个 主 要 的 差 别 表 5 .1 在 F ood_ID 字 段 上 建 立 了 索 引 参 看 Inde xe d 属 性
并 且 不 允 许 有 重 复 值 原 因 在 于 对 数 据 库 中 的 每 一 个 食 品 来 说 我 们 只 想 要 一个 数 据 项 但 是 表 5 .2 中 的 Inde xe d 属 性 值 为 Y e s 这 就 是 说 我 们 在 这 里 可 以有 多 个 重 复 项 原 因 很 简 单 你 可 能 经 常 需 要 订 购 相 同 的 食 品 所 以 我 们 允 许
用 户 在 O rd e rs 表 中 使 用 相 同 食 品 的 多 个 重 复 项
我 们 再 检 查 一 下 Inde xe s 索 引 对 话 框 单 击 工 具 条 上 的 Inde xe s 索 引 按 钮 应 该 看 到 如 下 图 所 示 的 画 面 请 注 意 我 们 定 义 了 一 个 多 字 段 索 引(P rim a r y K e y ) 方 法 是 在 同 一 行 上 输 入 索 引 名 和 第 一 个 字 段 名 第 二 行 及 后 续行 只 包 含 一 个 字 段 名
像 前 面 一 样 关 闭 Inde xe s 对 话 框 然 后 保 存 新 建 的 表 表 名 一 定 要 是 O rd e rs
现 在 已 经 有 两 张 表 可 以 使 用 了 下 面 开 始 填 充 一 些 数 据 图 5 .6 显 示 了 F oods 表 的 数 据 图 5 .7 显 示 了 O rd e rs 表 的 数 据 如 果 你 喜 欢 的 话 可 以 再 添 加 一 些其 它 数 据 只 是 要 保 证 对 F oods 食 品 表 中 创 建 的 每 一 个 项 在 O rd e rs 订
货 表 中 都 要 有 一 个 或 多 个 对 应 的 项 同 样 地 要 保 证 不 把 任 何 在 F oods 食品 表 中 没 有 对 应 项 的 记 录 输 入 O rd e rs 表 中
表 5.2 Or de rs 表的属性 值
字段 |
属性 名 |
值 |
---|---|---|
P u rc ha s e _N u m be r |
F ie ld L e ng th |
长整 数 |
C a p tio n |
采购 编号 |
|
In d e x e d |
Y e s |
|
F o od_ ID |
F ie ld S iz e |
13 |
In p u t M a s k |
A A A \- 000 00\- C C C ; ;_ |
|
C a p tio n |
食品 标识 符 |
|
D e fa u lt V a lu e |
" V E G -0 0 0 0 1 -S P L " |
|
R e q u ire d |
Y e s |
|
A llo w Ze ro Le n g th |
N o |
|
In d e x e d |
Y e s |
|
P u rc h a s e |
F o rm a t |
中间 日期 格式 |
C a p tio n |
最近 一次 采购 的日期 |
|
D e fa u lt V a lu e |
N o w ( ) |
|
R e q u ire d |
Y e s |
|
In d e x e d |
Y e s |
|
Q u an t i ty |
F ield S ize |
长整 数 |
C a p tio n |
我们 买了 多少 |
续 表
D e fa u lt V a lu e |
1 |
|
---|---|---|
V a lida t io n R u le |
> 0 |
|
V a lida t io n T e x t |
必须 大于 0 |
|
R e q u ire d |
Y e s |
|
In d e x e d |
N o |
|
P ric e |
F o rm a t |
货币 格式 |
C a p tio n |
以美 元为 单位 的价格 |
|
D e fa u lt V a lu e |
0 |
|
V a lida t io n R u le |
> 0 |
|
V a lida t io n T e x t |
必须 大于 0 |
|
R e q u ire d |
Y e s |
|
In d e x e d |
N o |
图 5 .6 对 F o ods 食品 表中 的每一 个项 一 定要在 O rd e rs 订货 表中 也有一 个对 应项
图 5 .7 不要 在 O rd e r s 订货 表中 创建任 何在 F o ods 食品 表中 无匹配 F o od _ ID 的记 录
- 4 使 用 查 询 排 序 数 据
查 询 使 精 确 查 找 所 需 数 据 的 过 程 变 得 令 人 难 以 置 信 的 容 易 A cce s s 利 用 可视 查 询 界 面 使 创 建 查 询 的 过 程 变 得 更 加 容 易 下 面 我 们 来 看 一 看 为 刚 刚 在 上一 节 创 建 的 两 张 表 创 建 查 询 的 过 程
-
单
击 D a ta b a s e 数 据 库 对 话 框 的 Q u e r ie s 查 询 选 项 卡
-
单
击 N e w 新 建 会 看 到 如 下 图 所 示 的 N e w Q u e ry 新 查 询 对 话 框
- 选 择 D e s ig n V ie w 设 计 视 图
然 后 单 击 OK 你 会 看 到 如 下 图 所 示 的
S how T a b le 显 示 表 对 话 框
- 加
亮 这 两 个 表 F ood s 和 O rd e rs 然 后 单 击 A d d 添 加 单 击 C lo s e
关 闭 系 统 显 示 S how T a b le 显 示 表 对 话 框 并 且 你 会 看 到 如 下 图 所 示的 Se le c t Q u e r y 选 择 查 询 对 话 框 请 注 意 A c c e s s 自 动 创 建 两 个 表 之 间 的 逻辑 关 系 主 键 为 粗 体 字 体 现 在 我 们 要 决 定 在 查 询 中 显 示 哪 些 字 段
-
双
击 F oods 列 表 框 中 的 星 号 这 是 告 诉 A cce s s 查 询 中 想 使 用 这 个 表 的所 有 字 段
-
双
击 O rd e rs 表 中 的 F ood s _ ID Pu rc h a s e Q u a n tity 和 P ric e 字 段 这 是 告诉 A cce s s 查 询 中 我 们 只 想 使 用 这 个 表 中 的 三 个 字 段 不 需 要 选 择P u rc ha s e _N u m be r 字 段 因 为 A c ces s 会 自 动 更 新 它 那 么 为 什 么 我 们 需 要 两个 F ood_ID 字 段 呢 我 们 要 用 这 个 字 段 来 建 立 两 个 表 之 间 的 关 系 所 以 这 样 做是 很 重 要 的 否 则 就 不 能 向 O rd e rs 表 中 添 加 记 录 现 在 我 们 要 决 定 查 询 的显 示 顺 序
-
双
击 F oods 表 中 的 F ood _ID 字 段 在 对 话 框 的 下 半 区 中 去 掉 Sh o w 显示 属 性 行 中 该 字 段 对 应 的 复 选 标 记 我 们 不 想 把 这 个 字 段 显 示 两 次
-
在
F ood_ID 字 段 的 So r t 排 序 属 性 中 选 择 A s c e nd in g 升 序 这 是 告诉 A cce s s 我 们 想 如 何 排 序 信 息 光 用 F ood_ID 字 段 排 序 还 不 够 因 为 我 们 在O rd e rs 订 货 表 中 有 这 个 字 段 的 多 个 拷 贝
-
双
击 O rd e rs 表 中 的 P u rc ha s e _N um be r 并 去 掉 S how 显 示 属 性 的 复 选标 记 在 So r t 排 序 属 性 中 选 择 D e s c e nd ing 降 序 现 在 我 们 有 了 一 种以 特 别 的 顺 序 来 显 示 O rd e rs 表 中 所 有 项 的 方 式 在 本 例 的 情 况 下 首 先 以 最 近一 次 订 货 的 升 序 方 式 来 显 示 食 品 此 时 S e le ct Q u er y 选 择 查 询 对 话 框 如 下图 所 示
可 以 测 试 一 下 所 创 建 的 查 询 以 确 定 它 们 是 否 按 预 期 方 式 运 行 此 时 完成 测 试 的 一 种 最 容 易 的 方 式 是 单 击 工 具 条 上 的 Ru n 运 行 按 钮 你 应 该 看到 如 下 图 所 示 的 画 面
请 注 意 这 次 查 询 中 显 示 了 O rd e rs 表 的 全 部 六 个 数 据 项 并 且 只 有 我 们 已选 择 的 字 段 被 显 示 出 来 正 如 我 们 所 要 求 的 那 样 所 有 的 食 品 标 识 符 都 以 字 母数 字 排 序 另 外 每 项 的 最 新 定 单 显 示 在 前 面 而 不 是 后 面
现 在 保 存 查 询 |
单 击 Sa v e |
保 存 |
按 钮 |
然 后 在 Sa v e |
A s 另 |
存 为 对 话 框 |
---|---|---|---|---|---|---|
中 输 入 F oodO rd e rs |
单 击 OK |
完 成 这 个 |
过 程 |
单 击 C lo s e |
关 闭 |
按 钮 关 闭 这 个 |
查 询 |
5. 5 创 建 测 试 窗 体
对 V is u a l C + + 程 序 员 来 说 在 DB M S 内 创 建 窗 体 有 两 个 重 要 的 原 因 第 一可 以 在 产 品 类 型 的 环 境 中 再 测 试 一 次 查 询 这 个 环 境 和 你 在 V is u a l C + + 下 测 试的 环 境 是 一 样 的 第 二 测 试 窗 体 允 许 你 不 必 创 建 特 殊 的 应 用 程 序 即 能 查 看 数
据 无 论 是 程 序 代 码 已 创 建 的 查 询 数 据 本 身 或 者 DB M S 的 故 障 导 致 了 V is u a l C+ + 程 序 出 现 错 误 你 都 可 以 很 方 便 地 把 错 误 找 出 来
要 让 窗 体 完 成 查 询 任 务 无 须 把 它 做 得 过 于 复 杂 真 正 需 要 显 示 的 字 段 是想 在 用 户 应 用 程 序 中 看 到 的 哪 些 字 段 记 住 了 这 一 点 后 我 们 用 下 面 的 过 程 为示 例 数 据 库 创 建 一 个 测 试 窗 体
1. 单 击 D a ta b a s e 数 据 库 对 话 框 的 Fo rm s 窗 体 选 项 卡
2. 单 击 |
N e w |
新 建 |
会 看 到 如 下 图 所 示 的 N e w F o rm |
新 窗 体 |
对 话 框 |
---|---|---|---|---|---|
3. 加 亮 |
Fo rm |
W iz a rd |
窗 体 向 导 在 下 拉 列 表 框 中 选 择 |
F o od O r |
de rs 查 询 |
然 后 单 击 OK 会 看 到 如 下 图 所 示 的 Fo rm W iz a rd 窗 体 向 导 对 话 框 仔 细 看一 看 字 段 列 表 验 证 一 下 Fo rm W iz a rd 窗 体 向 导 是 否 从 查 询 中 挑 选 了 你 所 期
望 的 全 部 字 段 这 一 点 也 很 重 要
-
加
亮 O rde rs . F ood_ ID 字 段 然 后 单 击 右 箭 头 按 钮 (> ) 会 看 到 该 字 段 被 添加 到 S e le cted F ie ld s 已 选 定 字 段 列 表 中
-
单
击 双 箭 头 按 钮 (> > ) 把 剩 下 的 字 段 添 加 到 Se le c te d F ie ld s 已 选 定 的 字段 列 表 中 由 于 我 们 并 不 需 要 F oods .F ood _ID 字 段 所 以 加 亮 该 字 段 然 后选 择 左 箭 头 按 钮 (< ) 把 它 从 Se le c te d F ie ld s 已 选 定 字 段 列 表 中 删 除
-
由
于 我 们 对 窗 体 的 美 学 特 性 还 不 感 兴 趣 所 以 单 击 F in is h 完 成 你会 看 到 数 据 的 单 记 录 视 图 如 下 图 所 示 你 应 该 再 次 看 一 看 字 段 列 表 确 认 所
需 字 段 都 已 经 出 现 在 窗 体 上 应 该 做 的 第 二 件 事 是 验 证 所 选 字 段 的 标 题 都 正确 无 误 最 后 验 证 屏 幕 上 显 示 的 数 据 是 否 正 确
现 在 我 们 已 经 有 了 测 试 窗 体 你 也 可 以 试 着 用 窗 体 添 加 新 记 录 删 除 记 录和 查 找 特 定 的 信 息 等 等 在 V is u a l C + + 应 用 程 序 使 用 数 据 库 之 前 在 实 际 窗体 上 进 行 上 述 类 型 的 测 试 可 以 帮 助 你 验 证 是 否 一 切 以 正 常 的 方 式 运 行