Guru Hints

### 外部鍵(FK)以及它的索引

外 部 鍵 被 用 來 使 用 邏 輯 方 式 關 聯 兩 個 資 料 表， 施 加 給 它 們 限 制 資 料 變 化。

這 一 切 開 始 於 主 資 料 表 ， 它 作 為 被 參 照 表， 需 要 有 一 個 主 鍵 （當 然， 實 際 上 被 參 照 列 只 要 非 空 並 且 有 唯 一 索 引 也 是 可 以 的， 但 是 使 用 主 鍵 仍 然 是 較 好 的 方 式）。 從 表 依 賴 於 主 表， 更 新 和 插 入 時 擁 有 外 部 鍵 的 欄 位 資 料 必 須 符 合 主 表 的 資 料 ， 從 表 是 外 部 鍵 的 參 照 表 。

外 部 鍵 不 僅 限 制 參 照 表 ， 也 限 制 被 參 照 表 ， 限 制 方 式 可 以 是 RESTRICT、 CASCADE 或 SET NULL 。 這 意 味 著， 當 被 參 照 表 資 料 發 生 變 化 （更 新 或 刪 除） 時， 所 有 的 參 照 表 都 會 檢 查 資 料 是 否 合 理 ， 以 及 是 否 需 要 其 他 附 加 操 作。 查 閱 PostgreSQL 關 於 外 鍵 的 文 檔 可 以 找 到 更 多 細 節 。

被 參 照 表 的 特 定 行 資 料 發 生 變 化 時 ， 所 有 相 關 的 參 照 表 都 會 使 用 外 鍵 字 段 作 為 條 件 執 行 相 應 的 讀 操 作 。 因 此 ， 所 有 提 高 讀 取 效 率 的 設 計 原 則 也 適 用 於 參 照 表 字 段 。 為 了 有 良 好 的 執 行 效 率， 大 多 數 情 況 下 建 立 索 引 是 明 智 的 選 擇 。 PostgreSQL 並 沒 有 強 迫 這 樣 做， 需 要 資 料 庫 設 計 人 員 來 提 供 合 理 的 索 引 。

為 了 方 便 ， pgAdmin III 在 創 建 外 部 鍵 時 提 供 一 個 簡 便 的 checkbox ， 自 動 檢 查 是 否 有 合 理 的 索 引 存 在 ， 如 果 沒 有 則 建 立 一 個 。 如 同 所 有 其 它 索 引 一 樣 ， 有 極 少 數 的 情 況 反 而 降 低 總 體 執 行 效 率 ， 總 得 來 說 ， 索 引 太 少 比 索 引 太 多 對 性 能 的 影 響 更 大 。