『理論から学ぶデータベース実践入門』
https://gyazo.com/06db2981c69ad0fefec0e1fdfecb3cad
2015/3/10
感想
ただ、「〇〇はrelational modelから逸脱しているので、良くない」って説明として正しいのか?とは思う
例えば、集約関数max()の使用など
第1章 SQLとリレーショナルモデル
この本で「リレーション」と呼んだ時に何を指す?
tableのこと
1.3 SQLにおけるリレーション操作
SELECTの基本形
コラム 拡張の評価順
INSERT(挿入)
コラム Relvar
DELETE(削除)
UPDATE(更新)
1.4 SQLにあってリレーショナルモデルにないもの
要素の重複
要素間の順序
リレーションの更新
トランザクション
NULL
1.5 まとめ
コラム リレーショナルモデルは古典的か
第2章 述語論理とリレーショナルモデル
誤りが多いとの指摘
2.1 述語論理とリレーショナルモデル
命題
命題論理
結合子
真理関数の真理値
トートロジーと定理
トートロジー
トートロジー=定理
命題論理と公理系
公理
公理系のサンプル
背理法についての追記
公理系を用いた証明のコツ
きわめて厄介なPrinciple of explosion
コラム プリミティブな演算子
命題論理の限界と量化
命題論理の限界
量化
量化子と述語論理
述語論理
量化子とともに用いる束縛変数
量化子を伴わない自由変数
述語論理と集合論
述語と集合は等価に置き換えが可能
集合の包含関係
集合と要素の包含関係の違い
述語論理の公理系
述語論理の公理系の導出規則
ドメイン
一階述語論理
二階述語論理
リレーションの真の姿
リレーションの演算は論理演算
閉世界仮説
矛盾したDBは役に立たない
コラム リレーショナルモデルの限界
2.2 リレーションの演算と述語論理
制限(Restrict)
直積(Product)
結合(Join)
積(Intersect)
コラム 結合と制限
和(Unoin)
差(Difference)
射影(Projection)
属性名変更(Rename)
拡張(Extend)
コラム 外部結合について
2.3 まとめ
第3章 正規化理論(その1) -- 関数従属性 --
1~3.5正規形について
第4章 正規化理論(その2) -- 結合従属性 --
説明がスッと頭に入ってこない
1章あたりで定義した用語を多用しているので、そこを忘れてると何を言ってるかわからなくなるmrsekut.icon
結合従属性のことは「結合従属性」と呼んで、多値従属性のことは「MVD」と呼ぶの意味わからんmrsekut.icon
第5章 リレーションの直交性
3,4章を読まないと読めない
6NFとか結合従属性がわからん
直交
2つ以上のrelationに同じ値が含まれていない状態のこと
リレーションの直交姓
DB全体から重複を取り除く作業
複数のリレーションの間の重複を取り除く
複数のrelationの間の重複って何?
1つのリレーションから重複を取り除くのが正規化
5.1 リレーションの直交性と重複
レプリカ
同じ型を含むリレーション
見出しの一部だけが同じリレーション
5.2 リレーション直交化のための戦略
正規化
属性(カラム)の名前を統一する
命名規則を統一する
主語を含める
アプリケーションの整合性
すべてを直交化する必要はない
5.3 重複を解消することのメリット
異常を防げる
必要なデータがどこにあるかが明確になる
クエリの記述が宣言的になる
不要な無損失分解が必要ない
複雑な制約が必要ない
アプリケーションのコードに無駄がなくなる
性能が向上する
5.4 まとめ
第6章 ドメインの設計戦略
もっと解りやすく言えば、tableの各columnのデータ型のことmrsekut.icon
普通に「データ型」って言えよ、という気はする
が、relational modelの用語に沿っているのだろう
第7章 NULLとの戦い
全体的に知っとるわい!という感じだった
第8章 SELECTを攻略する
8.1 SELECTはSQLの心臓部
SELECTの本質
SELECTの強大さ
データを取得する唯一の手段
SELECTの基本構造
8.2 SELECT七変化
集約関数
関数の有無だけで意味が変わる
COUNTの特殊性
GROUP BYによる集約の書式
サブクエリ
テーブルサブクエリ
スカラサブクエリ
行サブクエリ
ビュー
UNION
組み合わせは自由
8.3 リレーショナルではない操作
リレーショナルな操作のおさらい
ソート
明示的に定義されていないカラム
ストアドファンクション(ユーザ定義関数)
コラム 集約とGROUP BY
リレーショナルではない操作の扱い方
8.4 インデントでSELECT文を読みやすくする
インデントのルール
8.5 まとめ
第9章 履歴データとうまく付き合う
履歴データはRDB上ではうまく取り扱えない
10.1 グラフの構造
ノード,エッジ
隣接
次数
歩道,小道,道
多重辺
ループ
閉路
連結
部分グラフ
カットセット,ブリッジ
エッジの向きと重み
グラフの応用例
10.2 グラフの種類
一般グラフ
単純グラフ
連結グラフ/非連結グラフ
完全グラフ
正則グラフ
平面グラフ
有向グラフ/無向グラフ
重み付きグラフ
ツリー(木)
10.3 SQLとグラフの相性問題
グラフに対するクエリ
無向グラフを表現できるか
有向グラフを用いた表現
リレーショナルな視点でモデルを理解する
行列を用いた表現
グラフに対するクエリ
手続き型による解法
グラフDB
コラム FlockDB
そのほかの問題
10.4 ツリー(木)
ツリーはグラフの一種
コラム ディレクトリのハードリンクが作成できない理由
隣接リストモデル
NULLが許容される理由
経路列挙モデル
入れ子集合モデル
入れ子集合をテーブルで表現する
リレーショナルモデルと相性が悪い理由
クロージャテーブル
ツリーとSQLに関する考察
10.5 まとめ
第11章 インデックスの設計戦略
11.1 インデックスの働き
RDBのインデックス
インデックスの左端と範囲検索
セカンダリインデックスの更新
11.2 インデックスの種類
ハッシュインデックス
全文検索インデックス
形態素解析
Nグラム
Rツリーインデックス
関数インデックス
ビットマップインデックス
コラム クラスタインデックス
11.3 パーティショニング
パーティショニングとは
パーティショニングが適しているケース
パーティショニングと一意性制約
パーティショニングについてよくある誤解
11.4 リレーショナルモデルとインデックス
インデックスはリレーショナルモデルの一部ではない
正規化とインデックス
カラム数が絞られる
問題児NULL
11.5 指令:最適なインデックスを探せ!
必要なインデックス
インデックスのアクセス特性
インデックスが使用される構文
WHERE句
JOIN
相関サブクエリ
ソート
ORとインデックス
最適なインデックスを探すための戦略
インデックス ≠ 候補キー
カラムの並び順
カーディナリティ
最適な組み合わせを探す
難しい作業に立ち向かう
真の最適解にこだわらない
コラム こんなインデックス設計はゴミ箱行きだ!
11.6 まとめ
第12章 Webアプリケーションのためのデータ構造
12.1 キャッシュという考え方
メリット/デメリット
メリット
デメリット
DBアプリケーションにおけるキャッシュ
キャッシュはあくまでもキャッシュ
キャッシュとして使うための要件
キャッシュすべきデータの種別
キャッシュすべきではないデータ
キャッシュが可能なデータ
12.2 キャッシュの実装方法
NoSQLをキャッシュとして使う
論理データはRDBで管理する
データ同期の際の注意点
コラム NoSQLでRDBは置き換えられるか?
テーブルをキャッシュとして使う
集計テーブル
結合済みのデータ
ディスクI/Oを削減できる
ソートとの相性が良い
NewSQLとの相性が良い
タグ
コラム 転置インデックスを使用して検索を高速化する
12.3 スケールアウト
レプリケーションのしくみ
スレーブへの問い合わせ方式
データの論理的整合性と非同期レプリケーション
シャーディングのしくみ
シャーディングの最大の問題点
NoSQLのシャーディング
12.4 まとめ
第13章 リファクタリングの最適解
13.1 リファクタリング
DBのリファクタリングは大変
マルチアプリケーションにおけるDB環境
なぜリファクタリングが必要なのか
リファクタリングの手順
スキーマの移行期間
反復的なリファクタリング
回帰テスト
ベンチマークテスト
マイグレーション利用のススメ
トリガーを使って2つのテーブル間で同期を取る
13.2 リファクタリングの種類
インデックスの追加・削除
カラム名の変更
NOT NULL制約の導入
主キーの定義変更
無損失分解
テーブルの垂直分割と統合
コラム 関連テーブルの実態
13.3 リファクタリングのためのベストプラクティス
正規化と直交性
カラムではなくテーブルを追加する
SELECT * を使わない
アプリケーションを疎結合に
13.4 まとめ
第14章 トランザクションの本質
14.1 トランザクション
トランザクションの機能
同時実行制御
クラッシュリカバリ
トランザクションの鍵,スケジュール
処理の並列化は必要不可欠
同時自動制御の鍵,スケジュール
「データの正しさ」の定義
スケジューラの性能
14.2 トランザクションの特徴
原子性(Atomicity)
一貫性(Consistensy)
分離性(Isolation)
永続性(Durability)
さまざまな異常
スケジュールとロック
トランザクションの分離レベル
DBサーバのコンポーネント
リレーショナルモデルとACIDの「C」
リレーショナルモデルと異常
正規化と直交性
制約
データモデルだけでは不十分である理由
制約を活用してデータを守る
NOT NULL
一意制約
CREATE TYPE
CHECK制約
外部キー制約
トリガー
14.4 まとめ