気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
さて、今回から本格的な設計に入っていきたいと思います。
まずは、システムが扱う情報を整理し、データストアの構造を決定する作業から始めたいと
思います。

「Google App Engine」の場合、データを保存する先がリレーショナルデータベースでは
ないので、最終的には「Google App Engine」の作法に則った設計をしなければ
いけないのですが、まずはそれを意識せず、リレーショナルデータベースを想定した
エンティティ分析を行ってみたいと思います。

エンティティ分析
このシステムで中心的なエンティティとなるのは、言うまでもなく「物品」になります。
今のところ、物品の属性は、以下の9つと考えています。

[物品]
   種類
   置き場所
   物品名
   購入価格
   購入した日
   数量
   単位
   賞味期限
   その他特記事項

(前回の記事から「単位」と「種類」を追加しました。)

管理する物品によって、属性はまちまち(電気製品だと、メーカーなどが欲しいし、食品だと、産地とかが欲しい)
なのですが、扱う範囲を「家庭内の物品」と広くしているので、その一つ一つを取り入れると大変なことになって
しまいます。

ですので、物品の種類毎の特殊な情報は、「その他特記事項」に入力してもらうように考えています。
ただ、「賞味期限」だけは、使用頻度が高いと考えましたので、属性に入れました。

さて、次に上記を正規化して他のエンティティを抽出する作業を行いました。
属性「種類」と「置き場所」は他のエンティティに分割できるので、
正規化して以下ようにしました。また、同時にID属性を追加しました。

[物品]
   物品CD
   種別CD
   管理場所CD
   物品名
   購入価格
   購入した日
   数量
   単位
   賞味期限
   その他特記事項

[物品種別]
   種別CD
   種別名
   備考

[管理場所]
   管理場所CD
   管理場所名
   備考

今回アプリケーションは不特定多数のユーザに使って頂くWebサービスとして提供するので、
物品の情報が関係ないユーザに見えてしまうことがあってはいけません。

そのため、「台帳」というエンティティを追加し、他のエンティティはそれに属する形にします。
そして、台帳を利用できるユーザを限定するための「台帳ユーザ管理」エンティティを追加します。
システムのユーザに該当する「ユーザ」エンティティも追加します。
クラス図にすると以下のようになります。



現時点での最終的なエンティティ構成は以下のようになりました。

[台帳]
   台帳CD
   台帳名
   作成日時
   作成ユーザ

[台帳ユーザ管理]
   台帳CD
   ユーザ ※ユーザに関してはGAEで管理されるのでエンティティ定義はしません。

[物品]
   台帳CD
   物品CD
   種別CD
   管理場所CD
   物品名
   購入価格
   購入した日
   数量
   単位
   賞味期限
   その他特記事項
   登録日時
   登録ユーザ
   更新日時
   更新ユーザ

[物品種別]
   台帳CD
   種別CD
   種別名
   備考

[管理場所]
   台帳CD
   管理場所CD
   管理場所名
   備考

作成日時など管理用の属性も追加しました。

物品種別は全てのユーザ間で共有しても良い気がしますが、
固有の種別を追加したいニーズは必ず出てくると思いましたので、
台帳に属するようにしました。

基本的な種別に関しては台帳作成時に初期投入されるように工夫した方が良さそうです。

次回は、これをGAEのデータストアの規則に則って、データクラスの定義をしてみたいと思います。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/51-d619bacb

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。