毎週金曜の定時後に弊社でアーキ部なるものが開催されています(✌'ω' ✌)
スピードラーニング的に@kawasimaさんのお話を聞く会ですが、今週はテーブル設計がテーマでした!
この記事がすごく良かったので、触発されてブログ書く!!!
developer.hatenastaff.com
お題
↓のお題が出て、テーブル設計を考えてみるはなし。
要求仕様は以下のとおり。 ・宿の部屋は、シングルやツインのような部屋タイプが設定できます。 ・宿側で宿泊プランを設定できます。宿泊プランは適用される日付が設定できます。 ・プランには複数の部屋タイプが含まれることがあります。 ・宿側でプラン・部屋タイプ・宿泊日ごとに宿泊費の設定ができます。 ・カスタマはプラン・部屋タイプ・宿泊日を指定して宿泊予約ができます。 ・予約は会員でも非会員でも可能です。 ・また、会員・非会員に関わらず、宿をお気に入りに登録できます。 ・予約のキャンセルに関して、プランごとにキャンセル料のルールを設定できます。 ・キャンセルのルールは、宿泊の○日前までは宿泊料の×%の支払いといったものです。 ・売上集計のため、宿泊実績・キャンセル実績(請求)と、支払いの実績をマッチング出来なくてはいけません。 ・様々な条件から宿の検索ができますが、空きのないプランは検索結果に表示されません。
画像がすごく多い記事になった。。。
やってみよう!
Step1 エンティティの抽出
ふむ。。。
要求仕様の動詞と名詞を抜き出すとこういう感じかな。。。(動詞と名詞の区別難しい!!!)
あとは、現段階でわかる属性とか候補キーについても書いていこう。。。
要求仕様は以下のとおり。 ・"宿(名)"の"部屋(名)"は、シングルやツインのような"部屋タイプ(名)"が設定できます。 ・宿側で"宿泊プラン(名)"を設定できます。宿泊プランは適用される日付が設定できます。 ・プランには複数の部屋タイプが含まれることがあります。 ・宿側でプラン・部屋タイプ・宿泊日ごとに宿泊費の設定ができます。( ˊ࿁ˋ ) ᐝ(このあたりはプランの項目になる気がする。。。) ・"カスタマ(名)"はプラン・部屋タイプ・宿泊日を指定して宿泊予約ができます。( ˊ࿁ˋ ) ᐝ(プランとカスタマを結びつける感じかな。。。) ・"予約(動)"は会員でも非会員でも可能です。( ˊ࿁ˋ ) ᐝ(会員と非会員はカスタマに含まれる。) ・また、会員・非会員に関わらず、宿を"お気に入りに登録(動)"できます。 ・予約のキャンセルに関して、プランごとにキャンセル料の"ルール(名)"を設定できます。( ˊ࿁ˋ ) ᐝ(キャンセルは予約したものの種類になるかな。。。) ・キャンセルのルールは、宿泊の○日前までは宿泊料の×%の支払いといったものです。 ・売上集計のため、"宿泊実績・キャンセル実績(請求)(名)"と、"支払い(名)"の実績をマッチング出来なくてはいけません。 ・様々な条件から宿の検索ができますが、空きのないプランは検索結果に表示されません。( ˊ࿁ˋ ) ᐝ(プランと予約の関連付けから計算する感じかな。。)
これをエンティティとして書き出すとこんな感じかな?
Step2 エンティティの分類
こんな感じかな?
宿泊プランは日時(適用日時)があるからイベントにしてみたけど、なんか違和感があるな。。。
Step3 イベントエンティティにはひとつの日付しかもたないようにする
これはもう出来ているから飛ばします。
Step4 リソースに隠されたイベントを抽出する
更新日付はないので、これも飛ばします。
Step5 非依存型リレーションシップを交差エンティティにする
ざっとリレーションを引いてみるとこんな感じかな。
サブタイプって、物理設計するときにはどうなるんだろ。。。?
サブタイプなど、リレーションの説明はココに載ってる。
ITエンジニアのスキル向上ゼミナール - 【初級】ゼロから学ぶDOA 第2回:ITpro
何がリソースで何がイベントわかりやすいように、リソースにはエンティティのあとにR、イベントにはテーブル名のあとにEをつけてみた。
リソース同士の非依存リレーションをなくすためにタイプ設定エンティティを追加しました。
( ˊ࿁ˋ ) ᐝ(やっぱり宿泊プランがイベントであることに違和感。。。)
( ˊ࿁ˋ ) ᐝ(Cacooでデータモデル書くの辛い感じあるし、みなさんさらっとテーブル設計するときに使っているツール教えてください。。。)
リソース同士の非依存リレーションも時系列を無視したイベントも無いので、これで完成(✌'ω' ✌)
やってみよう2
スライドの参考文献の楽々ERDレッスンではレシートを使ってデータモデルの練習をしていたので、それもやってみる。
この前の飲み会のレシート!
Step1 エンティティの抽出
Step2 エンティティの分類
Step1とStep2を一気にやっちゃう。
Step3 イベントエンティティにはひとつの日付しかもたないようにする
Step4 リソースに隠されたイベントを抽出する
これは出来ているのでスキップ
Step5 非依存型リレーションシップを交差エンティティにする
リレーションをつけてみた。
さらっとつけただけだけど、時系列が反対になっているところもないのでこれで完成(✌'ω' ✌)
( ˊ࿁ˋ ) ᐝ(かなりサッパリしたテーブル設計になったな。。。)
参考
スライドにも載っている参考文献!
持っていて読んだけどわかりやすい!!
- 作者: (株)スターロジック羽生章洋
- 出版社/メーカー: 翔泳社
- 発売日: 2006/04/18
- メディア: 単行本(ソフトカバー)
- 購入: 72人 クリック: 940回
- この商品を含むブログ (120件) を見る