イミュータブルデータモデル(世代編)
-
Upload
yoshitka-kawashima -
Category
Software
-
view
3.512 -
download
2
Transcript of イミュータブルデータモデル(世代編)
イミュータブルデータモデルジェネレーションズ(世代編)
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 EntityA AttributeV ValueT Transaction
ノーデプロイ分散ジョブ実行環境JobStreamer
job-streamer.github.io
近日発表
そんなDatomicを使ったプロダクトを作っております…
よろしくお願いします!