データモデリングの方針設計について考えてみた

データモデリングを複数人で実施する場合、方針を決める必要がある。
そのためにはまず「何についての方針を決める必要があるか」を洗い出す必要がある。
ということで、やってみた。なお、網羅性は考慮できていない。

テーブル

正規化
  • 正規化の方針
    • 「第三正規化まで」など
  • 非正規化の方針
    • 統合:「両方向必須の1対多で、性能要件ありの場合は統合する」など
    • 分割:「データ量のために性能要件が満たせない場合は水平分割する」など
    • 集計:「性能要件があり、ある1時点の集計結果で要件が満たせる場合は集計表を作成する」など
  • ビューの使用方針
カラム
  • 全てのテーブルに持たせる必要があるカラム
    • 監査項目や期間化、多言語化などのためのカラム
  • 導出項目を含ませる際の方針
    • 1回の導出時間×回数が大きい(※定量的な値が必要)場合など
  • テーブル間の重複項目含ませる場合の方針
    • 「購入者名のような、参照先のマスタの値が変化しても変化してほしくない履歴のみ」など
  • 代替キーの作成方針
    • 「単項目の候補キーが存在しない場合は代替キーを定義する」など
データ

制約

  • 制約付与の方針
    • 主キー:「一意、必須、永続性を満たすカラムがある場合はそれを主キーとする」など
    • NOT NULL制約
    • 参照整合性制約
    • CHECK制約:「CHECK制約は使用しない」など

インデックス

  • インデックス付与の方針
    • 「検索条件に使用される項目には必ず付与する」など

権限

  • オブジェクト権限による、オブジェクト単位の権限
  • ビューによる、カラム単位の権限

その他共通事項

参考文献

プロとしてのデータモデリング入門 (Oracle現場主義)

プロとしてのデータモデリング入門 (Oracle現場主義)