データモデルの基本
エンティティを抽出するために要求を文章に起こして、動詞や名詞に下線を引くとエンティティや属性の候補となる(リソース、イベントという見方もできそう)。 必ず一緒に使われる、必ず一緒に変更されるなど、データ間につながりがあるものを属性として持つエンティティを見出す
1つのエンティティの中で属性間に従属関係がある場合は構造の複雑さを含んでいる証拠なので分割対象
エンティティの単一性・カテゴリを検討する中で異なるエンティティとみなしたほうが良いと判断したものは、スーパータイプとサブタイプのエンティティで表現できる
e.g. 社員 ⇢ 現役社員、退職社員
退職されたことが退職社員に残り社員にもデータが残る、ただし現役社員からは物理削除される
http://www.plantuml.com/plantuml/svg/SoWkIImgAStDuKhDAyaigLHulcJVqyaB5Qgv80nF5ovTNIZxQS-kfnrjx_TqFE_VztJlJWN_88MN3Gql6hU_tzF9LGip02A9rPXd6_gVJkZbUZvb_jETMvxDwNWsVIbS7zGeJ7srKAP2JOskRduDYlceKYX6S3cavgK0_GK0#.png
エンティティをリソースとイベントに分ける
エンティティが日時属性を持てばイベントでありそうでなければリソース
要求のための文章で出てきた動詞がイベントで名詞がリソースにあんることが多い
イベントは日時属性を1つだけもつ
イベントは定義から事業活動の記録、イベントの発生した時刻が属性として必ず1つ存在(複数出てきたら怪しめ
データベース設計はデータの重複や矛盾をなくすために正規化することがポイントというのは、日時属性を1つだけ持たせることで結果的に正規形の原則を満たすことになる、「One Fact in One Place」
データのライフサイクルに着目
e.g. 社員が所属していなくても新しい部門を作成できる, 新しい社員は必ずしも部門に所属していない
http://www.plantuml.com/plantuml/svg/SoWkIImgAStDuKhDAyaigLHulcJVqyaB5Qgv80nF5ovTNQwd4tgVTlPoFMvU-BXvp-FcrO-R5ZrkxdpSlEPnqqwkbyqhNavh02giXPa14L6eHaZfwaBPG9E0wg2MrDJevbT3LNCvfEQb0Dq10000#.png
http://www.plantuml.com/plantuml/svg/SoWkIImgAStDuKhDAyaigLHulcJVqyaB5Qgv80nF5ovTNQwd4tgVTlPoFMvU-BXvp-FcrO-R5ZrkxdpSlEPnqqwkMfZMPvqDJpVE0sfzsRpYvRG6JnTaCn3A8B9mPM1PA1je3r0Tr0arDRhvrL13kQ1cr-RhrjH0JU1oICrB0ReS0000#.png
もしここに配属の履歴をしたいという要求があればイベントエンティティが登場する。これである社員の所属履歴がおさえられる
http://www.plantuml.com/plantuml/svg/SoWkIImgAStDuKhDAyaigLHulcJVqyaB5Qgv80nF5ovTNQwd4tgVTlPoFMvU-BXvp-FcrO-R5ZrkxdpSlEPnqqwkMfZMPvqDJpVE0sfzsRpYvRG6JnTaCn3ANhRsGfH1661PJ2rGsMVJbpwRsOJG3547jmDPCz2HG7LGzzVKwEPNGrt41NLORRvkJGtK12Hr88KGow06eGawfEQb00C80000#.png
更新に着目してエンティティを分類したり更新操作自体を排除したりしてエンティティを洗練させる