イミュータブルデータモデル(世代編)

Yoshitaka Kawashima
イミュータブルデータモデル
ジェネレーションズ(世代編)
kawasima
たくさんの方々に見ていただきありがとうございます!
http://www.slideshare.net/kawasima/ss-40471672
入門編の続編として、
リレーショナルデータモデルで
もっとも厄介な「世代」を扱いかた
についてお話します。
入門編まだの方はそちらをまずご覧ください!
ありがちな例
日付属性をもったリソース?
イベントではないよなぁ…
商品コード
適用開始日
商品名
価格
注文番号
注文日
注文番号
商品コード
適用開始日
注文
注文明細
商品(R)
「イベントは更新不可」の性質を利用
「過日のイベント」と「未来の予定イベント」
は区別して扱おう
●
過去の価格は変更できない
●
未来の価格は変更できるし、変更の予定を取り消すこともできる
イベントの予実として扱う
商品コード
商品名
商品コード
適用予定日
価格
注文番号
注文日
商品コード
適用開始日
(適用終了日)
価格
値付け実績(E)
商品(R)
注文番号
商品コード
予定価格
注文明細
注文
適用予定日が来たものを値
付け実績として反映させる
簡単ですね!
もう少し複雑な例
例題
番組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日〜
ありがちな汚モデル
番組ID
適用開始日
(適用終了日)
番組名
番組ID
番組適用開始日
芸能人ID
芸能人適用開始日
レギュラー出演開始日
レギュラー出演終了日
芸能人ID
適用開始日
(適用終了日)
出演者名
番組 芸能人レギュラー出演
※ちなみにこの適用開始日・終了日の問題は、”動的参照関係”を考慮しなくて
はならないという、難しめの問題もあります。
http://watanabek.cocolog-nifty.com/blog/2011/12/post-a77b.html
サロゲートキーを導入する
番組ID
番組コード
適用開始日
(適用終了日)
番組名
番組コード
芸能人コード
レギュラー出演開始日
レギュラー出演終了日
芸能人ID
芸能人コード
適用開始日
(適用終了日)
出演者名
番組 芸能人レギュラー出演
課題: ID属性がIdentifiableではない。
少しはスッキリしたが…
イミュータブルモデル
fashion
番組ID
番組ID
出演者ID
レギュラー出演開始日
レギュラー出演終了日
番組ID
適用開始日
番組名
芸能人ID
芸能人ID
適用開始日
芸能人名
番組 芸能人
レギュラー出演
番組属性 芸能人属性
こういうモデルを
キレイめに扱いたくば
イミュータブルなデータベースを使おう!
こういうモデルを
キレイめに扱いたくば
イミュータブルなデータベースを使おう!
Datomic
●
UPDATEというものは存在しない。
●
スキーマ全体でトランザクション管理され
ており、履歴が積み重なっていてもデフォ
ルトで最新のデータにアクセスされる。
●
すべてのデータはEAVTのタプルで格納
される。
http://www.datomic.com
E Entity
A Attribute
V Value
T Transaction
ノーデプロイ分散ジョブ実行環境
JobStreamer
job-streamer.github.io
近日発表
そんなDatomicを使ったプロダクトを作っております…
よろしくお願いします!
1 of 16

Recommended

イミュータブルデータモデル(入門編) by
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
185.8K views24 slides
イミュータブルデータモデルの極意 by
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
23.8K views28 slides
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 by
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
148.6K views45 slides
Apache Avro vs Protocol Buffers by
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersSeiya Mizuno
5.3K views33 slides
それはYAGNIか? それとも思考停止か? by
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
29.3K views41 slides
Tackling Complexity by
Tackling ComplexityTackling Complexity
Tackling ComplexityYoshitaka Kawashima
2.9K views16 slides

More Related Content

What's hot

ソフトウェア開発における『知の高速道路』 by
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
20.2K views18 slides
PostgreSQLアンチパターン by
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
48.3K views196 slides
ブルックスのいう銀の弾丸とは何か? by
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?Yoshitaka Kawashima
2.3K views28 slides
マルチテナントのアプリケーション実装〜実践編〜 by
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜Yoshiki Nakagawa
4.2K views36 slides
ドメイン駆動設計 ( DDD ) をやってみよう by
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
50.1K views45 slides
マルチテナント化で知っておきたいデータベースのこと by
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
8.9K views55 slides

What's hot(20)

ソフトウェア開発における『知の高速道路』 by Yoshitaka Kawashima
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima20.2K views
PostgreSQLアンチパターン by Soudai Sone
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone48.3K views
ブルックスのいう銀の弾丸とは何か? by Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima2.3K views
マルチテナントのアプリケーション実装〜実践編〜 by Yoshiki Nakagawa
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa4.2K views
ドメイン駆動設計 ( DDD ) をやってみよう by 増田 亨
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨50.1K views
マルチテナント化で知っておきたいデータベースのこと by Amazon Web Services Japan
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
エンジニアの個人ブランディングと技術組織 by Takafumi ONAKA
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA23.3K views
例外設計における大罪 by Takuto Wada
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada68.5K views
マイクロサービス 4つの分割アプローチ by 増田 亨
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨41.4K views
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話 by Koichiro Matsuoka
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka88.1K views
ソフトウェア設計における 意思決定とそのレビューの秘訣 by Yoshitaka Kawashima
ソフトウェア設計における 意思決定とそのレビューの秘訣ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima4.7K views
強いて言えば「集約どう実装するのかな、を考える」な話 by Yoshitaka Kawashima
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima7.6K views
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 by Hiroshi Ito
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito58.9K views
マイクロにしすぎた結果がこれだよ! by mosa siru
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru132.6K views
こわくない Git by Kota Saito
こわくない Gitこわくない Git
こわくない Git
Kota Saito881.3K views
データベース設計徹底指南 by Mikiya Okuno
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno114.4K views
ドメイン駆動設計サンプルコードの徹底解説 by 増田 亨
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨20.3K views
事業が対峙する現実からエンジニアリングを俯瞰する #devlove by Itsuki Kuroda
事業が対峙する現実からエンジニアリングを俯瞰する #devlove事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
Itsuki Kuroda24.1K views
Dockerからcontainerdへの移行 by Kohei Tokunaga
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga16.6K views
テスト文字列に「うんこ」と入れるな by Kentaro Matsui
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui177.9K views

Viewers also liked

JobStreamerではじめるJavaBatchのクラウド分散実行 by
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行Yoshitaka Kawashima
11.4K views51 slides
開発を効率的に進めるられるまでの道程 by
開発を効率的に進めるられるまでの道程開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程Takao Sumitomo
27.4K views52 slides
Droid kaigiプレゼン by
Droid kaigiプレゼンDroid kaigiプレゼン
Droid kaigiプレゼンSuguru Oho
23K views56 slides
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben by
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syobobenkyon mm
6.4K views38 slides
データモデルは時空を越える by
データモデルは時空を越えるデータモデルは時空を越える
データモデルは時空を越えるterahide
5.1K views39 slides
絶対落ちないアプリの作り方 by
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方Fumihiko Shiroyama
52.9K views124 slides

Viewers also liked(20)

JobStreamerではじめるJavaBatchのクラウド分散実行 by Yoshitaka Kawashima
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima11.4K views
開発を効率的に進めるられるまでの道程 by Takao Sumitomo
開発を効率的に進めるられるまでの道程開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
Takao Sumitomo27.4K views
Droid kaigiプレゼン by Suguru Oho
Droid kaigiプレゼンDroid kaigiプレゼン
Droid kaigiプレゼン
Suguru Oho23K views
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben by kyon mm
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
kyon mm6.4K views
データモデルは時空を越える by terahide
データモデルは時空を越えるデータモデルは時空を越える
データモデルは時空を越える
terahide5.1K views
絶対落ちないアプリの作り方 by Fumihiko Shiroyama
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama52.9K views
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について by Shinichi Kozake
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
Shinichi Kozake7.4K views
Android学ぶを君へ。生き抜くためのナレッジ共有 by Shinobu Okano
Android学ぶを君へ。生き抜くためのナレッジ共有Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano61.2K views
プログラミング言語Clojureのニャンパスでの活用事例 by sohta
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta13.6K views
DB設計でこだわりたい三つの要素 by Takahiro YAMADA
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
Takahiro YAMADA20.4K views
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 - by Yuki Anzai
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Yuki Anzai52.2K views
マテリアルデザインを用いたデザインリニューアル [フリル編] by YUKI YAMAGUCHI
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
YUKI YAMAGUCHI93.7K views
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 - by Shuji Kikuchi
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Shuji Kikuchi10.5K views
Dependency injection in PHP 5.3/5.4 by Fabien Potencier
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4
Fabien Potencier37.4K views
エスイーが要件定義でやるべきたったひとつのこと by Yoshitaka Kawashima
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのこと
Yoshitaka Kawashima9.7K views
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2] by bitter_fox
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
bitter_fox13.6K views
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える by pospome
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome65.3K views
片手間MySQLチューニング戦略 by yoku0825
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略
yoku082521.2K views

More from Yoshitaka Kawashima

Are Design Patterns Dead? by
Are Design Patterns Dead?Are Design Patterns Dead?
Are Design Patterns Dead?Yoshitaka Kawashima
468 views15 slides
ソフトウェアにおける 複雑さとは何なのか? by
ソフトウェアにおける 複雑さとは何なのか?ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?Yoshitaka Kawashima
1.1K views23 slides
本番障害に至る病 by
本番障害に至る病本番障害に至る病
本番障害に至る病Yoshitaka Kawashima
2.4K views13 slides
システムダウンのひみつ by
システムダウンのひみつシステムダウンのひみつ
システムダウンのひみつYoshitaka Kawashima
2.2K views25 slides
Mavenの真実とウソ by
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソYoshitaka Kawashima
13K views67 slides
アンチフラジャイルの世界 by
アンチフラジャイルの世界アンチフラジャイルの世界
アンチフラジャイルの世界Yoshitaka Kawashima
5.1K views41 slides

More from Yoshitaka Kawashima(20)

ソフトウェアにおける 複雑さとは何なのか? by Yoshitaka Kawashima
ソフトウェアにおける 複雑さとは何なのか?ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima1.1K views
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall by Yoshitaka Kawashima
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima22.8K views
ウォーターフォールとアジャイルのフェアな比較 by Yoshitaka Kawashima
ウォーターフォールとアジャイルのフェアな比較ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima9.5K views
たとえ日本人同士でも必要な異文化理解力 by Yoshitaka Kawashima
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima18.8K views
なぜデータモデリングが重要なのか? by Yoshitaka Kawashima
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima6.2K views
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか by Yoshitaka Kawashima
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima9.7K views
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発 by Yoshitaka Kawashima
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Yoshitaka Kawashima3.3K views

イミュータブルデータモデル(世代編)