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

Preview:

Citation preview

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

@masayuki5160

14年12月20日土曜日

はじめに

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

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

14年12月20日土曜日

お話しないこと

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

• バックアップ関連の話

• SQLについて

• 高次の正規形について

• インデックス

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

14年12月20日土曜日

アジェンダ

1. DBとは

2. RDBについて

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

4. 現場ではどうなのか

14年12月20日土曜日

DBとは

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

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

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

14年12月20日土曜日

DBとは

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

14年12月20日土曜日

DBとは

DBの種類の話

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

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

• XMLデータベース(XMLDB)

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

• 階層型データベース

14年12月20日土曜日

DBとは

DBの種類の話

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

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

• XMLデータベース(XMLDB)

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

• 階層型データベース

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

14年12月20日土曜日

ではRDBのお話します

14年12月20日土曜日

RDBとは

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

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

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

14年12月20日土曜日

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

例えば、、

14年12月20日土曜日

項目1 項目2 項目3

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

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

アイアンマン ロボット

こんな表があるとする

14年12月20日土曜日

エクセルではOK.

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

項目1 項目2 項目3

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

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

アイアンマン ロボット

14年12月20日土曜日

なんで?ということで

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

14年12月20日土曜日

RDBとは

• キー

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

• 主キー

• 外部キー

14年12月20日土曜日

RDBとは

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

14年12月20日土曜日

RDBとは

• 主キー(Primary Key)

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

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

• 外部キー(Foreign Key)

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

14年12月20日土曜日

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

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

14年12月20日土曜日

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

14年12月20日土曜日

そこで正規化のお話

14年12月20日土曜日

正規化とテーブル設計

• 正規化とは

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

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

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

14年12月20日土曜日

正規化とテーブル設計

こんな感じ

14年12月20日土曜日

正規化とテーブル設計

• 第1正規形

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

そんだけ.

14年12月20日土曜日

正規化とテーブル設計

• 第2正規形

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

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

14年12月20日土曜日

正規化とテーブル設計

• 第3正規形

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

14年12月20日土曜日

正規化とテーブル設計

• 第3正規形

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

14年12月20日土曜日

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

ベストプラクティス.

14年12月20日土曜日

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

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

14年12月20日土曜日

でも実際の現場では

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

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

14年12月20日土曜日

現場ではどうなのか

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

• 非正規化をあえてする

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

14年12月20日土曜日

現場ではどうなのか

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

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

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

14年12月20日土曜日

現場ではどうなのか

• 非正規化をあえてする

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

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

14年12月20日土曜日

現場ではどうなのか

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

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

14年12月20日土曜日

おわり

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

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

14年12月20日土曜日

参考

1. DBMS

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

3. 正規化

14年12月20日土曜日

Recommended