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

Slides:



Advertisements
Similar presentations
データベース. レシートを見てみよう コンビニやスーパーで買物をするときの レシートを見てみよう – 何がかいてあるだろうか? – レジで全部打ち込んでいる? – なぜ、打ち込まないのにレシートには商品名 や価格が出てくるの?
Advertisements

プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
1 データベース 基本情報技術概論 ( 第 11 回 ) 埼玉大学 理工学研究科 堀山 貴史 DB.
データモデリング ボトムアップ分析. ボトムアップ分析の手順 トップダウン分析の結果とは別に実施 画面や帳票イメージからモデル化 ①画面や帳票を集める ② Excel などのワークシートで,エンティ ティ,データ項目名を決める ③ドメインを定義し,データ項目に割り当 てる ④正規化を実施 ⑤発生タイミングでエンティティを分離.
SQLエディタによる データベースプログラミング 01. データベースとはデータを1つにまとめて 複数のシステムで共有できるようにしたもの 蔵書管理システム 貸出管理システム 生徒ファイル 生徒番号 学年 クラス 番号 名前 性別 住所 貸出ファイル 貸出番号 図書番号 貸出月 貸出日 蔵書ファイル.
Accessによるデータベース(1) Ver.1 /11.
エンティティ・リレーションシップ・モデル
本日のスケジュール 14:45~15:30 テキストの講義 15:30~16:15 設計レビュー 16:15~16:30 休憩
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
第10回 データベース (Database) (2007/12/11版)
リレーショナル・データベース データベース論 第10回.
朝日大学大学院 経営学研究科 奥山 徹 データベース論 朝日大学大学院 経営学研究科 奥山 徹 2006/05/08 データベース論(4回目)
Webアプリケーション開発の 基本的なポイント
SQLエディタによる データベースプログラミング
ショッピングサイト処理関連図 2013年1月 index.php 商品一覧画面 購入ボタン (在庫数以下max8個) 品切れ表示
Shimatterシステムの 初期モデルの正規化
MySQLに接続するデータベースプログラム
Excel による データベース入門 Ver /9.
主キーと主要属性の定義.
第5章 データベースの設計 5.1 データベース設計の概要 5.2 ERモデルとスキーマ設計 5.3 正規化 5.4 一貫性制約.
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
ACCESSによる データベースアプリケーション開発実習 日本工業大学 情報工学科 “データベースの実際” 教材
Accessによる SQLの操作 ~実際にテーブルを操作してみよう!~.
SQL J2EE I 第3回 /
データモデリング トップダウンモデルと ボトムアップモデルの融合
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
RDBMSについて 2年7組  小鹿 慎太郎.
MSBuild 色々出来るよ 2011/04/02 お だ.
データベース.
問題 1 キーボードから入力した数の合計を計算するプログラムを 作成せよ。最初に、何個の数を入力するかその数を入力 するようにする。
第4章 データとモデル.
この資料は、テキストをもとに、講義のために作成したものです.学習用に活用してください.
Microsoft Consumer Channels and Central Marketing Group
この資料は、テキストをもとに、講義のために作成したものです.学習用に活用してください.
14.テーブル定義,一対多の関係,多対多の関係, 外部キー,索引(インデックス),データベース操作
マイクロソフト Access を使ってみよう 第5回
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
マイクロソフト Access を使ってみよう 第4回
C++とオブジェクトデータベース入門 8.オブジェクトデータベースとは 森井 喬 Webページ
データベース設計の基礎 HN おいろん.
データベースシステム入門 8.異状,正規化による異状の防止
データベースシステム入門 9.従属,従属関係,第三正規形
XNAアプリ→WindowsPhone \(\◇ ̄ )ヘン~(  ̄▽/)ゝシン!!! \(○ `O´ ○)/トゥーー!!
マイクロソフト Access での SQL 演習 第5回 副問い合わせ
形式言語とオートマトン Formal Languages and Automata 第4日目
ポジティブな行動支援実践の流れ 個人 小集団 クラスワイド スクールワイド 指導すること(目標)を決める 指導の仕方を決める
講義ノート共有データベース NoteTotter?
テーブル設計を後から変更 現場で使える小技のご紹介 株式会社ジーワンシステム 生島 勘富(イクシマ サダヨシ)
マイクロソフト Access を使ってみよう 第2回
データモデリング モデルの基本作法.
Microsoft Consumer Channels and Central Marketing Group
中国の日系企業に最適のシステム 御社の業務に最適な3つの理由 初期投資なしで すぐに始められる ITに詳しい 担当者不要 何度でも 変更可能.
マイクロソフト Access を使ってみよう 第3回
マイクロソフト Access での SQL 演習 第2回 集計,集約
3.リレーショナルデータベース,主キー, SQL
データモデリング エンティティの切り出し.
レジュメ ◇前回3月19日のCDA更新ポイントの参加証明書 ◇今回4月8日のCDA更新ポイントの参加証明書 CDAナンバーの記載
14.外部キー,データ分析,データベース設計
第4章 データ構造 p.82 [誤] ハミルトニアン経路問題  [正] ハミルトン閉路問題 p.82,83 [誤] セールスパーソン問題
データベース設計入門 初音玲.
データベース設計入門 初音玲.
演習1に関する講評 ~ 業務仕様を書く難しさ ~
データ解析 静岡大学工学部 安藤和敏
関係データベースとSQL MZ Platform講習会(上級).
リレーショナル・データベース J2EE I (データベース論) 第2回 /
磯野ー!そんなことより 正規化しようぜー!
     年  月  日 名前 太郎 1 班.
SQL J2EE I (データベース論) 第3回 /
第3章 関係データベースの基礎 3.1 関係とは 3.2 関係代数.
Presentation transcript:

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

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

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

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

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

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

正規化ってどんな時に必要なの? 社員(社員コード、社員名、 資格1、資格2、資格3) 問題点3: 領域に無駄が多い 社員コード 資格1     資格1、資格2、資格3) 問題点3:  領域に無駄が多い 社員コード 資格1 資格2 資格3 001 DB 002 NW 003 SW 004

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

正規化しよう!

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

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

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

非正規形とは "繰り返しがある"状態 普通はExcelでこんな表を作ってしまうけど1行に対して複数行存在するので、このままではDBに登録できません 受注番号 年月日 顧客コード 顧客名 商品コード 商品名 受注数 T0100 2013/7/20  A0753 山田太郎 S001 Nexus7 1 S002 iPhone5 3 S003 MediasW T0101 2013/7/20 C0231 田中玲子 2

第1正規形とは <定義>“繰り返しがない”こと 関数従属図を書こう! 受注 ( 受注番号、年月日、顧客コード、 顧客名 商品コード 商品名 受注数 T0100 2013/7/20  A0753 山田太郎 S001 Nexus7 1 2013/7/20 S002 iPhone5 3 S003 MediasW T0101 C0231 田中玲子 2 受注 ( 受注番号、年月日、顧客コード、 顧客名、商品コード 、商品名、受注数) 関数従属図を書こう!

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

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

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

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

第1正規形:関数従属図 受注番号 年月日 顧客コード 顧客名 商品コード 受注数 商品名 受注明細 ( 受注番号、年月日、顧客コード、 T0100 2013/7/20  A0753 山田太郎 S001 Nexus7 1 2013/7/20 S002 iPhone5 3 S003 MediasW T0101 C0231 田中玲子 2 受注明細 ( 受注番号、年月日、顧客コード、 顧客名、商品コード 、商品名、受注数) 受注番号 年月日 商品コード 顧客コード 顧客名 受注数 商品名

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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