理論で学ぶSQL再入門
Web+DBで連載している「理論で学ぶSQL再入門」が、大学のDB工学の授業の復習になって面白いです。最近はAPI経由でデータを取ることが多く、SQLを直接使うことは減りましたが、やはりSQLやDBの知識は必要ですね。
- SQLにおける「リレーション」とは、テーブルのこと。
relation = heading + body heading = 属性の名称とデータ型のペアの集合 Ex. ({国名:文字列}, {国番号: 整数}) body = 属性値のtupleの集合 Ex. (("日本", 81), ("イギリス", 44), ("アメリカ", 1)
- SELECTとは、直積・制限・射影を同時に行う操作。
SELECT t1.c1, t2.c2 FROM t1 INNER JOIN t2 WHERE t1.c4 = t2.c5 => t1とt2の直積に対して「t1.c4 = t2.c5」という条件の制限を適用し、さらにその結果からt1c1, t2.c2というカラムだけ出力する射影を行う。
- SQLとリレーショナルモデルの違い:SQLには重複・順序・更新・トランザクション・NULLがあるが、リレーショナルモデルにはない。
- NULLはできる限り使わないようにする。NULLを使うと以下の問題が発生する。
- TRUE, FALSE, NULLという3つの論理値を処理する必要があり、評価式が複雑になる
- 情報が不自然に丸められてしまう。たとえば、ある人の年齢がわからなくても風貌から「30歳だろうか?」と推測できるが、NULLにするとその情報が全てなくなる。
- 正規化
正規形 | 正規化の方法 |
第1正規形 (1NF) | 配列などを取り除き、スカラ値のみにする |
第2正規形 (2NF) | 候補キーから非キー属性への関数従属性を取り除く |
第3正規形 (3NF) | 非キー属性から非キー属性への関数従属性を取り除く |
ボイスコッド正規形 (BCNF) | 非キー属性から候補キーへの関数従属性を取り除く |