外键以及它的索引

外 键 被 用 来 使 用 逻 辑 方 式 关 联 两 个 数 据 表, 施 加 给 它 们 限 制 数 据 变 化。

这 一 切 开 始 于 主 数 据 表, 它 作 为 被 参 考 表, 需 要 有 一 个 主 键 (当 然, 实 际 上 被 参 考 列 只 要 非 空 并 且 有 唯 一 索 引 也 是 可 以 的, 但 是 使 用 主 键 仍 然 是 较 好 的 方 式)。 从 表 依 赖 于 主 表, 更 新 和 插 入 时 拥 有 外 键 的 字 段 数 据 必 须 符 合 主 表 的 数 据, 从 表 是 外 键 的 参 考 表。

外 键 不 仅 限 制 参 考 表, 也 限 制 被 参 考 表, 限 制 方 式 可 以 是 RESTRICT、 CASCADE 或 SET NULL。 这 意 味 着, 当 被 参 考 表 数 据 发 生 变 化 (更 新 或 删 除) 时, 所 有 的 参 考 表 都 会 检 查 数 据 是 否 合 理, 以 及 是 否 需 要 其 他 附 加 操 作。 查 阅 PostgreSQL 关 于 外 键 的 文 档 可 以 找 到 更 多 细 节。

被 参 考 表 的 特 定 行 数 据 发 生 变 化 时, 所 有 相 关 的 参 考 表 都 会 使 用 外 键 字 段 作 为 条 件 执 行 相 应 的 读 操 作。 因 此, 所有 提 高 读 取 效 率 的 设 计 原 则 也 适 用 于 参 考 表 字 段。 为 了 有 良 好 的 执 行 效 率, 大 多 数 情 况 下 建 立 索 引 是 明 智 的 选 择。 PostgreSQL 并 没 有 强 迫 这 样 做, 需 要 数 据 库 设 计 人 员 来 提 供 合 理 的 索 引。

为 了 方 便, pgAdmin III 在 创 建 外 键 时 提 供 一 个 简 便 的 checkbox, 自 动 检 查 是 否 有 合 理 的 索 引 存 在, 如 果 没 有 则 建 立 一 个。 如 同 所 有 其 它 索 引 一 样, 有 极 少 数 的 情 况 反 而 降 低 总 体 执 行 效 率, 总 得 来 说, 索 引 太 少 比 索 引 太 多 对 性 能 的 影 响 更 大。