雑に読む「達人に学ぶDB設計徹底指南書」
達人に学ぶDB設計徹底指南書を雑に読む
2016年初版第7刷cFQ2f7LRuLYP.icon
目標
何日かに1回読む
雑で構わない。一通り目を通してどこに何の話題があったかをさらってみよう
実例は大切にしよう
第3章はじっくり読む
第1章 データベースを制する者はシステムを制す
1-1
今日のシステムでデータベースのないシステムはない(p.4)
1-2
データベースの代表的モデル
/excel-jp/データベースも参照する
RDB
この本で扱ってるのはRDBの設計技法cFQ2f7LRuLYP.icon
OODB
オブジェクト指向DB
XMLDB
XMLをつかう
XMLってなんだろう?cFQ2f7LRuLYP.icon
マークアップ言語というらしい
…
1-4
データの意味や形式を先に決める
データ中心アプローチ (DOA : data oriented approach)
オブジェクト指向アプローチ(OOA)とは相性が悪い
3層スキーマ
外部スキーマ
ユーザーから見たデータベース
UIが関係してくる
概念スキーマ
開発者から見たデータベース
データ同士の関係を記述する
設計の中心となる
内部スキーマ
概念スキーマで定義された論理データモデルをどうやってファイル内に格納するか定義する
物理スキーマともいう
第2章 論理設計と物理設計
2-1 概念スキーマと論理設計
論理設計は物理設計に先立つ
エンティティ(entity)を抽出する p.30
エンティティはデータの集合体のこと
物理的実体に対応するものもあれば、対応しないものもある
たとえば?cFQ2f7LRuLYP.icon
いい感じの喫茶店つき本屋を頭に浮かべる
物理的実体に対応する
本
文房具
コーヒー
ケーキ
…
対応しない
出版社
購入履歴
利益
…
このエンティティを格納するのがテーブル
本テーブル、文房具テーブル、コーヒーテーブル、ケーキテーブル…
table:ケーキテーブル例
名前 値段 …
チーズケーキ 750
ミルクレープ 800
モンブラン 780
いちじくのタルト 820
エンティティの定義 p.31
抽出したエンティティにどういうデータを持たせるかを決める
エンティティはデータを「属性」(attribute)という形で保持する
上のケーキテーブルだと、「名前」「値段」という属性でデータを保持しているわけだなcFQ2f7LRuLYP.icon
他にも属性があるかも
「季節商品」
「合うドリンク」
「在庫数」
これは在庫テーブルを作るほうがよさそう
…
「キー列」の定義がだいじ
例
クリスマス | シャトレーゼ通販
table:シャトレーゼのクリスマスケーキ
名前 本体価格 商品番号 サイズ ...
Xmas2つの味が楽しめるデコレーション14cm(苺なし) 2,400 993180 14cm
Xmasパリパリチョコデコレーション17cm 3,200 993183 17cm
乳と卵と小麦粉を使用していないXmasデコレーション15cm(苺なし) 3,000 993188 15cm
Xmasアイスアソートケーキ THE ICE CREAM SHOP 21cm 3,500 993193 21cm
このテーブルで今のデータが全部だとするとキー列は別にどれでも良いっちゃいい
どれも一意に定まる
でも商品番号にしておくのがいいんだろうな
本体価格は同じのが出るかもしれないしサイズも然り
そうですね基素.icon
アソートケーキが品切れでした
正規化 (normalization)
更新が整合的に行えるように、エンティティのフォーマットを整理するのが目的(p.32)
第3章で詳しく解説
ER図 (Entity-Relationship Diagram)
エンティティ同士の関係(relationship)を表現するための図のこと
第4章で詳しく解説
2-2 内部スキーマと物理設計
インデックス (索引) 定義
RDBで重要な概念
なんで?cFQ2f7LRuLYP.icon
第6章のパフォーマンスで関わってくるらしい
大量のデータの中から必要なデータを素早く引くための工夫なので重要基素.icon
データ構造には木構造が使われる
🤔cFQ2f7LRuLYP.icon
この著者、基本的にわかりやすいのにインデックスの説明は下手な感じがあるmrsekut.icon
インデックスの概念を知らない人に最初からアルゴリズムの話を持ってくるのは不親切(他の本でもそうだった)
mrsekut.iconの場合、以下の動画見てインデックスの概要はスッと入った
↓この発表は説明の順序が非常に良い
https://www.youtube.com/watch?v=33oFtND-dj4
JTF2021 C07 『結局「インデックス」ってなんなんですか? - PostgreSQL の仕組みからインデックスの理解を深める』
ありがとうございます!cFQ2f7LRuLYP.icon
RAID (Redundant Array of Independent Disks)
ストレージを冗長化してシステムの信頼性を高める
2-3 バックアップ設計
フルバックアップ
差分バックアップ
増分バックアップ
2-4 リカバリ設計
第3章 論理設計と正規化-なぜテーブルは分割する必要があるのか?
3-1 テーブルとは何か?
テーブルは「表」と似てるが違うものcFQ2f7LRuLYP.icon
テーブル(table)は共通点を持ったレコードの集合
こういうのはRDBにおけるテーブルにはならない
table:テーブルじゃない表
9月 10月 11月
すりきず 5 1 12
きりきず 4 8 5
だぼく 15 20 38
ごうけい 24 29 55
この表を正規化したい場合、どのようにすればいいだろうか?
傷マスタテーブルと負傷ログテーブルを作りそうcFQ2f7LRuLYP.icon
ログテーブルのレコードにタイムスタンプを付しておいて検索して集計したい
実際のSQLのやり方はなんもわからん
「本物のテーブル」が出てきた(p.70)
山岡さんみたいだ美味しんぼでよく聞くSE.icon
山岡士郎 (やまおかしろう)とは【ピクシブ百科事典】
同じレコードが存在してはならない
普通のRDBはやろうとしても挿入できないので安心基素.icon
ちゃんと設計していればの話suto3.icon
一意性制約という
3-2 テーブルの構成要素
列:カラム(column)
属性ということもある
行:レコード(record)
キー:ある特定のデータを引き出すための鍵
キーさん (きーさん)とは【ピクシブ百科事典】
主キーと外部キーがある
テーブルに課す代表的制約
NOT NULL制約
データベースにデータを登録するとき、空欄(null)を許さないこと
もしnullを許すとどうなるんだろう?cFQ2f7LRuLYP.icon
NOT NULL 制約をつけるべきカラムとは - Qiita
NULL撲滅委員会
おっ著者だ
1. SQL の作成にあたり、人間の直観に反する3値論理を考慮せねばならない。
2. IS NULL、IS NOT NULL を指定する場合、インデックスが参照されないためパフォーマンスが悪い。
3. 四則演算または SQL 関数の引数に NULL が含まれると「NULL の伝播」が起こる
4. SQL の結果を受け取るホスト言語において、NULL の組み込み方が標準化されていない。
5. 通常の列の値と違って、NULL は行のどこかに余分なビットを持つことで実装されている。そのため記憶領域を圧迫したり、検索パフォーマンスを悪化させる。
まだわからん。先!
一意制約
ある列のデータに対して一意性を求めること
主キーのような振る舞いを他の列に適用する、ようなものかなcFQ2f7LRuLYP.icon
CHECK制約
指定した条件を満たしたデータだけしか記録できないようにすること
変数の範囲を設定する感じか
3-3 正規化とは何か?
正規化(RDB)
データの冗長性を排除して、利用しやすい形に変形すること
正規化で作られるデータを正規形という
関係の正規化 - Wikipedia
正規形には様々なものが存在するが、いずれにせよ、正規化を行うことにより、データの冗長性と不整合が起きる機会を減らすことができる。
よく「冗長性を持たせて」って言われるけど、ここではむしろ「冗長性」は減らす対象なのか~cFQ2f7LRuLYP.icon
冗長性、知ってるつもり単語だった
冗長性を持たせたいものの例基素.icon
ScrapboxのWebサーバー
冗長性を持たせたくないものの例
マスターデータ
2つのマスターデータが...どっちが本当なの?
正規化には何段階かのレベルがある
第1正規形
1つのセルに一つの値しか含まない状態
この値をスカラ値(scalar value)という
複数の値を含んでいるとダメ
https://gyazo.com/5df42878e08aaf74ae032994bea92c86
統計表における機械判読可能なデータの表記方法の統一ルールの策定(総務省 令和2年12月18日)(p.4)より
「修正後」は第1正規形になってる、ってことだなcFQ2f7LRuLYP.icon
よくみる表はだいたいこれ基素.icon
第2正規形
完全関数従属のみのテーブルになっている状態
完全関数従属って何?cFQ2f7LRuLYP.icon
主キーを構成するすべての列に従属性がある場合のこと
つまり…どういうことだってばよ?cFQ2f7LRuLYP.icon
https://www.youtube.com/watch?v=1K6EM3woxms
1. 主キーを決める
上だと伝票番号と商品番号
2. 部分関数従属を排除する
主キーの一部の列に対して従属する列
上の例だと3つのテーブルに分解できる
1. 伝票番号が決まるとお得意先番号とお得意先名が決まる
2. 商品番号が決まると商品名が決まる
3. 伝票番号と商品番号の2つがあれば数量が決まる
第3正規形
最初はここまで覚えれば十分、とのこと
第4正規形
第5正規形
未来に参照
/mrsekut-p/tableの正規化
いまここcFQ2f7LRuLYP.icon
第4章 ER図-複数のテーブルの関係を表現する
第5章 論理設計とパフォーマンス-正規化の欠点と非正規化
第6章 データベースとパフォーマンス
第7章 論理設計のバッドノウハウ
第8章 論理設計のグレーノウハウ
第9章 一歩進んだ論理設計-SQLで木構造を扱う
付録 演習問題の解答
https://algo-method.com/courses/33 でオンライン実行環境&説明があるので使えることもあるかも基素.icon
時が来たら試してみますcFQ2f7LRuLYP.icon
理解が曖昧なので読みたい基素.icon
買った。達人になるぞ
実際にMySQLやPostgreSQLなどを触ってみると具体例と結びつきそう基素.icon
業務でRDBMSを触っててわからんことがおおいcFQ2f7LRuLYP.icon
理論的側面を求めている(やりがち)
歌人もRDBMSを触る時代!基素.icon
cFQ2f7LRuLYP.iconは決して歌人ではないです!
和歌を読解するけど作らない
これは何人ですか?基素.icon
何ていうんでしょうね…cFQ2f7LRuLYP.icon
プレイする人ではないので観客?
和歌の観客
rickshinmi.iconさんはたぶん歌人・俳人
teyoda7.iconさんも歌人
cFQ2f7LRuLYP.iconさんの業務、想像がつかなすぎるinajob.icon
業務でRDBMSを使うが、「テーブルとは」みたいになるシチュエーションのように見える
知ってた上で改めて精読してる可能性もある
まぁでも、うちの妻もデザイナーだけどSQL書かされてたな、、
自分もよくわかりません…cFQ2f7LRuLYP.icon