普通のWebエンジニアに学ぶ テーブル設計指南書

35
普通のWebエンジニアに学ぶ テーブル設計指南書 @masayuki5160 141220日土曜日

Transcript of 普通のWebエンジニアに学ぶ テーブル設計指南書

Page 1: 普通のWebエンジニアに学ぶ テーブル設計指南書

普通のWebエンジニアに学ぶテーブル設計指南書

@masayuki5160

14年12月20日土曜日

Page 2: 普通のWebエンジニアに学ぶ テーブル設計指南書

はじめに

テーブル設計どうやったらいいのか教えてほしい、というお話があったので資料にまとめます。

※この資料は”達人に学ぶDB設計徹底指南書”を参考にしています。

14年12月20日土曜日

Page 3: 普通のWebエンジニアに学ぶ テーブル設計指南書

お話しないこと

• RDB以外のDBMSについての詳細

• バックアップ関連の話

• SQLについて

• 高次の正規形について

• インデックス

• DBのパフォーマンスチューニングの話

14年12月20日土曜日

Page 4: 普通のWebエンジニアに学ぶ テーブル設計指南書

アジェンダ

1. DBとは

2. RDBについて

3. 正規化とテーブル設計

4. 現場ではどうなのか

14年12月20日土曜日

Page 5: 普通のWebエンジニアに学ぶ テーブル設計指南書

DBとは

DB => “データのあつまり”のこと

DBMS => “DBを管理するためのシステム”

よくごっちゃで使います。DBMSといわれたときに戸惑わないようにしておけばいいかと。

14年12月20日土曜日

Page 6: 普通のWebエンジニアに学ぶ テーブル設計指南書

DBとは

つまりはこういうこと。このイメージが把握できたらまずはok.

14年12月20日土曜日

Page 7: 普通のWebエンジニアに学ぶ テーブル設計指南書

DBとは

DBの種類の話

• リレーショナルデータベース(RDB)

• オブジェクト指向データベース(OODB)

• XMLデータベース(XMLDB)

• キー・バリュー型ストア(KVS)

• 階層型データベース

14年12月20日土曜日

Page 8: 普通のWebエンジニアに学ぶ テーブル設計指南書

DBとは

DBの種類の話

• リレーショナルデータベース(RDB)

• オブジェクト指向データベース(OODB)

• XMLデータベース(XMLDB)

• キー・バリュー型ストア(KVS)

• 階層型データベース

今回はRDBについて。DBといえば大概RDBのこと。

14年12月20日土曜日

Page 9: 普通のWebエンジニアに学ぶ テーブル設計指南書

ではRDBのお話します

14年12月20日土曜日

Page 10: 普通のWebエンジニアに学ぶ テーブル設計指南書

RDBとは

• DBといえばだいたいRDBのこと

• データを行(レコード)と列(カラム)の2次元で管理

• ex. Oracle Database、Microsoft SQL Server、MySQL、PostgreSQL...

14年12月20日土曜日

Page 11: 普通のWebエンジニアに学ぶ テーブル設計指南書

とはいえエクセルとはちがう。

例えば、、

14年12月20日土曜日

Page 12: 普通のWebエンジニアに学ぶ テーブル設計指南書

項目1 項目2 項目3

ドラえもん 猫型ロボ タケコプター

名古屋 味噌カツ 味噌煮込みうどん

アイアンマン ロボット

こんな表があるとする

14年12月20日土曜日

Page 13: 普通のWebエンジニアに学ぶ テーブル設計指南書

エクセルではOK.

でもRDBではエクセルと違い形だけ2次元の表ではダメ.

項目1 項目2 項目3

ドラえもん 猫型ロボ タケコプター

名古屋 味噌カツ 味噌煮込みうどん

アイアンマン ロボット

14年12月20日土曜日

Page 14: 普通のWebエンジニアに学ぶ テーブル設計指南書

なんで?ということで

RDBでのテーブルのお話です

14年12月20日土曜日

Page 15: 普通のWebエンジニアに学ぶ テーブル設計指南書

RDBとは

• キー

RDBになくてはならいないもので2種類ある

• 主キー

• 外部キー

14年12月20日土曜日

Page 16: 普通のWebエンジニアに学ぶ テーブル設計指南書

RDBとは

主キーと外部キーはこんな感じ

14年12月20日土曜日

Page 17: 普通のWebエンジニアに学ぶ テーブル設計指南書

RDBとは

• 主キー(Primary Key)

テーブルに必ず一つ存在. 主キーを指定すると1

行のレコードを特定できる.

• 外部キー(Foreign Key)

2つのテーブルの列同士で設定.

14年12月20日土曜日

Page 18: 普通のWebエンジニアに学ぶ テーブル設計指南書

で、じつはここまで把握していれば

SQLを使って好きなテーブルつくれます.

14年12月20日土曜日

Page 19: 普通のWebエンジニアに学ぶ テーブル設計指南書

でもこのままの知識だと冗長なテーブルを作ってしまう可能性があったりします.

14年12月20日土曜日

Page 20: 普通のWebエンジニアに学ぶ テーブル設計指南書

そこで正規化のお話

14年12月20日土曜日

Page 21: 普通のWebエンジニアに学ぶ テーブル設計指南書

正規化とテーブル設計

• 正規化とは

• データの冗長性をなくし、一貫性と効率性を保持を行うこと

• 正規化には第1~第5までレベルがある

• 業務上は第3まで知ってれば問題ない

14年12月20日土曜日

Page 22: 普通のWebエンジニアに学ぶ テーブル設計指南書

正規化とテーブル設計

こんな感じ

14年12月20日土曜日

Page 23: 普通のWebエンジニアに学ぶ テーブル設計指南書

正規化とテーブル設計

• 第1正規形

第1正規形は”一つのセルに一つの値を持つようにする”こと.

そんだけ.

14年12月20日土曜日

Page 24: 普通のWebエンジニアに学ぶ テーブル設計指南書

正規化とテーブル設計

• 第2正規形

第2正規形は”主キーに部分従属している属性を分離する”こと.

難しそうだけど右図をみるとわかるかな.

14年12月20日土曜日

Page 25: 普通のWebエンジニアに学ぶ テーブル設計指南書

正規化とテーブル設計

• 第3正規形

第3正規系の話の前に推移的関係従属について. 右図のように主キー以外の属性に従属することをいう.

14年12月20日土曜日

Page 26: 普通のWebエンジニアに学ぶ テーブル設計指南書

正規化とテーブル設計

• 第3正規形

で, 第3正規系の話です. 第3正規形はテーブル内にある推移的従属関係を分離することになります.

14年12月20日土曜日

Page 27: 普通のWebエンジニアに学ぶ テーブル設計指南書

つまり正規化はテーブル設計の

ベストプラクティス.

14年12月20日土曜日

Page 28: 普通のWebエンジニアに学ぶ テーブル設計指南書

だから正規化について理解すれば

テーブル設計できるようになるかも.

14年12月20日土曜日

Page 29: 普通のWebエンジニアに学ぶ テーブル設計指南書

でも実際の現場では

そう簡単にはうまくいかない..

次はそんなお話を少しだけ.

14年12月20日土曜日

Page 30: 普通のWebエンジニアに学ぶ テーブル設計指南書

現場ではどうなのか

• 正規化を意識はしてない

• 非正規化をあえてする

• インデックスとテーブル設計

14年12月20日土曜日

Page 31: 普通のWebエンジニアに学ぶ テーブル設計指南書

現場ではどうなのか

• 正規化を意識はしてない.

無意識でやってる, という意味. 慣れると第3正規化までは当然のように考えます.

ただ正規化をするのがいいかどうかはまた別のお話で..

14年12月20日土曜日

Page 32: 普通のWebエンジニアに学ぶ テーブル設計指南書

現場ではどうなのか

• 非正規化をあえてする

基本的には正規化をします. ただパフォーマンスを考慮して非正規化をあえてすることもあります. 正規化をするのがいつも正しいというわけではない .

ちょっとむずい話なので今回は詳細を割愛.

14年12月20日土曜日

Page 33: 普通のWebエンジニアに学ぶ テーブル設計指南書

現場ではどうなのか

• インデックスとテーブル設計の話

実は正規化の話ではインデックスの話はでてこないが, テーブル設計というとだいたいインデックスをどこにつけるかも考える. インデックスについては説明をしていないが重要なのぜひ調べてみてください.

14年12月20日土曜日

Page 34: 普通のWebエンジニアに学ぶ テーブル設計指南書

おわり

DBははじめは簡単そうにみえます, SQLとか最初は簡単ですからね. でもDBもSQLもほんとに奥が深くおもしろい世界なので興味出たらぜひ突っ込んで調べたり検証したりしてみてください。

最後に、”達人に学ぶDB設計徹底指南書”はいい本なのでぜひ読んでみてください.

14年12月20日土曜日

Page 35: 普通のWebエンジニアに学ぶ テーブル設計指南書

参考

1. DBMS

2. Oracle DBA(1) DBAのタスクとOracle提供ツール、表領域

3. 正規化

14年12月20日土曜日