SlideShare a Scribd company logo
Submit Search
Upload
イミュータブルデータモデル(入門編)
Report
Share
Yoshitaka Kawashima
Programmer
Follow
•
374 likes
•
185,820 views
1
of
24
イミュータブルデータモデル(入門編)
•
374 likes
•
185,820 views
Report
Share
Download Now
Download to read offline
Software
更新日時を排除していくことでそこそこのモデルを書けるようになる手法です。
Read more
Yoshitaka Kawashima
Programmer
Follow
Recommended
イミュータブルデータモデルの極意 by
イミュータブルデータモデルの極意
Yoshitaka Kawashima
23.8K views
•
28 slides
イミュータブルデータモデル(世代編) by
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
38.1K views
•
16 slides
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版) by
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
70.7K views
•
89 slides
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 by
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
148.7K views
•
45 slides
世界一わかりやすいClean Architecture by
世界一わかりやすいClean Architecture
Atsushi Nakamura
47.1K views
•
77 slides
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話 by
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
88.2K views
•
89 slides
More Related Content
What's hot
開発速度が速い #とは(LayerX社内資料) by
開発速度が速い #とは(LayerX社内資料)
mosa siru
61.5K views
•
18 slides
マイクロにしすぎた結果がこれだよ! by
マイクロにしすぎた結果がこれだよ!
mosa siru
132.6K views
•
32 slides
ドメインオブジェクトの見つけ方・作り方・育て方 by
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
30.6K views
•
95 slides
ドメイン駆動設計サンプルコードの徹底解説 by
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
20.3K views
•
41 slides
例外設計における大罪 by
例外設計における大罪
Takuto Wada
68.6K views
•
37 slides
45分間で「ユーザー中心のものづくり」ができるまで詰め込む by
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
50.7K views
•
110 slides
What's hot
(20)
開発速度が速い #とは(LayerX社内資料) by mosa siru
開発速度が速い #とは(LayerX社内資料)
mosa siru
•
61.5K views
マイクロにしすぎた結果がこれだよ! by mosa siru
マイクロにしすぎた結果がこれだよ!
mosa siru
•
132.6K views
ドメインオブジェクトの見つけ方・作り方・育て方 by 増田 亨
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
•
30.6K views
ドメイン駆動設計サンプルコードの徹底解説 by 増田 亨
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
•
20.3K views
例外設計における大罪 by Takuto Wada
例外設計における大罪
Takuto Wada
•
68.6K views
45分間で「ユーザー中心のものづくり」ができるまで詰め込む by Yoshiki Hayama
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
•
50.7K views
リッチなドメインモデル 名前探し by 増田 亨
リッチなドメインモデル 名前探し
増田 亨
•
14.4K views
PostgreSQLアンチパターン by Soudai Sone
PostgreSQLアンチパターン
Soudai Sone
•
48.3K views
オブジェクト指向できていますか? by Moriharu Ohzu
オブジェクト指向できていますか?
Moriharu Ohzu
•
237.5K views
ドメイン駆動設計に15年取り組んでわかったこと by 増田 亨
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
•
10.2K views
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか by Koichiro Matsuoka
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
•
48.5K views
なぜデータモデリングが重要なのか? by Yoshitaka Kawashima
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
•
6.2K views
フロー効率性とリソース効率性について #xpjug by Itsuki Kuroda
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
•
106.2K views
ドメイン駆動設計 ( DDD ) をやってみよう by 増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
•
50.1K views
オブジェクト指向エクササイズのススメ by Yoji Kanno
オブジェクト指向エクササイズのススメ
Yoji Kanno
•
57.2K views
シリコンバレーの「何が」凄いのか by Atsushi Nakada
シリコンバレーの「何が」凄いのか
Atsushi Nakada
•
183.9K views
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive by Tokoroten Nakayama
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
•
122.3K views
イベント・ソーシングを知る by Shuhei Fujita
イベント・ソーシングを知る
Shuhei Fujita
•
31K views
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 by Hiroshi Ito
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
•
59K views
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル) by Mikiya Okuno
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
•
20.9K views
Viewers also liked
MySQLで論理削除と正しく付き合う方法 by
MySQLで論理削除と正しく付き合う方法
yoku0825
79.3K views
•
34 slides
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 - by
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Shuji Kikuchi
10.5K views
•
38 slides
Dependency injection in PHP 5.3/5.4 by
Dependency injection in PHP 5.3/5.4
Fabien Potencier
37.4K views
•
114 slides
データモデルは時空を越える by
データモデルは時空を越える
terahide
5.1K views
•
39 slides
良いコードとは by
良いコードとは
Nobuyuki Matsui
52.7K views
•
28 slides
エスイーが要件定義でやるべきたったひとつのこと by
エスイーが要件定義でやるべきたったひとつのこと
Yoshitaka Kawashima
9.7K views
•
8 slides
Viewers also liked
(10)
MySQLで論理削除と正しく付き合う方法 by yoku0825
MySQLで論理削除と正しく付き合う方法
yoku0825
•
79.3K views
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 - by Shuji Kikuchi
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Shuji Kikuchi
•
10.5K views
Dependency injection in PHP 5.3/5.4 by Fabien Potencier
Dependency injection in PHP 5.3/5.4
Fabien Potencier
•
37.4K views
データモデルは時空を越える by terahide
データモデルは時空を越える
terahide
•
5.1K views
良いコードとは by Nobuyuki Matsui
良いコードとは
Nobuyuki Matsui
•
52.7K views
エスイーが要件定義でやるべきたったひとつのこと by Yoshitaka Kawashima
エスイーが要件定義でやるべきたったひとつのこと
Yoshitaka Kawashima
•
9.7K views
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える by pospome
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
•
65.3K views
片手間MySQLチューニング戦略 by yoku0825
片手間MySQLチューニング戦略
yoku0825
•
21.2K views
If文から機械学習への道 by nishio
If文から機械学習への道
nishio
•
141.2K views
Spring Bootの本当の理解ポイント #jjug by Masatoshi Tada
Spring Bootの本当の理解ポイント #jjug
Masatoshi Tada
•
40K views
Similar to イミュータブルデータモデル(入門編)
OpenSpan_PreMarketing_Reference by
OpenSpan_PreMarketing_Reference
motani_kamakura
304 views
•
4 slides
IDC 電子ブック 『マイクロソフト モダン パートナー シリーズ 2016』パート 4: 業務の最適化 by
IDC 電子ブック 『マイクロソフト モダン パートナー シリーズ 2016』パート 4: 業務の最適化
MPN Japan
78 views
•
34 slides
経営情報フォーラム2009発表資料 by
経営情報フォーラム2009発表資料
Keiichi Hashimoto
629 views
•
37 slides
経営情報フォーラム2009 by
経営情報フォーラム2009
guest5ad17cf
307 views
•
37 slides
非開発者のためのアジャイル開発入門 by
非開発者のためのアジャイル開発入門
Kiro Harada
15.9K views
•
26 slides
X_顧客事例 by
X_顧客事例
motani_kamakura
501 views
•
4 slides
Similar to イミュータブルデータモデル(入門編)
(20)
OpenSpan_PreMarketing_Reference by motani_kamakura
OpenSpan_PreMarketing_Reference
motani_kamakura
•
304 views
IDC 電子ブック 『マイクロソフト モダン パートナー シリーズ 2016』パート 4: 業務の最適化 by MPN Japan
IDC 電子ブック 『マイクロソフト モダン パートナー シリーズ 2016』パート 4: 業務の最適化
MPN Japan
•
78 views
経営情報フォーラム2009発表資料 by Keiichi Hashimoto
経営情報フォーラム2009発表資料
Keiichi Hashimoto
•
629 views
経営情報フォーラム2009 by guest5ad17cf
経営情報フォーラム2009
guest5ad17cf
•
307 views
非開発者のためのアジャイル開発入門 by Kiro Harada
非開発者のためのアジャイル開発入門
Kiro Harada
•
15.9K views
X_顧客事例 by motani_kamakura
X_顧客事例
motani_kamakura
•
501 views
Asahikawa_Ict 20120726 by kspro
Asahikawa_Ict 20120726
kspro
•
134 views
Salesforce crm over_view_2012_0301 by Kohei Nishikawa
Salesforce crm over_view_2012_0301
Kohei Nishikawa
•
840 views
Microsoft 365 で NoOps を考える by 祥子 松山
Microsoft 365 で NoOps を考える
祥子 松山
•
1.6K views
MySQLで学ぶ機械学習ことはじめ.pdf by Machiko Ikoma
MySQLで学ぶ機械学習ことはじめ.pdf
Machiko Ikoma
•
25 views
Process base by Daisuke Sugai
Process base
Daisuke Sugai
•
470 views
[B23] 事例で語る、社会インフラを支えるNonStop SQL ~見えないところで凄いんです~by Tetsuya Shinohara by Insight Technology, Inc.
[B23] 事例で語る、社会インフラを支えるNonStop SQL ~見えないところで凄いんです~by Tetsuya Shinohara
Insight Technology, Inc.
•
1.2K views
アジャイルにモデリングは必要か by Hiromasa Oka
アジャイルにモデリングは必要か
Hiromasa Oka
•
11.6K views
Share Point Online 会社のデータしっかり管理のススメ by kumo2010
Share Point Online 会社のデータしっかり管理のススメ
kumo2010
•
748 views
20111212勉強会資料 by 株式会社インサイト
20111212勉強会資料
株式会社インサイト
•
1.5K views
大規模データに対するデータサイエンスの進め方 #CWT2016 by Cloudera Japan
大規模データに対するデータサイエンスの進め方 #CWT2016
Cloudera Japan
•
19.5K views
enterprise social network sales use case ja by BroadVision
enterprise social network sales use case ja
BroadVision
•
382 views
Citrix eco new by Naotaka Jay HOTTA
Citrix eco new
Naotaka Jay HOTTA
•
981 views
第11回SIA例会プレゼン資料 by Tae Yoshida
第11回SIA例会プレゼン資料
Tae Yoshida
•
1.1K views
Tech Ed 2009 Japan T3-309 Microsoft Business Productivity Online Services 技術概要 by kumo2010
Tech Ed 2009 Japan T3-309 Microsoft Business Productivity Online Services 技術概要
kumo2010
•
933 views
More from Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か? by
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
2.4K views
•
28 slides
Are Design Patterns Dead? by
Are Design Patterns Dead?
Yoshitaka Kawashima
468 views
•
15 slides
強いて言えば「集約どう実装するのかな、を考える」な話 by
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
7.6K views
•
23 slides
ソフトウェアにおける 複雑さとは何なのか? by
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
1.1K views
•
23 slides
Tackling Complexity by
Tackling Complexity
Yoshitaka Kawashima
2.9K views
•
16 slides
ソフトウェア開発における『知の高速道路』 by
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
20.2K views
•
18 slides
More from Yoshitaka Kawashima
(20)
ブルックスのいう銀の弾丸とは何か? by Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
•
2.4K views
Are Design Patterns Dead? by Yoshitaka Kawashima
Are Design Patterns Dead?
Yoshitaka Kawashima
•
468 views
強いて言えば「集約どう実装するのかな、を考える」な話 by Yoshitaka Kawashima
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
•
7.6K views
ソフトウェアにおける 複雑さとは何なのか? by Yoshitaka Kawashima
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
•
1.1K views
Tackling Complexity by Yoshitaka Kawashima
Tackling Complexity
Yoshitaka Kawashima
•
2.9K views
ソフトウェア開発における『知の高速道路』 by Yoshitaka Kawashima
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
•
20.2K views
ソフトウェア設計における 意思決定とそのレビューの秘訣 by Yoshitaka Kawashima
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
•
4.7K views
本番障害に至る病 by Yoshitaka Kawashima
本番障害に至る病
Yoshitaka Kawashima
•
2.4K views
システムダウンのひみつ by Yoshitaka Kawashima
システムダウンのひみつ
Yoshitaka Kawashima
•
2.2K views
Mavenの真実とウソ by Yoshitaka Kawashima
Mavenの真実とウソ
Yoshitaka Kawashima
•
13K views
アンチフラジャイルの世界 by Yoshitaka Kawashima
アンチフラジャイルの世界
Yoshitaka Kawashima
•
5.1K views
Atomic Architecture by Yoshitaka Kawashima
Atomic Architecture
Yoshitaka Kawashima
•
17.2K views
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall by Yoshitaka Kawashima
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
•
22.8K views
ウォーターフォールとアジャイルのフェアな比較 by Yoshitaka Kawashima
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
•
9.5K views
How to find tech books by Yoshitaka Kawashima
How to find tech books
Yoshitaka Kawashima
•
1.5K views
Antifragile Java - Java Day Tokyo 2017 D1-E1 by Yoshitaka Kawashima
Antifragile Java - Java Day Tokyo 2017 D1-E1
Yoshitaka Kawashima
•
6K views
たとえ日本人同士でも必要な異文化理解力 by Yoshitaka Kawashima
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
•
18.8K views
SIerにとっての越境 @ DevLOVE 199 by Yoshitaka Kawashima
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
•
3.2K views
Antifragile Clojure by Yoshitaka Kawashima
Antifragile Clojure
Yoshitaka Kawashima
•
3.8K views
Boilerplate vs Magic by Yoshitaka Kawashima
Boilerplate vs Magic
Yoshitaka Kawashima
•
1.9K views
イミュータブルデータモデル(入門編)
1.
イミュータブル データモデル (入門編)
kawasima
2.
背景 •正しくデータモデリングを学んだ人(1NF~5NFの違いがわかる人)がモデルを書く のが理想だが、現実は難しいところもあ
る。 •そういう状況において、モデリングのエ キスパートでなくても、致命的な問題を 起こしにくいモデルを作るための手法で す。
3.
ゴール •モデルの複雑性を増すのは、CRUDのうち のUPDATEに関する要件です。
•モデルに対するデータの更新を極限まで 削ることによって、拡張に対して開いて いて、修正に対して閉じている堅牢なも のにします。
4.
イミュータブル? •実際にはUPDATE全くなしに業務アプリ ケーションを作るのはハードル高すぎる
ので、ミュータブルな箇所を特定し、一 定の意味付けをおこないUPDATEを許可す る、という文脈です。 •「更新日時」という属性を徹底的に排除 することにより、イミュータブルなモデ ルの獲得を目指します。
5.
モデリングの手順
6.
Step1 エンティティの抽出 発送担当者が受注リストをもとに、商品の在庫を確認し、在庫が
あれば商品を発送する。 ① 要求仕様の「動詞」を抜き出しエンティティとする。 ② ①に関わる「名詞」を抜き出しエンティティとする。 ③ エンティティ間の関連に線を引く ④ 属性や候補キーも分かる範囲で書いておきます。 間違い! この段階で実装をプロパティファイルにするとか、Enum にするとか決め打ちでエンティティとして表さないのはや めましょう。 まず、はじめにエンティティを抽出します。
7.
エンティティ名の付け方 エンティティの名前は、短くその意味を的確に表現するものでなくて はなりません。なくても意味が通じるワードは使わないようにしま
しょう。 なくても意味が通じるワード 情報 データ 処理 ~物 マスタ 記録 管理
8.
ときどき論理設計=日本語名称、物理設計=英語(ローマ字)名称とプロ セス定義して、英語名称を付けるのを後工程にまわすプロジェクトが ありますが、そんな必要はありません。命名は和名/英名セットでおこ
ないます。 名付けには用語辞書を作って、ある程度機械的におこなうのがよくあ るパターンですが、安易に短縮名称を使わないようにしましょう。 母音を抜いて短くする短縮名付け文化圏があるようですが、これを機 械的にやるとヒドイ英名が付けられるもとになります。 QUEUE → Q KIKAKU → KKK 論理設計と物理設計
9.
Step2 エンティティの分類 会員ID
姓 名 郵便番号 住所 電話番号 注文番号 注文会員ID 注文日時 注文 会員 リソース イベント 洗いだしたリソースとイベントに分類します。 基準は属性に”日時” をもつかどうかです。 または、Step1の①の動詞から抜き出したエンティティは“イベ ント”に、②の名詞から抜き出したエンティティは“リソース”に なるはずです。
10.
エンティティを分類するのに、未だ“マスタ”“トランザクション”とい うものを使うプロジェクトがありますが、この定義は曖昧で大抵どっ ちに分類するかでムダな議論のもとになります。
「システムで更新しないものを“マスタ”とします」 「マスタメンテ機能でされるんじゃない?」 「あぁ、マスタメンテ機能での更新はノーカンです」 「日に1回、社員マスタは社員管理システムから送られてきて洗い替えするんだけ ど」 … その点、リソース/イベントの分類は非常に明快で迷うところがありま せん。 マスタ/トランザクションという分類
11.
Step3 イベントエンティティは1つの日時属性 しかもたないようにする
受付番号 注文会員ID 注文日時 注文確認者 注文確認日 請求書出力フラグ 入金予定日 入金日時 入金者氏名 登録日時 更新日時 キャンセル日時 キャンセル取消日時 発注 注文番号 注文会員ID 注文日時 注文 発送指示ID 発送指示者 発送指示日 注文番号 発送指示 One fact in one place. …
12.
イベント系エンティティは、業務の記録です。すなわちイベント系エ ンティティに対する更新は、記録の更新、悪いいい方をすれば記録の 改ざんになる訳です。
したがって、イベント系エンティティは更新が入らないデータが格納 されるものと考えることができます。 業務の“記録” がイベントである
13.
よく全てのエンティティに一律で登録日時や更新日時を付ける設計 ルールを見かけます。あまつさえ、それを自動的に登録してくれるフ レームワークもあるようです。
これは何のためにあるのか再考してみましょう。 おそらく最初の動機としては、何か問題があったときにトレースする ためと思われますが、リソース系エンティティにつけても1世代の更新 しかわかりません。そして更新前の状態もわかりません。本当に問題 をトレースしたいのであれば、変更履歴を別のエンティティとして記 録するべきです。 一方、イベント系エンティティは登録/変更の日時を属性としてただ1 つもつので、同じ意味の属性を別にもたせる必要はありません。 全エンティティに付ける登録日時や更新日時
14.
都道府県コード 都道府県名 都道府県略名
登録日時 登録者ID 更新日時 更新者ID 思考停止の象徴エンティティ 都道府県にすら、更新日時 Σ(゚д゚lll)
15.
Step4 リソースに隠された イベントを抽出する
会員ID 姓 名 郵便番号 住所 電話番号 会員 リソースエンティティに更新日時を持たせたくなるのは、リソースにまつ わるイベントが洗い出せていないことが原因と考えます。 •何かトラブル起こった時に原因をトレースす るため会員が自分自身で会員情報変更ページ から変更する。 •規約に違反した会員であったため、お客様セ ンターのオペレータが強制退会を行う。 •会員からの誤った退会をしてしまったが、取 り消してほしいとの問合せを受けて、お客様 センターのオペレータが会員の復会を行う。 更新日時
16.
会員ID 姓 名
郵便番号 住所 電話番号 会員 会員変更ID 会員ID 姓 名 郵便番号 住所 電話番号 変更日時 変更イベントID 変更理由 会員変更 大抵の会員を管理するシステムではこういうモデルになるのでは ないでしょうか?
17.
リソースに対する変更の記録としてのイベント系エンティティは、い わゆる履歴テーブルと言えます。 履歴テーブルの実装には、「これが正解!」といえるものはなく、業
務要件などに照らしあわせて設計することになります。 このイミュータブルデータモデリングの手順のように、リソースに対 する変更日時を記録したいと思ったら、これをイベントとして切り出 すことを考えると、比較的失敗しにくいように思います。 履歴テーブル
18.
リソースは、イベントによって引き起こされる属性の変化の 一時点でのスナップショットである。 会員ID:
001 姓: Kawashima 名: Yoshitaka 郵便番号: 111-XXXX 住所: 東京都台東区 電話番号: 090-xxx-xxx 会員ID: 001 姓: Kawashima 名: Yoshitaka 郵便番号: 111-XXXX 住所: 東京都台東区 電話番号: 070-xxx-xxx 会員ID: 001 姓: Kawashima 名: Yoshitaka 郵便番号: 167-XXXX 住所: 東京都杉並区 電話番号: 070-xxx-xxx 電話番号変更 住所変更 業務的に計画された更新がない、または更新のイベントをトレースする必 要がない、場合に限り、このスナップショットだけを変更イベントをもた ないリソースエンティティとして定義される、と考える。
19.
Step5 非依存リレーションシップを 交差エンティティにする
リレーションが非依存である場合、外部キーにNULLを許し、後でアップ デートすることが可能になってしまいます。 こうした要求の裏には、別のイベントが隠れていることがあります。 プログラマID 姓 名 プロジェクトID (FK) プログラマ プロジェクトID プロジェクト名 プロジェクト プログラマは、担当するプロジェク トがなくても、存在しうる。 「アサイン」というリレーション シップが間にあるのでは?
20.
R-R間の交差エンティティ 社員ID 姓
名 部門ID (FK) 社員 部門ID 部門名 部門 新人が部門に配属されたら部門IDに 値を入れる。 社員ID 姓 名 社員 部門ID 部門名 部門 部門ID 社員ID 配属日 配属 配属イベントが潜んでいる。
21.
E-E間の交差エンティティ 請求ID 請求日時
請求書宛先 請求金額 受注ID 受注日時 請求ID 受注 請求 請求ID 請求日時 請求書宛先 請求金額 受注ID 受注日時 受注 請求 複数の受注をまとめて請求する。 受注ID 請求ID 受注-請求 対応する請求のデータができたら請求IDに 値を入れる。 (時系列の逆転したリレーション) E-E間の場合は、イベントが潜むのではなく、対応表が必要に なる。時系列の逆転が起こらないように設計する。
22.
交差エンティティは多対多の場合だけのものではない B A
ER図で、このような形だけみて、「エンティティAとエンティティBは、 多対多じゃないんだけどっ!」というカーディナリティだけでリレー ションシップを決めてしまう人がいます。 重要なのは、非依存リレーションシップということは、互いに独立に 存在しえて、何らかのイベントによって、それらに関係性が作られる という、このイベントが何か洗い出せているか? という点です。 これをやらずに、カーディナリティだけでリレーションシップを考え ると、業務上必要だったイベントエンティティを見落としてしまうこ とに繋がりかねません。
23.
まとめ
24.
•更新日時に着目し、それらをエンティ ティから追い出すだけで、それなりの堅 牢なデータモデルが書けるようになる。
•ただ、これだけでは不十分なところある ので、ちゃんと本を読もう。 佐藤正美(2005) 『データベース設計論 T字型ER』 羽生章洋(2006) 『楽々ERDレッスン』