Suche senden
Hochladen
イミュータブルデータモデル(世代編)
•
90 gefällt mir
•
38,579 views
Yoshitaka Kawashima
Folgen
第1回 しょぼべん ( http://connpass.com/event/10849/ ) で話しした、イミュータブルデータモデル(世代編)です。
Weniger lesen
Mehr lesen
Software
Melden
Teilen
Melden
Teilen
1 von 16
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
Empfohlen
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
Mikiya Okuno
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
例外設計における大罪
例外設計における大罪
Takuto Wada
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
こわくない Git
こわくない Git
Kota Saito
データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
Takao Sumitomo
Weitere ähnliche Inhalte
Was ist angesagt?
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
Mikiya Okuno
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
例外設計における大罪
例外設計における大罪
Takuto Wada
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
こわくない Git
こわくない Git
Kota Saito
データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
Was ist angesagt?
(20)
イベント・ソーシングを知る
イベント・ソーシングを知る
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
例外設計における大罪
例外設計における大罪
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Redisの特徴と活用方法について
Redisの特徴と活用方法について
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
こわくない Git
こわくない Git
データベース設計徹底指南
データベース設計徹底指南
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
Andere mochten auch
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
Takao Sumitomo
Droid kaigiプレゼン
Droid kaigiプレゼン
Suguru Oho
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
kyon mm
データモデルは時空を越える
データモデルは時空を越える
terahide
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
Shinichi Kozake
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
Java web application testing
Java web application testing
Tokuhiro Matsuno
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
Takahiro YAMADA
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Yuki Anzai
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
YUKI YAMAGUCHI
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Shuji Kikuchi
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4
Fabien Potencier
良いコードとは
良いコードとは
Nobuyuki Matsui
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのこと
Yoshitaka Kawashima
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
bitter_fox
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略
yoku0825
Andere mochten auch
(20)
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
Droid kaigiプレゼン
Droid kaigiプレゼン
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
データモデルは時空を越える
データモデルは時空を越える
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
Java web application testing
Java web application testing
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4
良いコードとは
良いコードとは
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのこと
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略
Mehr von Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
Are Design Patterns Dead?
Are Design Patterns Dead?
Yoshitaka Kawashima
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
本番障害に至る病
本番障害に至る病
Yoshitaka Kawashima
システムダウンのひみつ
システムダウンのひみつ
Yoshitaka Kawashima
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
アンチフラジャイルの世界
アンチフラジャイルの世界
Yoshitaka Kawashima
Atomic Architecture
Atomic Architecture
Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
How to find tech books
How to find tech books
Yoshitaka Kawashima
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
Yoshitaka Kawashima
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
Antifragile Clojure
Antifragile Clojure
Yoshitaka Kawashima
Boilerplate vs Magic
Boilerplate vs Magic
Yoshitaka Kawashima
既婚プログラマの時間捻出術
既婚プログラマの時間捻出術
Yoshitaka Kawashima
Mehr von Yoshitaka Kawashima
(20)
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Are Design Patterns Dead?
Are Design Patterns Dead?
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
本番障害に至る病
本番障害に至る病
システムダウンのひみつ
システムダウンのひみつ
Mavenの真実とウソ
Mavenの真実とウソ
アンチフラジャイルの世界
アンチフラジャイルの世界
Atomic Architecture
Atomic Architecture
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
How to find tech books
How to find tech books
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
Antifragile Clojure
Antifragile Clojure
Boilerplate vs Magic
Boilerplate vs Magic
既婚プログラマの時間捻出術
既婚プログラマの時間捻出術
イミュータブルデータモデル(世代編)
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を使ったプロダクトを作っております… よろしくお願いします!
Jetzt herunterladen