DB設計する上で気をつけること
今回はデータベース設計する上で気をつけることについて書いていこうと思います。
おそらく1分ほどで読める内容になっているので、気軽に読んでください。
プログラムがわかりにくく、複雑なっている原因がデータベース設計やデータ内容にあることはあります。
例えば、、
- どこにどのようなデータが入っているか推測しにくい
- データが入っていないカラムが多い
- データの重複
- 1つのカラムがさまざまな目的で使われる
- テーブル間の関係がはっきりしない
このようにデータの整理に失敗しているデータベースでは、データの妥当性や例外的なデータを扱うための前処理や後処理などにif文が増えて、プログラムが複雑になりがちです。
データベース設計をする上でどうすればいいのか気をつけるポイントについてまとめようと思います。
まずは基本に立ち返りましょう
データベース設計する際に何に気をつければいいのか、下記に基本的なことをまとめてみました。
今回は主に3つの点についてサラッと確認できるようになればいいなと思います。
- 名前を省略しない
- 適切なデータ型を使う
- 制約をきちんと使う
名前を省略しない
まずはテーブル名やカラム名を省略するのをやめましょう。以前はテーブル名やカラム名の文字数に厳しい制限があったそうですが、現在では緩和されています。つまり単語を2つ3つ組み合わせても問題ありません。テーブル名やカラム名の意図がわかるように名前をつけましょう。
適切なデータ型を使う
適切なデータ型の指定は不正なデータを防ぐ基本になります。
カラムはデータ型と桁数を宣言します。
それぞれの変数や値のデータ型に応じて宣言しましょう。
例えば、数値データは数値型を、日付データは日付型を使うようにします。
CREATE TABLE example_table (
id INT AUTO_INCREMENT PRIMARY KEY,
numeric_value NUMERIC(10, 2),
date_value DATE
);
ここで、numeric_valueは数値型を、date_valueは日付型を表しています。
また、idは主キーとして自動連番が割り当てられるように設定されています。
データベース設計をする上で気をつけるデータ型が文字列型です。
文字列型ではどのようなデータも入力できてしまうで不正なデータが紛れ込みやすくなります。また桁数も適切に制限をかけましょう。何でもかんでもVARCHARA(2000)で済ませるのではなく、適切な桁数を宣言することがプログラムをシンプルに保つことにつながります。
制約をきちんと使う
制約とはテーブルに格納するデータの種類を限定するための方法です。
型だけでは足りない制御の制約を加えることでデータベースに無効なデータが入ることを阻止できます。
どんな制約があるのだろう?
データベースの制約について簡単にまとめてみたので、「具体的に制約とはなんだ!?」って思った方は下記の内容を読んでみてください。
NOT NULL制約
「NOT NULL制約」とはデータベースのカラムにNULLが含まれない制約を付与することを指します。
NULLとは何のデータも含まれない未知なものです。
そのためNULLは有効なデータではないので、もし検索状態の対象とするカラムにNULL値があると、意図した結果と異なる結果になる可能性があります。
もしSQL文やプログラムでNULLを使うのであれば、そのためのコードが複雑になる場合があります。
そのため、NULLを使えなくするための制約が「NOT NULL制約」になります。
一意性制約
データを正しく記録するためのテーブル設計で、「NOT NULL制約」と並んで重要とされるのが「一意性制約」です。
「一意性制約」は重複したデータの記録を防ぐ仕組みです。つまり一意性制約は、データベースにおいて、特定のカラムや行に対して、その値が一意であることを保証するための制約のことです。
一意であることとは、特定のカラムや行に対して、その値が他の行やカラムと重複しないことを意味します。例えば、身分証明書の番号のような情報は一人一人異なるため、それぞれが一意的な値を持つことが期待されます。
そのため、そのカラムに対して一意性制約を設定することで、同じ番号が複数回登録されないようにすることができます。これにより、重複するデータが挿入されることを防ぐことができます。
外部キー制約
「外部キー制約」は、データベースにおいて、テーブル間の関係を定義するための制約です。
外部キーは他テーブルの主キーを参照し、外部キーを持つテーブルからは参照先のテーブルのデータへのアクセスが可能です。
外部キー制約は、データの整合性を確保するために用いられます。
重要となるのが、テーブル間の関係を明確にすることです。テーブルを分割しただけでは、データとデータの関係の意味が失われます。正しくデータを再現するためには、データ間の関係を強制する必要があります。その強制方法が外部キー制約です。関連したデータを別のテーブルで持つ場合、必ず外部キー制約でその関連付けを保証します。
最後に
今回書かれていることは基本的なことですが、シンプルなデータベース設計をするには大切なことだと思います。
この記事が基本に立ち返るきっかけになったら嬉しいです。
最後まで読んでいただきありがとうございました。
Discussion