tanihito’s blog

デジタル・新規事業開発・健康など、興味のあることについてつらつらと書いてきます。

理論で学ぶ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) 非キー属性から候補キーへの関数従属性を取り除く