1 / 42

実践! DB 逆設計 ~ レシートから ER 図を起こす~

2013/7/20 SAT SQLWrold 遥佐保. 実践! DB 逆設計 ~ レシートから ER 図を起こす~. 自己紹介. 名前と経歴を言う 出没 コミュニティ Room metro (東京・大阪 ) ExceptionalC ++ 読書会(大阪 ) SQLWorld (大阪 ) Microsoft MVP for Client App Dev [Jan,2010 - Dec,2013]. 本日の目的. DB 設計の基本を理解する 第3正規化まで出来るようになる ER 図が書けるようになる. Topics. 正規化は必要? 正規化の種類

keira
Download Presentation

実践! DB 逆設計 ~ レシートから ER 図を起こす~

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2013/7/20 SAT SQLWrold 遥佐保 実践!DB逆設計~レシートからER図を起こす~

  2. 自己紹介 • 名前と経歴を言う • 出没コミュニティ • Room metro(東京・大阪) • ExceptionalC++読書会(大阪) • SQLWorld(大阪) • Microsoft MVP for Client App Dev [Jan,2010 - Dec,2013]

  3. 本日の目的 • DB設計の基本を理解する • 第3正規化まで出来るようになる • ER図が書けるようになる

  4. Topics • 正規化は必要? • 正規化の種類 • 正規化の考え方 • 関数従属 • 第1正規形 • 第2正規形 • 第3正規形 • E-R図 • 演習1 • 演習2 • スーパータイプ、サブタイプ • 演習3 • 演習4(レシート) • まとめ

  5. 正規化ってどんな時に必要なの? 資格管理のテーブルがあるとします • 社員(社員コード、社員名、     資格1、資格2、資格3) • 問題点1:  3つしか資格管理ができない

  6. 正規化ってどんな時に必要なの? • 社員(社員コード、社員名、     資格1、資格2、資格3) • 問題点2:  SQLが煩雑になる  例)DB資格を持っている人を抽出 SELECT 資格1, 資格2, 資格3 FROM 社員 WHERE 資格1=‘DB’,資格2=‘DB’,資格3=‘DB’,

  7. 正規化ってどんな時に必要なの? • 社員(社員コード、社員名、     資格1、資格2、資格3) • 問題点3:  領域に無駄が多い

  8. 正規化ってどんな時に必要なの? • 社員(社員コード、社員名) • 社員資格(社員コード、資格) • 汎用性UP、簡易なSQL、領域削減、 • 更新時異常の防止など、色んなメリットがあります

  9. 正規化しよう!

  10. 正規形の種類 • 非正規形 • 第1正規形 • 第2正規形 • 第3正規形 • ボイスコッド正規形 • 第4正規形 • 第5正規形 ここまでで良いのよ

  11. 正規形の考え方 • 「第3正規形である」ということは… • 「第1正規形の条件も第2正規形の条件も満たしており、かつ第3正規形の条件を満たしている」ということ 第1正規形 第2正規形 第3正規形

  12. 正規化の手順 非正規形 繰り返しの排除 第1正規形 部分関数従属の排除 第2正規形 推移的関数従属の排除 第3正規形

  13. 非正規形とは • "繰り返しがある"状態 • 普通はExcelでこんな表を作ってしまうけど1行に対して複数行存在するので、このままではDBに登録できません

  14. 第1正規形とは <定義>“繰り返しがない”こと 受注 ( 受注番号、年月日、顧客コード、 顧客名、商品コード 、商品名、受注数) 関数従属図を書こう!

  15. 関数従属 顧客コード 顧客名 「顧客コード」が決まれば、 「顧客名」が特定出来る →「顧客名は顧客コードに関数従属する」

  16. 関数従属の用語 • CはAに部分関数従属する • Dは{A,B}に完全関数従属する C A B D

  17. 関数従属の用語 • GはEに推移的関数従属する • (ただし、F→Eでないとき) G E F

  18. 関数従属の用語 • 候補キー • 行を一意に特定できる属性または属性の組み合わせ • 不要な属性は含まない

  19. 第1正規形:関数従属図 受注明細 ( 受注番号、年月日、顧客コード、 顧客名、商品コード 、商品名、受注数) 受注番号 年月日 顧客名 顧客コード 商品コード 受注数 商品名

  20. 正規化の手順 非正規形 繰り返しの排除 第1正規形 部分関数従属の排除 第2正規形 推移的関数従属の排除 第3正規形

  21. 第2正規形とは <定義> • 第1正規形であること • 全ての非キー属性が候補キーに完全関数従属していること (もしくは部分関数従属していないこと) ここやで! 受注番号 年月日 顧客名 顧客コード 商品コード 受注数 商品名

  22. 第2正規形に分解する • 部分関数従属を外に出した 受注番号 商品コード 商品コード 受注数 商品名 受注番号 年月日 顧客名 顧客コード

  23. 第2正規形のテーブル • 受注明細 ( 受注番号、商品コード 、受注数) • 商品 ( 商品コード、商品名) • 受注(受注番号、年月日、顧客コード、顧客名) 受注番号 商品コード 受注数 商品コード 商品名 受注番号 年月日 顧客名 顧客コード

  24. 正規化の手順 非正規形 繰り返しの排除 第1正規形 部分関数従属の排除 第2正規形 推移的関数従属の排除 第3正規形

  25. 第3正規形とは <定義> • 第2正規形であること • 推移的関数従属がないこと 受注番号 商品コード 受注数 商品コード 商品名 ここやで! 受注番号 年月日 顧客名 顧客コード

  26. 第3正規形に分解する • 推移的関数従属を外に出した 受注番号 商品コード 受注数 商品コード 商品名 受注番号 年月日 顧客コード 顧客名 顧客コード

  27. 第3正規形のテーブル • 受注明細 ( 受注番号、商品コード 、受注数) • 商品 ( 商品コード、商品名) • 受注(受注番号、年月日、顧客コード) • 顧客 (顧客コード、顧客名) 受注番号 商品コード 受注数 商品コード 商品名 受注番号 顧客コード 年月日 顧客コード 顧客名

  28. E-R図 • 正規化した後に、E-R図を作成する • *外部キーが無い場合、関連が無い • *主キーから外部キーへ線を引く(1対多) • *外部キーの数だけ線が存在する • 資格( 資格番号、資格名、受験価格 ) • 生徒( 生徒番号、生徒名 ) • 試験結果( 資格番号、生徒番号、得点 ) 試験結果 生徒 資格

  29. 演習1 E-R図を作成する • 商品(商品番号、商品名、価格) • 納品(商品番号、顧客番号、納品数) • ※手順1:主キー、外部キーはどれ?

  30. 演習1 • 商品(商品番号、商品名、価格) • 納品(商品番号、顧客番号、納品数) • 主キー:実線 • 外部キー:破線 • ※手順2: •  2つのテーブルから、3つめのテーブルが考察できるよ!

  31. 演習1 • 商品(商品番号、商品名、価格) • 納品(商品番号、顧客番号、納品数) • 顧客(顧客番号、顧客名、……) • ※手順3: •  あとは主キーから外部キーへ •  線を引くだけ!

  32. 演習1 • 商品(商品番号、商品名、価格) • 納品(商品番号、顧客番号、納品数) • 顧客(顧客番号、顧客名、……) 納品 顧客 商品

  33. 演習2 外部キーはどれだっ!? • 受注明細 ( 受注番号、商品コード 、受注数) • 商品 ( 商品コード、商品名) • 受注 (受注番号、年月日、顧客コード) • 顧客 (顧客コード、顧客名) 受注番号 商品コード 受注数 商品コード 商品名 受注番号 顧客コード 年月日 顧客コード 顧客名

  34. 演習2主キー(1)から外部キー(多)へ線を引く • 受注明細( 受注番号、商品コード 、受注数) • 商品 ( 商品コード、商品名) • 受注 (受注番号、年月日、顧客コード) • 顧客 (顧客コード、顧客名) 受注明細 受注 顧客 商品

  35. 正規化アプローチ • 関数従属から考えるのはボトムアップ • ER図から考えるのはトップダウン どちらで考えるかは、好み

  36. スーパータイプ、サブタイプ • is-a関係 • 乗用車 is a 自動車 • バス is a 自動車 • Part-of関係 • ハンドル is a part of 自動車 • タイヤ is a part of 自動車 自動車 乗用車 バス 自動車 ハンドル タイヤ

  37. スーパータイプ、サブタイプ • is-a関係、part-of関係を保ちつつ排他的であること 自動車 乗用車 バス

  38. スーパータイプなどの例 受注明細 受注 顧客 商品 顧客種別 お得意様 一般

  39. これが第3正規化までの全てです!

  40. 演習3候補キーを上げましょう • ポイント:まず第何正規形かを考える • → その後、現在の関数スキーマを考える • いきなり第3正規化手順である「推移的関数従属を排除」などしてはいけない C A B D

  41. 演習4 レシートからER図を作成する 実際に、レシートを見て 正規化&E-R図を作成しましょう!

  42. まとめ • 第3正規化までは出来るようになろう! • 第1、第2、第3正規化の定義 • ER図の書き方は、主キーから外部キーを引くだけ! • レシートからのDB起こしは、トップダウン or ボトムアップで!

More Related