SlideShare a Scribd company logo
1 of 30
データモデリング入門
-astah*を使って、TMの手法を使う-
【実習編】
2013年 1月 7日(初版)
2014年 7月12日(微妙に修正入れた版)
稲見 浩一
astah*を使って、TMの手法を使う Koichi Inami 2013 1
astah*を使って、TMの手法を使う Koichi Inami 2013 2
はじめに
本書は、「データモデリング入門」の実習編です。
TMの文法などは、本編を御覧ください。
書く道具として、チェンジビジョン社のastah*
Professinalを使います。
Community版ではER図が書けないので、必ず
Professional版を使ってください
ダウンロードし、起動後50日までは、試用版として利用可
能です
最も理想的な実習は、既に書ける誰かに相談しながら
実際の業務を書いてみることです
演習では、架空のお話にしかできません。事実なのか検証
できないし、可能性の検討にも意味を持ちません
本書を使えば、astah*Professionalを使って、
TMの手法でER図を書いてみることができます。
それ以上のことは期待できません
一度書いてみれれば、自分の課題について書き始める
ことができるでしょう
その先は、良き先導者を見つけるのが問題解決の近
道だと思います
astah*の使い方自体は、チェンジビジョン社のサイ
トを見てください。
チュートリアルのページ データモデリング編
或いは、リファレンスマニュアルをご覧ください
astah*を使って、TMの手法を使う Koichi Inami 2013 3
astah*を使って、TMの手法を使う Koichi Inami 2013 4
ともかく書き始めよう(準備)
astah*を起動して、図→ER図で始める。
ダイアグラムエディタ
プロジェクトビュー
プロパティビュー
ツールパレット
表記は、IEを選択
しておいてください
エンティティの色分け
TMの手法では、箱に色々と意味を持たせていま
す。astah*では、エンティティの色を使います
astah*を使って、TMの手法を使う Koichi Inami 2013 5
 左図は、ツール→プロジェクト
設定→プロジェクトのプロパ
ティ設定→新規ERエンティ
ティの型の色、で設定してい
る例です
 ツール→システムプロパティ→
新規ERエンティティの型の色
での設定も有ります
 複数人でモデルを書く場合に
は、あらかじめ設定を共有し
ておきましょう
astah*を使って、TMの手法を使う Koichi Inami 2013 6
作図操作
次の図を書いてみる。
① ツールパレットからエンティティのアイコンを選
び、ダイアグラムエディタ上に置く
② 名称を「従業員」に変更する
③ 右クリックメニューから主キーの追加、或い
はCTRL+Kキーで、「従業員番号」を入
力する
④ 右クリックメニューから属性の追加、或いは
CTRL+Rキーで、「従業員名」を入力する
⑤ 「部門」も同様に作成する
⑥ エンティティを1つ置き名称を「従業員.部
門.対照表」とする
⑦ 依存型リレーションシップを従業員から引く
⑧ 依存型リレーションシップを部門から引く
astah*を使って、TMの手法を使う Koichi Inami 2013 7
知っておくべきこと
モデルと図
エンティティを作成すると、プロジェクトビューに作成したもの
が現れていることに注意する
図から削除とモデルから削除は違う
ダイアグラムエディタ上のエンティティを単純にDELキーで消して
もプロジェクトビュー上の定義は変わらない
右クリックメニューから「モデルから削除」すれば、プロジェクト
ビューからも削除される
プロパティビューの活用
先ず、エンティティにしろ、リレーションシップにしろ、各属性
にしろ、「定義」が書けるので活用すること
エンティティの型であったり、多重度であったり、依存と非依
存の切り替えなども、ここでもできる
オンラインマニュアル参照
モデルと図
astah*を使って、TMの手法を使う Koichi Inami 2013 8
①こっちがモデル
②こっちは、単に
図に過ぎない
③図から、単純に
Deleteしても、モデル
からは削除されない
プロジェクトビューから
「従業員」を選んで、ダ
イアグラムエディタにド
ラッグ&ドロップすると、き
ちんと甦る
astah*を使って、TMの手法を使う Koichi Inami 2013 9
演習1
まずは、作図の練習です
次の画面からデータモデルを作成せよ
受注入力画面
品目コード 品目名称 受注数品目単価 受注金額
XXXXXX ×××××××××× 9999,999 9,999,999
受注№:9999 受注日:9999-99-99
顧客№: 999999 顧客区分:×× 顧客名称:××××××
書き方や意味については、(更に自分で学習できる様に)
佐藤正美氏の「データベース設計論ーT字形ER」の実践編に
有る例題を題材にしています。詳しくは、図書を参照下さい。
astah*を使って、TMの手法を使う Koichi Inami 2013 10
先ずは、仕分ける
受注入力画面
顧客№
受注№
品目コード
顧客区分
顧客名称
受注日
品目名称
品目単価
受注数
受注金額
入力の複雑度合いに
よっては、この段階を省
き、直接エンティティを
作っていっても良い
astah*を使って、TMの手法を使う Koichi Inami 2013 11
更に分解する
ラピュタの中から属性を割り振っていく
要確認
astah*を使って、TMの手法を使う Koichi Inami 2013 12
エンティティの類別と関係の作成
日付を持つのは受注のみで、イベントエンティティである
顧客と品目はイベントでないので、リソースエンティティ
受注入力画面で、顧客№と品目コードを入力している
単価の置き場所以外
には、基本的に事実と
の確認のみである。
astah*を使って、TMの手法を使う Koichi Inami 2013 13
演習2
もう一問、こちらは過程を一通り追う問題です
次の画面からデータモデルを作成せよ
申請情報
品目コード:XXXXXX 品目名称: ××××××××××
申請日:9999-99-99申請番号: 999999
購入先コード:XXXXXX 購入先名称: ××××××××××
数量:999 単価種別コード:XXX 単価:99,999
希望納期:9999-99-99
あり なし付属品: あり なし添付資料:
部門コード:XXXXXX 部門名称: ××××××××××
使用者氏名:××××× 使用者電話番号: 9999999999
配送場所コード:XXXXXX 代替配送場所コード:XXXXXX
astah*を使って、TMの手法を使う Koichi Inami 2013 14
以下を前提条件とする
①単価は、品目単価のことである
• 単価には、「正価格(種別コード=1)」と、「割引価格(種
別コード=2)」が有る
②付属品が「あり」について、資料添付が対象となる
• 付属品が「なし」については、資料添付が対象にならない
③使用者は「社員」に限らないので、「社員番号」を使わな
いで、氏名を記述する
④配送場所は、申請した品目を配送して貰う場所のことで
ある
• 配送場所には、それぞれに代替場所の指定が可能で、代替
場所コードには、配送場所コードを使う
⑤品目毎に購入先が決められている
astah*を使って、TMの手法を使う Koichi Inami 2013 15
書いてみよう
では、画面と前提条件を基に書いてみましょう
まず、情報を仕分けし、エンティティを捕捉する
属性をわかる範囲で、エンティティに割り当てていく
配置先が明らかでないものは、ラピュタに置いておく
エンティティを類別する
タイムスタンプが置ければイベント、でなければリソース
関係を考え、リレーションシップを引いていく
リソースとリソースの関係の場合は、対照表を置く
多値と多義を考える
部分集合や構造を検討する
サブセットになるものを検討する
みなしに該当するものを探す
astah*を使って、TMの手法を使う Koichi Inami 2013 16
仕分ける
申請
申請番号
品目コード
購入先コード
部門コード
配送場所コード
代替配送場所コード
申請日
品目名称
購入先名称
数量
単価種別コード
単価
希望納期
付属品(あり/なし)
添付資料(あり/なし)
部門名称
使用者氏名
使用者電話番号
※ 前提条件の①で、単価種別コードの値が1か2しかないこと
から、敢えて一つの識別子と考える必要は無いと考える
astah*を使って、TMの手法を使う Koichi Inami 2013 17
そのまま図にする
仕分け表の左側からエンティティに
astah*を使って、TMの手法を使う Koichi Inami 2013 18
属性を割り当て、エンティティを類別する
タイムスタンプが有るのは、「申
請」エンティティだけ。
他は、リソースとする
取り敢えず、関連する項目は全
て配置してみた
astah*を使って、TMの手法を使う Koichi Inami 2013 19
関係を考え、リレーションシップを引く
前提条件④より、
再帰の構造が読
み取れる
前提条件⑤より
astah*を使って、TMの手法を使う Koichi Inami 2013 20
単価の多義を解消する
astah*を使って、TMの手法を使う Koichi Inami 2013 21
部分集合や構造を検討する。
前提条件②より
前提条件③より
希望納期が無い場
合を認めるなら外に
出す(候補は1
つ?)
astah*を使って、TMの手法を使う Koichi Inami 2013 22
検証と考察
練習問題だから、事実に対する検証はできないので、形
式的なものである
考察すべき点や疑問点は、次の通り
その時点の単価を申請に記録しないか?
リソース間の関係を点検する
購入先と配送場所に関係は無いか?
品目と配送場所に関係は無いか?
各リソースエンティティと申請への関係が、非依存か依存か?
TMには無い考え方、ルールであるため規定しにくい
結果的に、イベント1つだけなので、配置に関する言及は
できない。複数のイベントが有るなら、時系列に並べる
astah*を使って、TMの手法を使う Koichi Inami 2013 23
演習3
次のテーブル定義を基にデータモデルを作成せよ
取引番号
注文番号
注文日
顧客番号
顧客名
商品番号1
商品名1
商品単価1
注文数量1
注文金額1
出荷番号
出荷日
請求番号
請求日
請求金額
商品番号2
商品名2
商品単価2
注文数量2
注文金額2
商品番号3
商品名3
商品単価3
注文数量3
注文金額3
注文金額計
前提:
① 注文番号、出荷番号、請求番号は、
取引番号とは別に、独自に裁番さ
れている
② 注文については、同時に3つまで
の商品が注文可能である
③ 注文ごとに出荷する
④ 注文ごとに請求する
続く
続き
astah*を使って、TMの手法を使う Koichi Inami 2013 24
ルール通り書けば、こんな感じかな
少し前提を変えてみる
①いくつかの注文をまとめて
出荷したい
②月毎にまとめて請求したい
astah*を使って、TMの手法を使う Koichi Inami 2013 25
考慮すべき点は何か?
取引番号で一連に括っているこ
とで、逆にまとめて扱うことがで
きなくなっている
① 取引番号を廃止してみる
② 注文に対する出荷である
③ 注文に対する請求である
モデルを変更してみよう!
astah*を使って、TMの手法を使う Koichi Inami 2013 26
例えば、こんな図にして検討する
まとめ出荷に対応
まとめ請求に対応
どうしても、これらが一連の
「取引」と示したい場合に
概念的なスーパーセットと
して置くこともできる
という様な「検討にも、モデルが使える
可能性がある」という演習問題でした
既に3つまでと
いう制限は不
要にできる
「TM」って何?
ちょっと考察してみましょう
TMでは、「対象表」「対応表」や「みなしエンティティ」と名前
を付けていますが、astah*で書くと、どれも同様にエンティ
ティに見えます(TMとして使うには色分け必須)
TMでは、関係の仕方に名前を付けることで、整理、分析し
やすくなっているのだと思います
TMという手法は、非常に独自なものに見えるけど、表記と
しては標準的なものでも使えるのです
手順としてわかりやすく、間違いなくできるようにルールを作り、
示したものと考えることができます
正美さんの図書などの解説には何やら難しい言葉が出てき
ますが、実際にモデルを書いてみると、どんなに実践的な手
法なのかわかることと思います
astah*を使って、TMの手法を使う Koichi Inami 2013 27
astah*を使って、TMの手法を使う Koichi Inami 2013 28
ご参考:関連図書
どちらも、是非ご一読ください
データベース設計論 T字形ER
関係モデルとオジブェクト指向の統合をめざして
佐藤正美 著
出版社: ソフトリサーチセンター (2005/09)
ウィトゲンシュタイン『論理哲学論考』を読む
野矢茂樹 著
出版社: 筑摩書房 (2006/04)
佐藤正美さんが言う「f-真」とか「l-真」って何だよ?と
思った方、是非こちらの本の前から1/3位を読んでみ
てください。
何故モデルを書くのか、一発で納得できるはずです。
最後に
本編の「最後に」でも書きましたが、独自に始めるより、
既に実践できる人と一緒に始めることが肝心です。
本書は、あくまでも書き方、及びastah*の使い方の練
習です。できるだけ早く、自分が課題としている実際の
業務を一部でも書いてみましょう
その際に、支援してくれる人を見つけてください
最も良い選択肢は、佐藤正美さんに相談することです
そこは何となく敷居が高いかもと思った方は、私にでもご
連絡ください
データマネジメントの一環として始めるなら、DAMA日
本支部にコンタクトする方法も有ります
astah*を使って、TMの手法を使う Koichi Inami 2013 29
astah*を使って、TMの手法を使う Koichi Inami 2013 30
おまけ
現行システムの良し悪しを見極める一つの基準
夜間バッチが朝までに終わらないとか以外にも・・・
• OLTP系のシステムに関し、
RDBMSを使っている場合の判
断基準と考えて下さい
• データベース設計書の各テーブル
定義の列数を見てみる
• 特殊な例を除き、20列を超える
様なテーブルが有るのは、危険な
兆候!(更新日など、どのテーブ
ルにも設けてある固定的な列は
除く)
• 100列以上のテーブルが幾つも
有るのは、残念としか言えません

More Related Content

What's hot

ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話Tsuyoshi Ushio
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
初めてのデータ分析基盤構築をまかされた、その時何を考えておくと良いのか
初めてのデータ分析基盤構築をまかされた、その時何を考えておくと良いのか初めてのデータ分析基盤構築をまかされた、その時何を考えておくと良いのか
初めてのデータ分析基盤構築をまかされた、その時何を考えておくと良いのかTechon Organization
 
Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩kiita312
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
プレゼンの技術
プレゼンの技術プレゼンの技術
プレゼンの技術心 谷本
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
RDRAにおける合意形成の仕組み
RDRAにおける合意形成の仕組みRDRAにおける合意形成の仕組み
RDRAにおける合意形成の仕組みZenji Kanzaki
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門Masahito Zembutsu
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版MOCKS | Yuta Morishige
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
まじめに!できる!LT
まじめに!できる!LT まじめに!できる!LT
まじめに!できる!LT Akabane Hiroyuki
 
ログ解析を支えるNoSQLの技術
ログ解析を支えるNoSQLの技術ログ解析を支えるNoSQLの技術
ログ解析を支えるNoSQLの技術Drecom Co., Ltd.
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPythonHironori Sekine
 
ジョブ理論をなんとなく理解する
ジョブ理論をなんとなく理解するジョブ理論をなんとなく理解する
ジョブ理論をなんとなく理解するharuka iwama
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていることonozaty
 

What's hot (20)

ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
初めてのデータ分析基盤構築をまかされた、その時何を考えておくと良いのか
初めてのデータ分析基盤構築をまかされた、その時何を考えておくと良いのか初めてのデータ分析基盤構築をまかされた、その時何を考えておくと良いのか
初めてのデータ分析基盤構築をまかされた、その時何を考えておくと良いのか
 
Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
プレゼンの技術
プレゼンの技術プレゼンの技術
プレゼンの技術
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
RDRAにおける合意形成の仕組み
RDRAにおける合意形成の仕組みRDRAにおける合意形成の仕組み
RDRAにおける合意形成の仕組み
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
まじめに!できる!LT
まじめに!できる!LT まじめに!できる!LT
まじめに!できる!LT
 
ログ解析を支えるNoSQLの技術
ログ解析を支えるNoSQLの技術ログ解析を支えるNoSQLの技術
ログ解析を支えるNoSQLの技術
 
Ooc 2020
Ooc 2020Ooc 2020
Ooc 2020
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
 
ジョブ理論をなんとなく理解する
ジョブ理論をなんとなく理解するジョブ理論をなんとなく理解する
ジョブ理論をなんとなく理解する
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 

データモデリング入門【実習編】-astah*を使って、TMの手法を使う-