テーブル設計の目的
- データの冗長性を排除して、使用すすデスクスペースを減らす
- テーブル内のデータの正確さを維持する
- 適切にテーブル分割して、効率的にアクセスできるようにする
データ中身アプローチ(DOA)とは
システム設計の考え方の一つ。まずどういうデータを利用するのかを洗い出す。次にどのようにデータを扱うのかを考えて処理を書き出すアプローチ
データ型
文字列型
- CHAR(固定長文字列) あらかじめ格納するデータの領域が固定で確保される
- VARCHAR(可変長文字列)データに応じて確保されるディスク領域を調整する
- TEXT VARCHARで格納できないサイズの文字列を格納する。*インデックスを作成することができない。
文字列の長さが固定されている場合(電話番号、社員番号)にはCHAR型を用いる。主キーとして用いる 、それ以外はVARCHAR
「TEXTを使う場合」VARCHARでは扱えない大容量のデータを格納する場合(65535以上)、絞り込みに利用しない
整数型 *UNSIGNEDをつけると正の値のみ扱う
- TINYINT -128~127
- SMALLINT -32768~32767
- MEDIAMINT -8388608~8388608
- INT -2147483648~2147483648
- BIGINT それ以上
浮動小数型 実数を扱う。近似値を扱われ、数値が大きくなると正確な値にならない
固定小数型 正確な浮動小数を扱う
DECIMAL(5,2)整数部と少数部を合わせて5桁、少数部が2桁
*データ数が大きいと使用する型によってデータ容量が全く変わってくるので、気をつける必要がある。
①金融系のシステムなどで正確な値が必要な場合はDECIMAL
②WHEREで比較を行うカラムではDECIMAL
③概算地でのデータ容量を抑えたい場合は、FLOAT,DOUBLE
日時型
- DATE 日付を扱う。時刻のない日付のみのデータを挿入したい場合に用いる
- TIME 時刻を扱う、日付のない時刻のみのデータを挿入したい場合に用いる。
- DATETIME 日付と時刻を扱う。正確な日付と時刻を扱いたい時
- TIMESTAMP 日付と時刻を扱う。データ容量がDATETIMEより若干少ない
*TIMESTAMPはレコードの挿入時刻や更新時刻を記述するカラムに使用される。デバックする際に非常に便利
テーブル定義のコツ
- 主キーは必ずつける。主キーには数値型(INT型)または固定長文字列(CHAR)を用いる
- レコードが挿入された時刻を表す(create_at)とレコードが変更された時刻を表す(update_at)は必ずつける
- 文字列型や数値型は大きすぎる値を設定しない
- カラムの制約、デフォルト値、コメントはきちんとする
制約やデフォルト値、コメント文の記述はきちんとする。