29.9K Views
January 14, 23
スライド概要
2023/01/13 に開催したデータモデリングハンズオンの資料です。
データベースエンジニアです(現在)
データモデリングを 体験しよう!! 主催:TMの会
タイムテーブル 19:00 受付 19:15 モデリングワークショップ(60分) 20:15 休憩(5分) 20:20 各自で例題を解いてみる(30分) 20:50 クロージング(10分) 21:00 お時間ある方は懇親会へぜひ
講師紹介 • 名前 鈴木利房 • 職業 データベースエンジニア DB運用の合間に、テーブル設計レ ビュー、クエリレビューとか担当 しています
講師紹介 • 名前 衛藤豊 • 職業 人材サービス企業社内SE DA/DBA/データ基盤統括 MODEBI version2 (TM3.0準拠版)を実務 で活用し、社内システムのデータ管理 を行っています。 (最大規模は1200テーブル、7400カラム のDBを一枚のモデル図で管理) @yet103
主催者のTMの会とは • 佐藤正美さん考案のモデリング手法(TM)の講習会受講経験者 の会です • 月一でTMの勉強会を開催しています • 今回は初の未受講者向けのワークショップです • 久しぶりにTMの新刊が発売されたので企画してみました
会場アンケート 1. データモデリングの経験はありますか? 2. お仕事はITエンジニアですか? 3. TM(またはT字形ER手法)をご存じですか?
事業分析・データ設計のためのモデル作成技術入門 TMとは • TMは佐藤正美さんが考案したデータモデリング手法 • とってもシンプルな6つの手順(文法)で成り立っています • 手順が少ないので覚えるのが簡単です • 公式情報 • 書籍 • 事業分析・データ設計のためのモデル作成技術入門 • Webサイト • 株式会社SDI
このワークショップの目的 • TMに準拠したモデリングを体験する • TMに準拠したモデリングツール「MODEBI」の使い方をマス ターする • モデリングを体験することで、理論を理解しやすい状態を作る
データモデリングあるある • 先輩のER図を見よう見まねで覚えた • 担当になったシステムのER図を参考にして覚えた • 本で勉強したが、実際にやってみると判断に迷う • なんとなくやれているが、いまいち確信が持てない • データモデルを見て違和感を感じるが、言語化して指摘するこ とができない
データモデリングツールの紹介 • データモデリングは専用ツールを使った方が効率が良いです • このワークショップではMODEBIを使います (申し訳ないのですがWindowsでしか動きません)
Windows以外をお使いの方へ • 仮想マシンにWindowsを入れてお使いください • Windows11開発環境をマイクロソフトが配布しています • https://developer.microsoft.com/ja-jp/windows/downloads/virtualmachines/
MODEBIとは • モデビ株式会社が配布しているTMモデリングツール • 無料で使える • TM3.0に準拠 • TMにはバージョンがある • 用語や理論が少しずつ変化している • 書籍「事業分析・データ設計のためのモデル作成技術入門」がTM3.0 • 作図ツールではなく、モデリングツールなので使いやすい
MODEBIのインストール手順 1. https://www.modebi.jp/modebi2/ からダウンロード 2. 任意のフォルダに解凍 3. MODEBI2.exeのショートカットをデスクトップに作成する 注意:セキュリティソフトに削除される事があるります
ハンズオンでのMODEBI設定 • 表示>箱色表示切替 → MODEBIver1互換
データモデリングの手順
手順 1. 2. 3. 4. 5. 6. モノを集める モノを並べる 関係を構成する 集合を作る 多値を排除する クラスで整える
手順 1. 2. 3. 4. 5. 6. モノを集める モノを並べる 関係を構成する 集合を作る 多値を排除する クラスで整える
1. モノを集める
受注入力画面 • まずは、一度にひとつの商品を入力できる受注入力画面をモデ リングしてみます 受注入力 受注番号 999999999 顧客番号 999999999 受注日 顧客名称 NNNNNNNN 顧客区分コード x YYYY/MM/DD 商品コード 商品名称 商品単価 受注数 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNN 999,999 9999
語彙を抽出する 受注入力 受注番号 999999999 顧客番号 999999999 受注日 顧客名称 鈴木利房 顧客区分コード 1 YYYY/MM/DD 商品コード 商品名称 商品単価 受注数 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNN 999,999 9999
左に番号・コード類、その他は右に配置
仕訳された状態
個体指定子の数だけ箱を作る
個体指定子を左側に転記して元帳を作る
項目を右側に転記する
箱に名前をつける ※入力画面の箱は不要なので削除します
ここまでのまとめ 1. まず最初に、画面や帳票から情報を抜き出して、いわゆる非 正規化された状態を作ります 2. 左側に番号、コード類(総称して個体指定子と呼びます)、 その他は右側に配置します 3. その後、個体指定子ごとに元帳を作り、関係する項目を集め ます
注意事項 • 項目名はユーザー言語なので、勝手に変えないこと • モデリングの段階で、主キー、一意性、データ型などの実装に 関する事を気にしないこと
出荷入力画面 • 出荷入力画面をモデリングしてみましょう • 受注一覧から遷移してきて、出荷番号と出荷日を入力します 出荷入力 受注番号 999999999 顧客番号 999999999 受注日 顧客名称 鈴木利房 顧客区分コード 1 YYYY/MM/DD 出荷番号 999999999 出荷日 YYYY/MM/DD 商品コード 商品名称 商品単価 受注数 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNN 999,999 9999
語彙を抽出する 出荷入力 受注番号 999999999 顧客番号 999999999 受注日 顧客名称 鈴木利房 顧客区分コード 1 YYYY/MM/DD 出荷番号 999999999 出荷日 YYYY/MM/DD 商品コード 商品名称 商品単価 受注数 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNN 999,999 9999
転記する 重複していないモノだけを対象に転記する ※ (C) は重複項目を表すMODEBIの便利機能(TMの文法ではない)
請求入力画面 • 請求入力画面をモデリングしてみましょう • 出荷一覧から遷移してきて、請求番号と請求日を入力します 請求入力 出荷番号 999999999 顧客番号 999999999 出荷日 顧客名称 鈴木利房 顧客区分コード 1 YYYY/MM/DD 請求番号 999999999 請求日 YYYY/MM/DD 商品コード 商品名称 商品単価 受注数 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNN 999,999 9999
語彙の抽出 請求入力 出荷番号 999999999 顧客番号 999999999 出荷日 顧客名称 鈴木利房 顧客区分コード 1 YYYY/MM/DD 請求番号 999999999 請求日 YYYY/MM/DD 商品コード 商品名称 商品単価 受注数 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNN 999,999 9999
語彙の抽出
ここまでのモデル
手順 1. 2. 3. 4. 5. 6. モノを集める モノを並べる 関係を構成する 集合を作る 多値を排除する クラスで整える
2. モノを並べる
モノを2種類に分類する • Event 日付が帰属するモノ • Resource Event以外のモノ(Eventの補集合)
モノを2種類に分類する
Eventの特性 • Eventの日付として認められるのは、出来事、取引上の過去日付 のみ ○ × × × 受注日、発送日、請求日、入金日 適用開始日、有効期間開始日(日付型のアトリビュート) 従業員入社日、部門設立日(ResourceにEventが混入) レコード登録日、レコード更新日(メタデータ)
Eventを時系列に並べる
ここまでのまとめ • モノを2種類に分類する • 日付が帰属するモノをEvent • それ以外はResource • Eventの日付は行為や取引上の過去日付のみ • Event(出来事、行為、取引)を時系列に並べる • ResourceはEventの周りに並べる
手順 1. 2. 3. 4. 5. 6. モノを集める モノを並べる 関係を構成する 集合を作る 多値を排除する クラスで整える
3.関係を構成する
関係の組み合わせ TMでは法則化されている ふたつのモノの間の関係 1. EventとResourceの関係(出来事にモノが関与する) 2. EventとEventの関係(先行Eventが後続Eventに関与する) 3. ResourceとResourceの関係(モノとモノから新たなモノを作る) ひとつのモノの関係 4. 再帰(ひとつのモノからメンバーをいくつか選んで並べる)
関係を構成する
EventとResourceの関係 • 出来事にモノが関与する • Resourceの個体指定子をEvent に挿入する
ここまでのモデル図
EventとEventの関係 • 先行Eventが後続Eventに関与 する • 「先行-後続」関係
ここまでのモデル図
関係の対応性 一対一 一対多
ここまでのモデル図 このモデルでは、ひとつの受注に対して、ひとつの出荷、ひとつ の請求が対応する事が示されている
多対1、多対多の場合 • 対応表を作成する • このモデル図では、複数の受 注をまとめて出荷することが ある事が示される
EventとEventの文法まとめ • 先行Eventが1の場合、先行Eventの個体指定子を後続Eventに挿入 する • 先行Eventが複数の場合、対応表を作成する
お気に入り商品 • ユーザーはお気に入り商品を管理できるとします • ユーザーのお気に入り商品をモデリングしてみましょう マイページ:お気に入り一覧 顧客番号 999999999 顧客名称 鈴木利房 商品コード 商品名称 商品単価 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNN 999,999
ResourceとResourceの関係 • モノとモノから新たなモノを 作る • 新たなモノを対照表という
対応表と対照表 対応表 対照表
対応表と対照表 • 作りは同じだが、意味が異なるので区別している • 対応表は単なるマッピングリスト • 対照表は意味を持っている • ResourceともEventとも解釈ができる • 「顧客.商品 対照表」は、お気に入りにもなるし、クチコミにもなる • 対照表はResourceの束なので、さらにResourceと関係を構築し、 新たな対照表を作ることができる
在庫は構成されたモノ(対照表)である 構成の仕方は次の3通り 1. R((倉庫, 棚), 商品) 2. R(倉庫, (棚, 商品)) 3. R((倉庫, 商品), 棚)
在庫の例 (倉庫に設置された棚に商品を保管する) 倉庫と棚の組合せが管理されている
在庫の例 (商品と棚をひと組にして倉庫に保管する) 棚(台座)と商品の組合せが管理されている
在庫の例 (倉庫に保管された商品を棚に積載する) 倉庫と商品の組合せが管理されている
製品はモノか 1. R((生地, サイズ), カラー) 2. R((生地, カラー), サイズ) 3. R(生地, (サイズ, カラー)) は省略
裁断してから染める(後染め) 生地.サイズは裁断Event、生地.サイズ.カラーは染色Eventと解釈できる
染めてから裁断する(先染め) 対照表の組合せる順番でプロセス構成が逆転する
セット商品 • 商品を組み合わせて、ひとつの商品にする事があります • セット商品をモデリングしてみましょう セット商品登録 商品コード xxxxxx-xxx 商品名称 NNNNNNNNNNNN 商品コード 商品名称 数量 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNN 999 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNN 999 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNNNNN 999
再帰 • ひとつのモノからメンバーを いくつか選んで並べる • Resourceの再帰 • 階層構造 • Eventの再帰 • 打ち消し
再帰(階層構造) 1 2 4 3 5 6 7
再帰(打ち消し) 打ち消し 受注 受注番号 数量 1 100 2 30 3 -100 受注.再帰表 受注番号 取り消された受注番号 3 1
ここまでのモデル図
手順 1. 2. 3. 4. 5. 6. モノを集める モノを並べる 関係を構成する 集合を作る 多値を排除する クラスで整える
4.集合を作る
法人個人区分 • 顧客には個人顧客と法人顧客があり、入力項目が異なります • 個人顧客と法人顧客をモデリングしてみましょう マイページ:会員情報 マイページ:会員情報 顧客番号 999999999 顧客番号 999999999 顧客区分コード X 顧客区分コード X 法人個人区分 個人 法人個人区分 法人 顧客名称 鈴木利房 法人名称 株式会社トシフサ 顧客名称 鈴木利房
排他的OR関係 個人顧客 法人顧客
サブセット • 部分集合同士の構成が異なる • 別々に実装するか、まとめて 実装するか判断する • まとめた場合は、差異部分に NULLが発生する
顧客区分コード • 顧客区分コードには「仕入先・受注先・納入先」がある • 仕入先、受注先、納品先の立場が入れ替わる顧客が存在する 仕入先 納入先 受注先
サブセット間にAND関係がある場合 請求先かつ支払先が表現できない 顧客区分コードを独立させて対照表 を作る
手順 1. 2. 3. 4. 5. 6. モノを集める モノを並べる 関係を構成する 集合を作る 多値を排除する クラスで整える
5.多値を排除する
複数の商品単価 • 商品に複数の単価がある場合 • 商品単価をモデリングしてみましょう 商品管理 商品コード xxxxxx-xxx 商品名称 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 商品単価-1 999,999 商品単価-2 999,999 商品単価-3 999,999
多値のOR関係(Many-valued OR) 非正規形 正規形
複数商品の受注入力画面 • 一度に複数の商品を受注したい要望がきました • 複数商品の受注をモデリングしましょう 受注入力 受注番号 999999999 顧客番号 999999999 受注日 顧客名称 鈴木利房 顧客区分コード 1 YYYY/MM/DD 商品コード 商品名称 商品単価 受注数 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNN 999,999 9999 xxxxxx-xxx NNNNNNNNNNNNNNNNNNNNNNNNN 999,999 9999
多値のAND関係 一度にひとつ受注するモデル 一度に複数受注するモデル
ここまでのモデル図
手順 1. 2. 3. 4. 5. 6. モノを集める モノを並べる 関係を構成する 集合を作る 多値を排除する クラスで整える
6.クラスで整える
クラス • ここで言うクラスは、数学的なクラス(類)のこと 左側 個体指定子 モノの集まり/対照表/対応表 個体指定子 アトリビュート1 アトリビュート2 ・・・ ・・・ アトリビュートx 右側 アトリビュート
クラスの適用 • 左側(個体指定子)に対してクラスを適用する • 構造を整える • 右側(アトリビュート)に対してクラスを適用する • 集合を整える
アトリビュートにクラスを適用する 1. 2. 3. 4. Resourceに、Event的性質が混入している Resourceに、他のResource的性質が混入している Eventに、Resource的性質が混入している Eventに、他のEvent的性質が混入している
アトリビュートにクラスを適用する • Resourceに、Event的性質が混入している
アトリビュートにクラスを適用する • Resourceに、他のResource的性質が混入している
アトリビュートにクラスを適用する • Eventに、Resource的性質が混入している
アトリビュートにクラスを適用する • Eventに、他のEvent的性質が混入している
個体指定子にクラスを適用する • 共通する意味でサブセットにまとめる
例題をやってみよう
例題1 • レシートのデータ構造をモデ リングしてみましょう 962203260089740001879205
• 受注番号は、動的に採番される 例題2 • 「顧客」および「商品」は予め登録され ている • 入力項目は、受注番号、受注日、顧客番 号、商品コード、受注数である • 受注1回に付き5つの商品を入力できる • 会員区分CDには以下の3種類がある • • • 正会員 準会員 非会員 • 商品単価には以下の3種類がある • • • 正会員割引単価 準会員割引単価 非会員からの受注に適用する標準単価 • なお、準会員および非会員が、決められ た受注数量を超えた場合、正会員割引単 価を適用する • 顧客住所ごとに「地域」が割り振られて いる • 「受注」が入力された時点で「出荷番 号」が自動的に採番される。 • ひとつの「受注」には、ひとつの「出 荷」が対応 する。「出荷」は、event と する。 • 「地域」と「便」は、「複数 – 対 – 複 数」の対応に該当する
今後の学び方
書籍で学ぶ • 事業分析・データ設計のためのモデル作成技 術入門 • このハンズオンはこの本に準拠しています
Webで学ぶ • http://www.sdi-net.co.jp/ に は、正美さん本人の解説 が多数掲載あり • 特にこの辺が役立つ • データ 解析に関する FAQ • ○○を読むシリーズ • 新着情報
セミナーで学ぶ • 佐藤正美のデータモデリング講座(住友電工主催) • 「ビジネス分析=設計モデル / モデル作成の手続き」 • https://www.sei-info.co.jp/event/workshop_fw_koushukai4.html • 直近の日程 • 2023年1月19日(木)~20日(金) 大阪会場 • 2023年2月16日(木)~17日(金) 東京会場
Facebookのグループで学ぶ • https://www.facebook.com/groups/tm.study • 質問すると、TMの会のメンバーが回答するんじゃないかなぁ?
TMの会で学ぶ TMの疑問点を正美さんに質問できます • 開催日:毎月一回、会員の投票で決まった日に開催(だいたい月末) • 時間 :講義2時間、感謝祭2時間 • 会場 :貸し会議室、またはオンライン • 参加費:開催に必要になった経費を割り勘 • (会議室代+積立金代+正美さんの飲み代)÷ 講義参加人数
TMの会で学ぶ • 自分でTMのモデリングをして、レビューして欲しい人を募集します • モデリング対象 • 個人開発のアプリケーション • 実稼働しているアプリケーション • ご自分の担当プロジェクト(許可を取って下さい) • 希望者は鈴木までご連絡下さい • メール:[email protected] • Twitter:@toshifusa
懇親会のご案内 • 近くの居酒屋で懇親会を開催します • 参加される方はこの場に残っていて下さい • ワークショップ中にできなかった質問などありましたら、この 機会にぜひどうぞ!