SlideShare a Scribd company logo
Submit Search
Upload
イミュータブルデータモデル(世代編)
Report
Share
Yoshitaka Kawashima
Programmer
Follow
•
90 likes
•
38,129 views
1
of
16
イミュータブルデータモデル(世代編)
•
90 likes
•
38,129 views
Report
Share
Download Now
Download to read offline
Software
第1回 しょぼべん ( http://connpass.com/event/10849/ ) で話しした、イミュータブルデータモデル(世代編)です。
Read more
Yoshitaka Kawashima
Programmer
Follow
Recommended
イミュータブルデータモデル(入門編) by
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
185.8K views
•
24 slides
イミュータブルデータモデルの極意 by
イミュータブルデータモデルの極意
Yoshitaka Kawashima
23.8K views
•
28 slides
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 by
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
148.6K views
•
45 slides
Apache Avro vs Protocol Buffers by
Apache Avro vs Protocol Buffers
Seiya Mizuno
5.3K views
•
33 slides
それはYAGNIか? それとも思考停止か? by
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
29.3K views
•
41 slides
Tackling Complexity by
Tackling Complexity
Yoshitaka Kawashima
2.9K views
•
16 slides
More Related Content
What's hot
ソフトウェア開発における『知の高速道路』 by
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
20.2K views
•
18 slides
PostgreSQLアンチパターン by
PostgreSQLアンチパターン
Soudai Sone
48.3K views
•
196 slides
ブルックスのいう銀の弾丸とは何か? by
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
2.3K views
•
28 slides
マルチテナントのアプリケーション実装〜実践編〜 by
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
4.2K views
•
36 slides
ドメイン駆動設計 ( DDD ) をやってみよう by
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
50.1K views
•
45 slides
マルチテナント化で知っておきたいデータベースのこと by
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
8.9K views
•
55 slides
What's hot
(20)
ソフトウェア開発における『知の高速道路』 by Yoshitaka Kawashima
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
•
20.2K views
PostgreSQLアンチパターン by Soudai Sone
PostgreSQLアンチパターン
Soudai Sone
•
48.3K views
ブルックスのいう銀の弾丸とは何か? by Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
•
2.3K views
マルチテナントのアプリケーション実装〜実践編〜 by Yoshiki Nakagawa
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
•
4.2K views
ドメイン駆動設計 ( DDD ) をやってみよう by 増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
•
50.1K views
マルチテナント化で知っておきたいデータベースのこと by Amazon Web Services Japan
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
•
8.9K views
エンジニアの個人ブランディングと技術組織 by Takafumi ONAKA
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
•
23.3K views
例外設計における大罪 by Takuto Wada
例外設計における大罪
Takuto Wada
•
68.5K views
マイクロサービス 4つの分割アプローチ by 増田 亨
マイクロサービス 4つの分割アプローチ
増田 亨
•
41.4K views
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話 by Koichiro Matsuoka
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
•
88.1K views
ソフトウェア設計における 意思決定とそのレビューの秘訣 by Yoshitaka Kawashima
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
•
4.7K views
強いて言えば「集約どう実装するのかな、を考える」な話 by Yoshitaka Kawashima
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
•
7.6K views
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 by Hiroshi Ito
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
•
58.9K views
マイクロにしすぎた結果がこれだよ! by mosa siru
マイクロにしすぎた結果がこれだよ!
mosa siru
•
132.6K views
こわくない Git by Kota Saito
こわくない Git
Kota Saito
•
881.3K views
データベース設計徹底指南 by Mikiya Okuno
データベース設計徹底指南
Mikiya Okuno
•
114.4K views
ドメイン駆動設計サンプルコードの徹底解説 by 増田 亨
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
•
20.3K views
事業が対峙する現実からエンジニアリングを俯瞰する #devlove by Itsuki Kuroda
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
Itsuki Kuroda
•
24.1K views
Dockerからcontainerdへの移行 by Kohei Tokunaga
Dockerからcontainerdへの移行
Kohei Tokunaga
•
16.6K views
テスト文字列に「うんこ」と入れるな by Kentaro Matsui
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
•
177.9K views
Viewers also liked
JobStreamerではじめるJavaBatchのクラウド分散実行 by
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
11.4K views
•
51 slides
開発を効率的に進めるられるまでの道程 by
開発を効率的に進めるられるまでの道程
Takao Sumitomo
27.4K views
•
52 slides
Droid kaigiプレゼン by
Droid kaigiプレゼン
Suguru Oho
23K views
•
56 slides
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben by
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
kyon mm
6.4K views
•
38 slides
データモデルは時空を越える by
データモデルは時空を越える
terahide
5.1K views
•
39 slides
絶対落ちないアプリの作り方 by
絶対落ちないアプリの作り方
Fumihiko Shiroyama
52.9K views
•
124 slides
Viewers also liked
(20)
JobStreamerではじめるJavaBatchのクラウド分散実行 by Yoshitaka Kawashima
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
•
11.4K views
開発を効率的に進めるられるまでの道程 by Takao Sumitomo
開発を効率的に進めるられるまでの道程
Takao Sumitomo
•
27.4K views
Droid kaigiプレゼン by Suguru Oho
Droid kaigiプレゼン
Suguru Oho
•
23K views
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben by kyon mm
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
kyon mm
•
6.4K views
データモデルは時空を越える by terahide
データモデルは時空を越える
terahide
•
5.1K views
絶対落ちないアプリの作り方 by Fumihiko Shiroyama
絶対落ちないアプリの作り方
Fumihiko Shiroyama
•
52.9K views
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について by Shinichi Kozake
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
Shinichi Kozake
•
7.4K views
Android学ぶを君へ。生き抜くためのナレッジ共有 by Shinobu Okano
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
•
61.2K views
プログラミング言語Clojureのニャンパスでの活用事例 by sohta
プログラミング言語Clojureのニャンパスでの活用事例
sohta
•
13.6K views
Java web application testing by Tokuhiro Matsuno
Java web application testing
Tokuhiro Matsuno
•
7.7K views
DB設計でこだわりたい三つの要素 by Takahiro YAMADA
DB設計でこだわりたい三つの要素
Takahiro YAMADA
•
20.4K views
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 - by Yuki Anzai
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Yuki Anzai
•
52.2K views
マテリアルデザインを用いたデザインリニューアル [フリル編] by YUKI YAMAGUCHI
マテリアルデザインを用いたデザインリニューアル [フリル編]
YUKI YAMAGUCHI
•
93.7K 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 Nobuyuki Matsui
良いコードとは
Nobuyuki Matsui
•
52.7K views
エスイーが要件定義でやるべきたったひとつのこと by Yoshitaka Kawashima
エスイーが要件定義でやるべきたったひとつのこと
Yoshitaka Kawashima
•
9.7K views
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2] by bitter_fox
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
bitter_fox
•
13.6K views
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える by pospome
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
•
65.3K views
片手間MySQLチューニング戦略 by yoku0825
片手間MySQLチューニング戦略
yoku0825
•
21.2K views
More from Yoshitaka Kawashima
Are Design Patterns Dead? by
Are Design Patterns Dead?
Yoshitaka Kawashima
468 views
•
15 slides
ソフトウェアにおける 複雑さとは何なのか? by
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
1.1K views
•
23 slides
本番障害に至る病 by
本番障害に至る病
Yoshitaka Kawashima
2.4K views
•
13 slides
システムダウンのひみつ by
システムダウンのひみつ
Yoshitaka Kawashima
2.2K views
•
25 slides
Mavenの真実とウソ by
Mavenの真実とウソ
Yoshitaka Kawashima
13K views
•
67 slides
アンチフラジャイルの世界 by
アンチフラジャイルの世界
Yoshitaka Kawashima
5.1K views
•
41 slides
More from Yoshitaka Kawashima
(20)
Are Design Patterns Dead? by Yoshitaka Kawashima
Are Design Patterns Dead?
Yoshitaka Kawashima
•
468 views
ソフトウェアにおける 複雑さとは何なのか? by Yoshitaka Kawashima
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
•
1.1K 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
なぜデータモデリングが重要なのか? by Yoshitaka Kawashima
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
•
6.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
既婚プログラマの時間捻出術 by Yoshitaka Kawashima
既婚プログラマの時間捻出術
Yoshitaka Kawashima
•
18.1K views
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか by Yoshitaka Kawashima
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
•
9.7K views
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発 by Yoshitaka Kawashima
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Yoshitaka Kawashima
•
3.3K views
週刊Webサイトのアーキテクチャ by Yoshitaka Kawashima
週刊Webサイトのアーキテクチャ
Yoshitaka Kawashima
•
3.2K views
イミュータブルデータモデル(世代編)
1.
イミュータブルデータモデル ジェネレーションズ(世代編) kawasima
2.
たくさんの方々に見ていただきありがとうございます! http://www.slideshare.net/kawasima/ss-40471672
3.
入門編の続編として、 リレーショナルデータモデルで もっとも厄介な「世代」を扱いかた についてお話します。 入門編まだの方はそちらをまずご覧ください!
4.
ありがちな例 日付属性をもったリソース? イベントではないよなぁ… 商品コード 適用開始日 商品名 価格 注文番号 注文日 注文番号 商品コード 適用開始日 注文 注文明細 商品(R)
5.
「イベントは更新不可」の性質を利用 「過日のイベント」と「未来の予定イベント」 は区別して扱おう ● 過去の価格は変更できない ● 未来の価格は変更できるし、変更の予定を取り消すこともできる
6.
イベントの予実として扱う 商品コード 商品名 商品コード 適用予定日 価格 注文番号 注文日 商品コード 適用開始日 (適用終了日) 価格 値付け実績(E) 商品(R) 注文番号 商品コード 予定価格 注文明細 注文 適用予定日が来たものを値 付け実績として反映させる
7.
簡単ですね!
8.
もう少し複雑な例
9.
例題 番組ID 番組名 番組ID 芸能人ID 芸能人ID 芸能人名 番組名も、出演者の名前も改編期やウッチャンによって変え られるが、名前が変わっても同じものとみなして扱いたい。 番組 レギュラー出演 芸能人 番組名
適用開始日 ウンナンの気分は上々。 1996年7月19日 - 1999年3月19日 新・ウンナンの気分は上々。 1999年3月26日 - 2003年3月28日 ウンナンの気分は上々。 2003年4月4日 - 2003年9月26日 芸能人名 適用開始日 海砂利水魚 〜2001年9月27日 くりぃむしちゅ〜 2001年9月28日〜
10.
ありがちな汚モデル 番組ID 適用開始日 (適用終了日) 番組名 番組ID 番組適用開始日 芸能人ID 芸能人適用開始日 レギュラー出演開始日 レギュラー出演終了日 芸能人ID 適用開始日 (適用終了日) 出演者名 番組 芸能人レギュラー出演 ※ちなみにこの適用開始日・終了日の問題は、”動的参照関係”を考慮しなくて はならないという、難しめの問題もあります。 http://watanabek.cocolog-nifty.com/blog/2011/12/post-a77b.html
11.
サロゲートキーを導入する 番組ID 番組コード 適用開始日 (適用終了日) 番組名 番組コード 芸能人コード レギュラー出演開始日 レギュラー出演終了日 芸能人ID 芸能人コード 適用開始日 (適用終了日) 出演者名 番組 芸能人レギュラー出演 課題: ID属性がIdentifiableではない。 少しはスッキリしたが…
12.
イミュータブルモデル fashion 番組ID 番組ID 出演者ID レギュラー出演開始日 レギュラー出演終了日 番組ID 適用開始日 番組名 芸能人ID 芸能人ID 適用開始日 芸能人名 番組 芸能人 レギュラー出演 番組属性 芸能人属性
13.
こういうモデルを キレイめに扱いたくば イミュータブルなデータベースを使おう!
14.
こういうモデルを キレイめに扱いたくば イミュータブルなデータベースを使おう!
15.
Datomic ● UPDATEというものは存在しない。 ● スキーマ全体でトランザクション管理され ており、履歴が積み重なっていてもデフォ ルトで最新のデータにアクセスされる。 ● すべてのデータはEAVTのタプルで格納 される。 http://www.datomic.com E Entity A Attribute V
Value T Transaction
16.
ノーデプロイ分散ジョブ実行環境 JobStreamer job-streamer.github.io 近日発表 そんなDatomicを使ったプロダクトを作っております… よろしくお願いします!