Contents
正規化とは?
正確な定義は難しいですが、8割ぐらいあっている定義としては「適切なテーブルに分割すること」です。※ただし正確ではないようです。
第一正規化
第一正規形の定義はスカラ値の原則 1つのセルには1つの値のみ。※この性質のことを関数従属性という(1対1対応のこと)。
これが守られていないのが、下記のようなテーブル
社員ID | 社員名 | 子 |
---|---|---|
001 | 山田 | 太郎 次郎 |
002 | 鈴木 | 太郎 次郎 三郎 |
これを第一正規化した場合、下記のようになる。
正規化パターン1
社員ID | 社員名 | 子1 | 子2 | 子3 |
---|---|---|---|---|
001 | 山田 | 太郎 | 次郎 | |
002 | 鈴木 | 太郎 | 次郎 | 三郎 |
正規化パターン2 推奨
社員ID | 社員名 | 子 |
---|---|---|
001 | 山田 | 太郎 |
001 | 山田 | 次郎 |
※データを一部省略
SQLネタ EXTRACT
日付の処理に関して以前このエントリーで書きましたが、DATE_FORMATなどとやらなくてもEXTRACTという関数を使えば年や月といった値を取り出すことができるようです。
ordersテーブルからorder_dateの年月を取得するとき。
1 |
SELECT EXTRACT(YEAR_MONTH from order_date) FROM orders |
月ごとの集計とかこれを使ってGROUP BYすればよかったんですね。DATE_FORMATよりもスピードも若干早いようです。