7 7 世界 Eric Redmond and Jim R. Wilson 角征典 P1.0P2.0P3.0, 2013 年 2 月 25 日 2013 年 6 月 10 日 2014 年 3 月 5 日 Build date: 2014 年 2 月 13 日 (m-sl b-n bc-n) Original English language title: Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement by Eric Redmond and Jim R. Wilson Published by The Pragmatic Programmers, LLC Copyright © 2012 The Pragmatic Programmers, LLC Japanese Translation Copyright © 2013 Ohmsha, Ltd. All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted, in any form, or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior consent of the publisher. 本書 発行 ,内容 誤 本書 内容 適用 結果生 , ,適用 版社 一切 責任 負 了承 . 本書 掲載 限 会社名・製品名 一般 各社 登録商標 注意 結果 払 商標 , ,著者,出 . 本書 , 「著作権法」 ,著作権等 権利 保護 著作物 .本書 複 製権・翻訳権・上映権・譲渡権・公衆送信権(送信可能化権 含 ) 著作権者 保有 .本書 全部 一部 ,無断 転載,複写複製,電子的装置 入力等 ,著作権等 侵害 場合 , 注意 . 本書 無断複写 ,著作権法上 制限事項 除 ,禁 .本書 複写複製 希望 場合 , 事前 下記 連絡 許諾 得 . 社開発部「<書名 明記>」係宛,E-mail ([email protected]) • 書状,FAX(03-3293-2825) 『7 流 方 世界』読者 声 7 完 。金曜日 確認 。日曜日 新 新 起動 達人 手 出 驚 、 技 同 。土曜日 身 日常的 。次 楽 週 使 、 。 ä Ian Dees Using JRuby 共著者 本書 、重要 素晴 選択肢 連続 感 概要 提供 広 、本書 。 。 読 魅力 7回 。 ä Sean Copenhaver 准将 backgroundchecks.com 本書 、現代 最高 読 使 ・ 理由 、記憶 教 。 残 充実 概要 記事・ 。私 違 、 使 。読 教 本当 楽 。 ä Loren Sands-Ramshaw 米国国防総省 私 見 、CouchDB 最高 入門書 。 ä Jan Lehnardt Apache CouchDB 作者兼開発者 『7 素晴 7 入門書 人 世界』 、現代 。1 日 1 章 何 発見 設計 読 、理解 、初心者 実装 関 達人 深 。 ä Jerry Sievert 本書 表紙 広 、 「 生 知 」 7 世界』 売 ä Dr Nic Williams Engine Yard 技術担当役員 。 iii 大 知 書 。正直、『7 本書 寄 *1 登 雪 覆 州 、新雪 思 、 態 。 手入 。新雪 見当 、全体的 1994 年 似 抱 、 、新 指向 来 飽 。我々 、新雪 強 変化 道 世界 埋 新雪 待 望 待 望 覆 多様性 覆 体験 。 手 尽 。 全文検索 必要 触 。開発 使 展 立場 。我々 存在 。 一緒 最高 単純 思 、 安定 。『7 最 進 *1[訳注] 場 学 。列指向 近 HBase 研 人間 、 世界』 7 、 適 。IBM 従事 開発 支 Redis 面 構築 高速 発 、 部分 、横断的 切 取 安定 。 美 Riak 、 体験 名前。 v 、 。 柔軟性 10 年間 素晴 持 。 、 1 年間 顧客 備 RDBMS 入 、 究所 。絶好 、 指向 独占的 。 品質 。 。 、驚 、 同 尽 一面 新雪 。 。何十年 、 。我々 1 年間 、 私 、 、一面 。最初 次第 。私 様子 画面 時代 検索 。 。 相変 使 思 。 、緑 、 時 時代 完全 見 、 優勢 10 年 MySQL 筆頭 芽生 落胆 状 、 。 後 IBM、 拡大 私 大学 、次 。 同 。 開発研究所 学 10 年 続 上 物足 。 指向 Oracle 、山 IBM 感覚 代 。 。 指向 本書 寄 vi 、深 取 上 高速 探索 Neo4j 可能 MongoDB 。 、 扱 。 優 管理者 使 者 、 。Eric Redmond 、 必要 見識 一歩進 身 賢 開発 、 。 、 Jim Wilson 、現代 。各 制限 、 向 原動力 楽 優雅 何 、 業界 向 見抜 。 。 2012 年 5 月 『7 言語 7 世界』著者 Bruce Tate 州 謝辞 本書 著者 2 人 必要 力 。彼 貴重 見解 書 上 、超人的 目 提供 。多 可能 感謝 Ian Dees Robert Stam Daniel Bretoi Loren Sands-Ramshaw 無謀 最後 。 機会 。編集者 、今 本書 。 学 熱意 。 、決 外 。 。君 特別 書 。 。 感謝 。 。 作者 、 本書 書 。 力持 感謝 貢献 。 、 Jim : 家族 感謝。Ruthy 辛抱 励 Jimmy 子 2 人。 君 、IRC・掲示板・ ・ 、 Jackie Carter 。 。読者 得 、仕事 下 、 遂 人 :Noelle 本 。 、Frederic Dumont、Matthew Flower、Rebecca Skinner 許 Eric Jan Lenhardt Dave Purrington Sean Copenhaver Andreas Kollegger 感謝 、読者 名前 、 (順不同) 。 感謝 。 、我々 。技術的 根気強 言 忘 感謝 協力 。 尽力 大事 見 Mark Phillips Oleg Bartunov Matt Adams Emil Eifrem Bruce Tate 経験 助言 感謝 Pragmatic Bookshelf 心 本書 出版 誤 頭脳 。 時間 経験 提供 感謝 限 優秀 不可欠 。 。 vii 心 温 愛 質問 答 。Emma 。 、縁 活動 次 石油 、製油所 言 。 、 。 、 取 、近代的 。目的 。 理解 使 油田 。 出 道具 。世界観 、 達成 保存 設備 使 手段 。 。 背景 、増大 潜在的 力 自由 。 7 本 NoSQL 書 思 言葉 大 2010 年 3 月 、多 混乱 見 人 。NoSQL ? 何 開発 答 、我々 Bruce Tate 『7 素晴 思 言語 7 使 方 含 与 世界』[Tat10] 言語 同 ? 疑問 読 、 紹介方法 対 、NoSQL 思 本 書 方 感動 教 対応 本書 、NoSQL 、 。 。 、 。 ? 影響 探 。当時 使 。 難 疑問 。 内容 本書 対象者 、現代 展望 開発者 。 経験 簡単 説明 5 不要 理解 考 、 、7 役 立 章 分野 選 」 (p. 1) 説明 経験豊 。 説明 。 。 、第 1 章「 。 順番 、PostgreSQL・Riak・ Apache HBase・MongoDB・Apache CouchDB・Neo4j・Redis 取 上 。 週末 取 組 、各章 3 日 分 構成 。1 日 終 、紹介 考 方 掘 下 点 、 日 概念 悪 理解 用意 、実際 時間 自分 腕 章 前 説明 速度 自分 進 、 決 構 。 。 使 本当 必要 。 、 。 飛 章 。章 終 。読 先 特徴 意味 理解 演習 用意 点 、頭 詳 mapreduce 。本書 目的 説明 、現代 ix 順番 読 、 。 章 簡単 領域 確実 、 理解 x 。 本書 、頭 読 。 含 本書 読 前 、本書 本書 含 知 。 紹介 、簡単 、非常 面倒 、少々難 。 場合 、 場合 提供 、最終的 省略 分 、役 。我々 自分 随所 。 立 概念 必要 説明 紙面 手順 割 。本当 ? 管理 管理 載 本書 設定 載 。日々 運用 関 特性 、基本的 詳 変 本書 触 。 。紙面 、*nix 。本書 限 。 詳細 ! 動 取 、 限 、(主 対象 開発 。 動 。 、 偏見 Windows 。 検討 我々 形式 。 、Cygwin*2 動 選択肢 上 反映 *nix 対象 環境 改善 )*nix Linux 設定 補足 。Microsoft 、現状 。 、役 立 概念 集中的 伝 、設定 Windows 本書 触 、 動 、仮想 。 規約 本書 、 取 JavaScript 好 言語 上 使 、作業 言語 紹介 *2 http://www.cygwin.com/ 含 仕方 、 。複数 Ruby/JRuby 。 PL/pgSQL(Postgres) Gremlin/Groovy(Neo4j) 。 、Node.js 使 xi 書 JavaScript 注意書 分 除 好 語 実行 方 取 上 、 。 完全 本書 。 、 。 *3 Pragmatic Bookshelf 素晴 情報源 。本書 掲載 。 、本書 能 。自 、言 従 頭 $ 掲載 。 将来 誤植 対 提案 指摘 可 。 読者 思 。 一緒 出発 、現代 眺 旅 楽 。 Eric Redmond、Jim R. Wilson *3 http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks 目次 本書 寄 v 謝辞 vii ix 第1章 1.1 1.2 1.3 第2章 2.1 2.2 2.3 2.4 2.5 第3章 3.1 3.2 3.3 3.4 3.5 第4章 4.1 4.2 4.3 4.4 4.5 第5章 5.1 5.2 5.3 5.4 1 最初 質問 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 今後 行方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 6 PostgreSQL 9 分類 . . . . . . . . . . . . . . . . . . . . . . . . . Post-greS-Q-L . . . . . . . . . . . . . 1 日目: ・CRUD・結合 2 日目:応用的 ・ ・ 3 日目:全文検索 多次元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Riak 好 . . . . . . . . . . . . 1 日目:CRUD・ ・MIME . . . 2 日目:mapreduce . . . 3 日目: 解消 Riak 拡張 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 . 90 . 100 . 115 . 124 Riak 9 10 21 34 47 49 HBase 49 50 59 76 86 89 HBase 入門 . . . . . . . . . . . . . 1 日目:CRUD 管理 . . 2 日目: 扱 . . . . 3 日目: 持 行 . . . . . . . . . . . . . . . . . . . MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . 127 Mongo . . . . . . . . . . . . . . . . . . . . . . . . . 127 1 日目:CRUD . . . . . . . . . . . . . . . . . . . . . . 129 2 日目: ・集約・mapreduce . . . . . . . . . . . . . 142 3 日目: ・ ・地理空間情報・GridFS154 xiii xiv 目次 5.5 第6章 6.1 6.2 6.3 6.4 6.5 第7章 7.1 7.2 7.3 7.4 7.5 第8章 8.1 8.2 8.3 8.4 8.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 CouchDB 165 . . . . . . . . . . . . 1 日目:CRUD・Futon・cURL Redux . . 2 日目:問 合 作成 . . . . 3 日目:応用的 ・Changes API・ . . . . . . . . . . . . . . . . . . . Neo4j B.1 B.2 B.3 付録 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Redis 203 204 220 231 238 241 構造 . . . 1 日目:CRUD 型 . . . 2 日目:応用的 利用 分散 . . 3 日目:他 戯 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 242 254 268 280 283 分類 . . . . . . . . . . . . . . . . . . . . 283 選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 付録 A 付録 B 165 166 173 185 201 203 Neo4j . 1 日目: ・Groovy・CRUD . . . 2 日目:REST・ ・ 3 日目:分散型高可用性 . . . . . . . . . . . . . . . . . . . . . . . . . . 第9章 9.1 9.2 9.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 概要表 289 CAP 定理 293 結果整合性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 現実世界 CAP 定理 . . . . . . . . . . . . . . . . . . . . . . . . 295 . . . . . . . . . . . . . . . . . . . . 295 参考文献 297 訳者 299 索引 301 著者・訳者 312 第1章 我々 世界 関係 、事実上 転換点 立 。 。近 消 世界 RDBMS 思 、代替 、 選択肢 新 可用性・水平 、本書 登場 。 。 選択肢 。 世界 学 続 ・高 備 巡 。本書 機能 「整合性」対「結果整合性」 、混迷 者 構成 持 方法 発見 手法 大部分 7 各 。 規模 将来 構造・簡潔 ・新 呼 NoSQL 問題 選択肢 読 進 、 (「永続性」対「速度」 ) 特定 最適 選択肢 見 。 1.1 最初 質問 本書『7 世界』 7 、 組 ?」 質問 合 、 幸 、適切 7 、選択肢 理解 世界 。 連 部分 指摘 。 、答 種類 • 必要 方 部分 見 。 。腕 CRUD 見 。 ? 筋 ・ 指向・ 分野 (本書 取 上 分類 分野 。具体的 、 (Postgres) 、 2 1 (HBase)、 CouchDB)、 原動力 ? 決 1 机上 設計 柔軟性 、膨大 重要 、 、実際 、 生 存在 柔軟性 。一方、列指向 複数台 保存 1 最適 1 Redis)、列指向 2 (MongoDB (Neo4j)取 上 空論 。RDBMS 世界 (Riak 指向 。 )、 。 学 出 。 、 ・列指向・ 有名 問題 最適 選 。 答 、 、 「 問題解決 。与 質問 • 核 作 。 問題 解 第1章 2 、 二 使 場面 実例 。 見 各 。 取 • 次 ? 接続方法 。 、 手 。 使 Ruby JavaScript Gremlin(Neo4j) REST(CouchDB 議論 速 検索 。低 合 例 紹介 。 、 他 ? 問 可能 強制 変更 制限 書 大 計画 込 、複数 読 異 取 。任意 提供 必要 高 。 強固 ? 単 両方 実装 使 。 、事前 由 、 。 、 可能 、主 話 、 合 場合 、PL/pgSQL(Postgres) 使 Riak) Thrift(HBase) 、Node.js JavaScript 組 点 。 言語 。最終章 • 必要 自 ? 理解 、自分 仕事 能力 最適 選択 。 動 • ? 動 ? ? ? ? 使 ?似 一緒 読 取 均等 保存 ?書 分散 ? 込 ? 別 操作? 自分 ? ? • 関係 。何 文脈 話 背景 提供 明 意味 。本書 。 。 我々 目的 、水平 、 質問 、意図的 説 (MongoDB・HBase・ (Postgres・Neo4j・Redis) 初心者 達人 一冊 、各 。 必要 中間 。 、 終 文脈 方法 Riak) 伝統的 垂直 存在 、 、 長所 本 違 。 必要 確実 。本書 理解 読 分類 1.2 分類 1.2 音楽 同様 、 歌 共通 曲 3 複数 分類 、用途 短調」 熱唱 。同様 使 方 異 、 適 、 「 状況 ?」 分野 5 簡単 直面 問題 解決 。 大部分 、本書 取 重要 ・利用可能 。 適 。 人 、 。 思 管理 、行 (RDBMS) 列 取 2 次元 、構造化問 合 。重要 変形 。 。型 結合 、数学的 、集合論 言語(SQL) 使用 、既存 。 浮 実装 、数値型・文字列型・日付型・BLOB 型 強制 上 上 問題領域・使用 選択肢 経験 型 取 、 直感 。RDBMS 、各分野 。 、 、最適 ?」 。 見 見 。 化 。常 利用 利用 、 「 飛 、「 、 、 、 気 本節 。音階 。 、 複雑 関係理論(集合論) 。 、MySQL・H2・HSQLDB・ 数多 存在 SQLite 取 上 。本書 、第 2 章「PostgreSQL」 (p. 9) PostgreSQL 。 PostgreSQL 百戦錬磨 PostgreSQL 、本書 。SQL 標準 忠実 、違和感 。本書 所 扱 、最 単純 。 同 。 古 、最 堅牢 扱 他 注目 。SQL 初心者 (値) ) 歴史 、 。 、SQL 触 最 比較対象 機能 熟練者 、Postgres 読 。 特有 損 。 名前 示 言語 、 ( 複合型 扱 長 第1章 4 実装 、必 必要 。 、 。 考 値 。 場合 、 、 多 信 必要 立 数多 存在 membase) 中身 要求 高速 役 動作 、 。 、複雑 。 同様 実装 一種 、 。 集約 実装 。有名 、 、memcached( Voldemort。 、本書 取 親戚 上 memcachedb Riak 。 Redis Riak 第 3 章「Riak」 (p. 49) 取 、HTTP Dynamo 論文 採用 実装 基本 、 。Riak 値 ・ 構造 扱 低 取 上 。Riak 、次第 、mapreduce 、 ・ 入 。 呼 知名度 。Amazon 解消 拡張機能 、 初 、 Riak 構成要素 忠実 XML・画像 最 上 REST 使 、本書 人気 紹介 出 。本書 応用的 最 。 Redis Redis 、 済 複合 購読 型 、出版/ 基本的 、 最 提供 堅牢 持 前 、 損失 引 特性 、 振 障害 、驚異的 維持 重要 。 、 舞 用途 章「Redis」 (p. 241) 一緒 使 換 。 。 残 向 。Redis 。最終章 、第 8 、Redis 以外 、 作 思 。 列指向 列指向 ( 一緒 保存 ) 設計 。一方、(RDBMS 違 思 格段 安価 、 )行指向 。各行 。null ) 設計 違 、列 追加 異 列 行単位 大 行 入 。列指向 与 行 、 、 構造 保存 影響 、 圧迫 維持 )列 名前 、情報 、 。列指向 ( 、 (2 次元 、 。 入 分類 1.2 中間 列指向 言 5 。 、 競合 存在 。有名 第 4 章「HBase」 (p. 89) 取 上 、HBase(本書 ) ・Cassandra・Hypertable 。 3 HBase 列指向 、本書 取 、最 上 非 共通 。HBase 、Google 社 多 論文 BigTable 設計図 使 水平 Hadoop(mapreduce 重視 、行 ) 上 動作 列 圧縮 、 構築 持 。 「 、 設計 。整合性 、SQL 」 領域以外 機能 最初 心休 、 。 指向 指向 、当然 、一意 。値 柔軟性 保存 、変化 速 領域 可能 適 。入力 表現 基本要件 指向 、 ・整合性 。 設計上 最適 用途 及 影響 決定 、 規制 満 少 。 ・ 、 手法 、 異 違 理解 、 。 、主 2 。第 5 章「MongoDB」 (p. 127) 取 取 上 対 ・ 選択 。 値 。 高 、 (p. 165) 、 型 ID 上 、第 6 章「CouchDB」 MongoDB 。 CouchDB MongoDB MongoDB 、巨大 、humongous《 設計 源 。 出 、何 。 機能 。 mapreduce 書 込 、RDBMS 操作 供 》 言語 (名前 )。Mongo ( 来 更新 人 「mongo」 整合性 魅力的 、 限 。 )同 、値 値 読 加算 扱 JavaScript 同時 採用 提 、単純 複雑 。 CouchDB CouchDB 、 語 維持 、 、 環境 。Erlang 書 第1章 6 、他 高 切断 障害 。Mongo 。mapreduce 関数 永続性 発生 。一時的 、 同 損 、 構成 保存 保持 言語 JavaScript 、他 使 同様 、複数 。 、 、 相互接続 得意 、 。 構成 。 、 。 長所 探索 上 次々 。 第 7 章「Neo4j」 (p. 203) 取 保存 、 、最 人気 Neo4j 。 Neo4j 自己参照 複雑 操作 。 巡回 登場 Neo4j 高速 、他 。 探索 使 、目的 利点 、 発見 。 、 柔軟性 引力 。Neo4j 、 頂点 一緒 使 実装 。 (混合型) 実際 現場 、複数 単独 長所 。 組 、単純 。 (p. 283) 合 取 上 、 、 合計 強力 、 。今 使 複数 構築 性能 永続化 高 呼 、 堅牢 。本書 、第 9 章「 」 。 1.3 今後 行方 我々 、 爆発 正確 予測 独占 域 (重複 。 代 非 複数 、 、腰道具 問題領 。 同 大工 進化 管理者(DBA) 登場 言語 。優 。次 )特定 、専用 。 、 熟知 限 )受 持 専門職 発者 中 、 ( 、 何 開 把握 1.3 今後 行方 。数多 選択肢 精通 本書 速習 回 。 、 、最初 、熟練者 考 放 7 。最終的 。 。 打 、巣箱 PostgreSQL 取 掛 、電動 作 。 第2章 PostgreSQL 界 PostgreSQL 、頑丈 本的 、力 理解 PostgreSQL 。誰 振 多 、熟練 理解 問題 、 解決 開発者 、 、 実装 行 厳密 型 。 決 関心 最 続 人気 2 次元 高 存在 、 。 普及 ・ 、 ・ ( )、 安全性(ACID 準拠)、 (多 的 、 違 基 集合 列 。新 、今 最 。 管理 論 利用 。 柔軟性 、 。 話 ) 。 使用 正規化 考 備 事前 、問 合 PostgreSQL 、最 優 (RDBMS) 。 知 他 必要 柔軟 。 管理 2.1 Post-greS-Q-L 名前 由来 現在 1995 年 発足 、元々 、1970 年代 初期 大学 校 始 。当時 、Interactive Graphics and Retrieval System(Ingres) 呼 。 後、1980 年代 改良 Post-Ingres(Ingres 後継) 発表 。略 、Postgres 。 大学 校 1993 年 終了 、 Postgres95 開始 。 後、SQL 続 表明 、1996 年 PostgreSQL 改名 。 PostgreSQL 歴史 古 。元 PostgreSQL 、本書 紹介 最 歴史 古 、現場 最 評価 。自然言語 ・多次元 9 ・地理空間 第 2 章 PostgreSQL 10 。高度 対応 組 処理 込 対応 持 。 、 最 。高速 信頼性 高 、 言語 、 ・ 、ANSI SQL 、複数 ・ 継承・副問 合 準拠 単位 扱 。 、Skype・ 全国家族手当金庫(CNAF) ・米連邦航空局(FAA) 実運用 証明 終 *1 。基本 OS 異 tablefunc、dict_xsyn、fuzzystrmatch、pg_trgm、 Postgres 拡張 。 方法 方法 PostgreSQL 、本書 使用 contrib cube 。 、 *2 *3 *4 。 参考 、以下 Postgres 作成 名前 book 。 $ createdb book 本章 、 使 book 。次 正 、以下 確認 contrib 。 $ psql book -c "SELECT ’1’::cube;" 何 受 探 取 、 詳 情報 1 2 。 2.2 1 日目: ・CRUD・結合 熟練者 触 、過去 。 。 。次 、 発行 、 、 値 機能 多 同様 、 )5432 投入 取 出 、 、Postgres 、 結合 。 処理 接続 始 。最後 行 。 通信 。 psql 接続 ( 。 $ psql book *1 http://www.postgresql.org/download/ http://www.postgresql.org/docs/9.0/static/contrib.html *3[訳注]日本語版:http://www.postgresql.jp/document/9.0/html/contrib.html。 *4[訳注]本書 、現時点 最新版 9.2 、 9.0 使用 。各 、次 URL 参照 : http://www.postgresql.org/support/versioning/。 別 、次 URL 参照 :http://www.postgresql.org/docs/manuals/(日本語版: http://www.postgresql.jp/document/)。 *2 2.2 1 日目: 、 PostgreSQL 、管理者 記号 記号 。 。\? 入力 。 、通常 閲覧可能 入力 、psql 、SQL 情報 情報 表示 記号 。 11 後 実行 、 。\h 表示 名前 表示 実行 続 ・CRUD・結合 。 最高 表示 、最初 文字 、SQL 使 方 以下 。 book=# \h CREATE INDEX Command: CREATE INDEX Description: define a new index Syntax: CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ] ( { column | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | ... [ WITH ( storage_parameter = value [, ... ] ) ] [ TABLESPACE tablespace ] [ WHERE predicate ] Postgres 世界 踏 込 前 、 CREATE TABLE 。SELECT ( 復習 便利 慣 親 、軽 ) 調 。 SQL PostgreSQL 慣習 合 SQL 属性 「列」 (COLUMN)、 用語 使 。 使 、 「 」 (TABLE) 、 「行」 (ROW) 呼 、数学用語 。 概念 。本書 、 、 ・属性・ 、 「数学的 」 参照 。 数学的 、 、 ( 名前 (行) 集合 ) 使 。 、 属性 原子的 値 写像 ( 、{name: ’Genghis Khan’, p.died_at_age: 65})。利用可能 、属性 行(列) 定義 ( 構造 名前 数学的 、実装 「関係」 。 実用的 ? 関係 。 、数学 、 数学的 強調 。外部 持 。 制約 、数学的 、 属性 制約型 、{name: string, age: int})。以上 要点 話 持 出 、 力 数学 使 関係 側面 他 話 表 大 。 。 出 第 2 章 PostgreSQL 12 、 強力 最適化 。RDBMS 築 、以下 。 、 集合論 派生 規定 関係代数 構 選択(WHERE ...) 、射影(SELECT ...) 、 積(JOIN ...) nameだけ を返す 表現 組 合 。 died_at_ageがnullである Peopleを ところを選択する xに改名する ( x (People))) name ( died_at_age= SELECT x.name FROM People x WHERE x.died_at_age IS NULL 物理 延々 繰 (配列 返 、 ) 配列。 考 行 、 組関係演算 数学 タプルxが 存在する { t : {name} | 授業 苦 。 書 。 、関係代数 変換 宣言型 RDBMS 、代数 変換 SQL 、上記 図 同 属性nameの 自由変数t 入門 、開発現場 。PostgreSQL 過程 最適化 。以下 図 。 属性nameと 属性died_at_age タプルxは リレーション Peopleに存在する x : {name, died_at_age} ( x People died_at_age はnull x.died_at_age = タプルの属性name の値が等しい t.name = x.name )} 自由変数の結果 SELECT x.name FROM People x WHERE x.died_at_age IS NULL 使 PostgreSQL 。 投入 、先 設計 必要 設計 、 定義 沿 。 、 名 列 構成 。 、行 特定 。列 一意 、型 制約情報(任意) 識別子列 決 2.2 1 日目: 。 識別子 PRIMARY KEY(主 SQL 以下 作成 ・CRUD・結合 ) 呼 。 13 、countries 。 CREATE TABLE countries ( country_code char(2) PRIMARY KEY, country_name text UNIQUE ); 、複数 別子 特定 。2 、PRIMARY KEY 保存 。行 、2 文字 制約 国 識 。国 重複 country_code 制約 。 。country_name 一意性制約 。 、countries 存在 1 行 列 主 、us gb 、 挿入 。 INSERT INTO countries (country_code, country_name) VALUES (’us’,’United States’), (’mx’,’Mexico’), (’au’,’Australia’), (’gb’,’United Kingdom’), (’de’,’Germany’), (’ll’,’Loompaland’); 次 、一意性制約 追加 。country_name 、一意性制約 引 *5 。 挿入 、 PostgreSQL 正常 重複 保 制約 使 。 INSERT INTO countries VALUES (’uk’,’United Kingdom’); ERROR: duplicate key value violates unique constraint "countries_country_name_key" DETAIL: Key (country_name)=(United Kingdom) already exists. CRUD CRUD 、基本的 頭文字 覚 操作 。 追加(Create)、既存 (Delete) 当 ) Create・Read・Update・Delete 。 、新 更新(Update)、不要 以外 参照(Read) 。 削除 操作 ( 、CRUD 何 。 行 正 挿入 確認 、SELECT...FROM SELECT * FROM countries; country_code | country_name --------------+--------------us | United States mx | Mexico *5[訳注]日本語環境 日本語 表示 。 使 。 第 2 章 PostgreSQL 14 au gb de ll (6 rows) | | | | 信頼 Australia United Kingdom Germany Loompaland 地図 、Loompaland 削除 。 country_code 行 行 ll 国 実在 、WHERE 句 削除 削除 。 指定 。 、 。 DELETE FROM countries WHERE country_code = ’ll’; countries 実在 国 。country_code 、countries 、REFERENCES 追加 作 指定 、他 主 参照 。 。次 、cities 存在 。country_code 列 外部 制約 呼 。 CREATE TABLE cities ( name text NOT NULL, postal_code varchar(9) CHECK (postal_code <> ’’), country_code char(2) REFERENCES countries, PRIMARY KEY (country_code, postal_code) ); cities 空 、NULL name 文字列 許可 許可 (<> 行 一意 特定 、複合 。2 、行 列 一緒 。 型 、text(制限 不等 。postal_code 意味)。 、PRIMARY KEY 特定 。 。 、3 文字列型 可変長文字列) 、varchar(9)(9 文字 挿入 見 可変 長文字列) 、char(2)(2 文字 固定長文字列) 。 CA 、 (country_code + postal_code) 作 一意 、 Postgres 制約 Toronto, 。 INSERT INTO cities VALUES (’Toronto’,’M4C1B5’,’ca’); ERROR: insert or update on table "cities" violates foreign key constraint "cities_country_code_fkey" DETAIL: Key (country_code)=(ca) is not present in table "countries". 失敗 、 思惑 、country_code 参照整合性 呼 。country_code REFERENCES countries countries 存在 。 。図 2.1 ( 次 ) 示 、 「REFERENCES 、他 」 主 、 cities.country_code 値 表 、cities NOT NULL 定義 常 正 参照 制約 保証 。 、 NULL 挿入 注意 。NULL 。country_code 参照 NULL 許可 列 country_code char(2) REFERENCES countries 。 2.2 1 日目: name ・CRUD・結合 country_code | country_name | postal_code | country_code --------------+--------------- ----------+-------------+-------------Portland | 97205 | us N 図 2.1 REFERENCES 15 、他 us | United States mx | Mexico au | Australia uk | United Kingdom de | Germany 主 参照 制約 、他 市 挿入 。今度 市 。 INSERT INTO cities VALUES (’Portland’,’87200’,’us’); INSERT 0 1 挿入 。 、postal_code 郵便番号 「97205」 、値 。 間違 。Portland 、行 削除 更新 正 再挿入 。 UPDATE cities SET postal_code = ’97205’ WHERE name = ’Portland’; 行 CRUD(作成・参照・更新・削除) 。 結合参照 本書 取 上 、 CRUD 操作 他 greSQL 結合 。結合 、2 操作 、新 単語 基本的 合 作 似 列 選 出 。Post- 、参照時 何 。 、内部結合 違 可能 方法 合体 。 。簡単 、2 、ON 使 結合 組 。 SELECT cities.*, country_name FROM cities INNER JOIN countries ON cities.country_code = countries.country_code; name | postal_code | country_code | country_name ----------+-------------+--------------+--------------Portland | 97205 | us | United States 結合 、1 *6[訳注]単語 返 作 遊 、1 *6 、 。 。 、cities 第 2 章 PostgreSQL 16 列 値 、countries 値 country_name 含 。 複合 開催地 開催地 主 保存 、郵便番号 国 参照 両方 結合 cities 、 値 2 新 存在 列 必要 。 確認 作 。 、外部 (MATCH FULL 保証 NULL 。 venues 制約 、両方 cities 値 存在 、 ) 。 CREATE TABLE venues ( venue_id SERIAL PRIMARY KEY, name varchar(255), street_address text, type char(7) CHECK ( type in (’public’,’private’) ) DEFAULT ’public’, postal_code varchar(9), country_code char(2), FOREIGN KEY (country_code, postal_code) REFERENCES cities (country_code, postal_code) MATCH FULL ); venue_id 列 、 使 主 設定 。値 自動的 増加 2, 3, 4……) 。 識別子 作 、SERIAL AUTO_INCREMENT 使 )。 使 (MySQL 整数(1, INSERT INTO venues (name, postal_code, country_code) VALUES (’Crystal Ballroom’, ’97205’, ’us’); 上記 venue_id 値 設定 、行 正 挿入 。 複合 結合 話 戻 、2 直後 別名 列 外部 書 venues AS v 。venues 必要 。 。中間 結合 cities 数 AS 節約 書 、 構 名 (venues v 大丈夫)。 SELECT v.venue_id, v.name, c.name FROM venues v INNER JOIN cities c ON v.postal_code=c.postal_code AND v.country_code=c.country_code; venue_id | name | name ----------+------------------+---------1 | Crystal Ballroom | Portland 挿入時 RETURNING 文 、PostgreSQL 指定 列 返 INSERT INTO venues (name, postal_code, country_code) VALUES (’Voodoo Donuts’, ’97205’, ’us’) RETURNING venue_id; id - - - 2 、新 発行 venue_id 取得 。 。
© Copyright 2024 ExpyDoc