現在システムの設計をしていて、色々書籍を読みながらインプットしています。
そこで、データベース設計時に気をつけていくことを箇条書きで整理します。
避けていくこと
・カラム名が省略形
・NULL値が入っているカラム
・マジックナンバー付きのカラム名
・カラム数の多い巨大なテーブル
・似たような用途のカラムが多い
・NULL値が多い
・テーブルの関係性がわかりにくい
・外部キー制約がない
・カラム名に一貫性がない
わかりやすいデータベース
・名前を省略しない
・適切な型、桁数を指定する
・制約をきちんと使う
・かつてはテーブル名やカラム名に文字数制限があったが、今はない。意図を明確にするため、省略形を使わない方がわかりやすい。(実際には省略形は結構みますね。。)
・例えば日付データに対し文字列型を指定して入れることはできるが、不正なデータが入ってしまう可能性がある。また、数値のカラムで明らかに不適切な桁数まで入力できるよう許容してしまうと、不正なデータが入る余地が出てしまう。
それを防ぐためにプログラム側で条件指定したり例外処理を入れると複雑になるので、適切な型や桁数を指定することでシンプルに保てるようにする
正規化の鍵を握る3つの制約
1)NOT NULL制約
2)UNIQUE(一意性)制約
3)外部キー制約
・NULLは「未知」であり、「既知」の事実を入れるデータベースにNULLを持ち込むのはそもそもおきて破りで、NULLを含ませないのが設計の基本である。
・全てのカラムをNOT NULLにして、どうしてもNULLが必要な場合にテーブルを分ける形で設計していくと正規化されていく。
・UNIQUEは重複したデータの記録を防ぐ仕組み。意図してなく重複したデータがあると不整合の原因になるので、取り除く必要がある。
・主キー制約
どのカラムの組み合わせが一意性になるかを気にかけると、データの重複などを避けられ自然と正規化される設計になるといえる
UNIQUE制約とNOT NULL制約を徹底させれば、テーブルは正規化され分割されていく。
関連性のあるテーブルについては、外部キー制約をつけてテーブル間の関係を保証させることで、データの整合性を確保させる。
コメント