失敗から学ぶ RDBの正しい歩き方

サポートページ

お詫びと訂正(正誤表)

本書の以下の部分に誤りがありました。ここに訂正するとともに、ご迷惑をおかけしたことを深くお詫び申し上げます。

(2026年1月19日最終更新)

P.267 図20.5 「company」エンティティ

誤
corporate_id
正
customer_id

P.268 図20.6 「company」エンティティ

誤
corporate_id
正
customer_id

(以下2024年1月24日更新)

P.188 図14.4 トランザクションB

誤
INSERT INTO 商品 VALUES (:id, :名前, :価格);
正
INSERT INTO 商品 VALUES (:id, :名前, :価格);
COMMIT;

(以下2023年12月19日更新)

P.138 本文下から6行目

誤 成功していたしても
正 成功していたとしても

(以下2022年9月20日更新)

P.204 1行目

誤
CREATE TABLE 県 (件名 enum('北海道','青森','岩手' .... '沖縄');
正
CREATE TABLE 県 (県名 enum('北海道','青森','岩手' .... '沖縄');

(以下2022年8月15日更新)

P.202 図15.5 8,11行目

誤
> postgres(# WHEN "好きなデータベース"!='そのほか' AND "そのほか"='' THEN TRUE
> postgres(# WHEN "好きなデータベース"='そのほか' AND "そのほか"!='' THEN TRUE
正
> postgres(# WHEN "好きなデータベース"!='それ以外' AND "そのほか"='' THEN TRUE
> postgres(# WHEN "好きなデータベース"='それ以外' AND "そのほか"!='' THEN TRUE

(以下2019年8月22日更新)

第3章 P.27

誤 また、JOINは集合の和の結果ですので、よくベン図で表現されます(図3.2)。このように、重なり部分を取得するのがINNER JOINです。
正 また、JOINは集合同士の演算の結果ですので、よくベン図で表現されます。図3.2のように、重なり部分を取得するのがINNER JOINです。

(以下2019年8月19日更新)

第6章 P.80 リスト6.3 7行目

誤
AND id > :前の表示ページの最後の行のid

正
AND id < :前の表示ページの最後の行のid

(以下2019年6月4日更新)

第14章 P.187 図14.2のキャプション

誤 ファジーリードの例
正 ファジーリードの例(read committed)

第14章 P.187 図14.3のキャプション

誤 図14.2でファジーリードが発生しない場合
正 図14.2でファジーリードが発生しない場合(repeatable read)

(以下2019年5月23日更新)

第12章 P.162

誤 ・デッドロックの可否
正 ・デッドロックの有無

(以下2019年5月20日更新)

第8章 P.110

誤 しかもJSONは値の型を指できないため、こういった型の違いを制限できません。
正 しかもJSONは値の型を指定できないため、こういった型の違いを制限できません。

(以下2019年4月8日更新)

第3章 P.35 リスト3.8

誤

SELECT
  単価表1.単価 AS 単価1
  , 単価表1.会員id AS 会員1id
  , 単価表2.単価 AS 単価2
  , 単価表2.会員id AS 会員2id
FROM
  ( 
    SELECT
      単価表1.単価 AS 単価1
      , 単価表1.会員id AS 会員1id
      , 単価表2.単価 AS 単価2
      , 単価表2.会員 id AS 会員2id
    FROM
      単価表 AS 単価表1
      INNER JOIN 単価表 AS 単価表2
        ON 単価表1.単価id < 単価表2.単価id
        AND 単価表1.会員id <> 単価表2.会員id
    WHERE
      (単価表1.単価 + 単価表2.単価) > : 合計単価
  ) AS 単価組み合わせ表
  INNER JOIN 会員
    ON 会員.user_id = 単価組み合わせ表.会員1id
    AND 会員.user_id = (SELECT 会社id FROM 会社 WHERE 会社名 = '株式会社そーだい')

正

SELECT
  単価1
  , 会員1id
  , 単価2
  , 会員2id
FROM
  ( 
    SELECT
      単価表1.単価 AS 単価1
      , 単価表1.会員id AS 会員1id
      , 単価表2.単価 AS 単価2
      , 単価表2.会員id AS 会員2id 
    FROM
      単価表 AS 単価表1 
      INNER JOIN 単価表 AS 単価表2 
        ON 単価表1.単価id < 単価表2.単価id 
        AND 単価表1.会員id <> 単価表2.会員id 
    WHERE
      (単価表1.単価 + 単価表2.単価) > :合計単価
  ) AS 単価組合せ表 
  INNER JOIN 会員 
    ON 会員.会員id = 単価組合せ表.会員1id
    AND 会員.会社id = (SELECT 会社id FROM 会社 WHERE 会社名 = '株式会社 そーだい')

(以下2019年4月3日更新)

第6章 P.76 図6.3 中央の表

誤
誤
正
正

(以下2019年3月28日更新)

第2章 P.14

誤 RDBは、“時間軸と直行するような設計”が大切です。ですがそれを使ったサービスとしては、時間軸と直行しないデータ=履歴を保存することが同じくらい重要です。
正 RDBは、“時間軸と直交するような設計”が大切です。ですがそれを使ったサービスとしては、時間軸と直交しないデータ=履歴を保存することが同じくらい重要です。

(以下2019年3月20日更新)

第17章 P.228

誤 開発者B:CASE文とサブクエリの嵐ですね……。
正 開発者B:CASE式とサブクエリの嵐ですね……。

(以下2019年3月18日更新)

第3章 P.25 リスト3.1 2行め

誤
 単価表1. 単価 AS 単価1
正
 単価表1.単価 AS 単価1

「単価表1」と「.単価」の間に余計な半角スペースがありました。

第3章 P.25 リスト3.1 9行め

誤
    ON 単価表1.単価 id < 単価表2.単価id
正
    ON 単価表1.単価id < 単価表2.単価id

「単価」と「id」の間に余計な半角スペースがありました。

第3章 P.35 リスト3.8 12行め

誤
      , 単価表2.会員 id AS 会員2id
正

      , 単価表2.会員id AS 会員2id

「会員」と「id」の間に余計な半角スペースがありました。

(以下2019年3月11日更新)

第2章 P.15 図2.2

誤
誤
正
正

第2章 P.16 図2.3

誤
誤
正
正

(以下2019年3月7日更新)

第3章 P.32

誤 INDEX1つでこのように大きく計算結果が変わるのです。
正 INDEX1つでこのように大きく計算コストが変わるのです。