感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

第一正規形、第二正規形、第三正規形とは。テーブル間の関係とは。

スポンサーリンク

テーブル間の関係

テーブルとテーブルの関係は(当たり前だけど)以下のようなパターンがある

  • 1対1
  • 1対多
  • 多対多

1対1というのは、テーブルAとテーブルBが両方person_idを主キーにしているような時。
給与テーブルなど、一部アクセス制限をかけたいときなどにも使う可能性がある。
他には具体的には、以下のような場面。

  • データを分割してより高速なクエリを書きたい場合
  • 現時点ではまだわからない値があって、メインテーブルにNULLを含めたくない時
  • データの一部にアクセスしにくくさせたいとき
  • BLOB型のような巨大なデータを別テーブルで持ちたい場合

1対多は、たとえば1人の学生が複数の授業をとっているときなど。
授業テーブルが授業IDで一意になっているとする。
授業テーブルの中には何回も学生IDが出てくる。
「経済学」の授業に「たかし」が受けていて、
「経営学」の授業も「たかし」がいるような状態。
1対多。

多対多というのは、複数の女性が、複数の靴を持つようなとき。
これは、交差テーブルというパターンを使って、
1対多を2つ作ることで解消できる。

第一正規形の規則

  • 第一正規形の列は、原子的な値のみを含む
  • データの繰り返しグループがない

第一正規形のすべての行は一意になる。
一意にするために一つの列だけでやるとは限らず、複合キーという、複数の列で一意に判断できるようにしてもいい。
複合キーとは、複数の列から構成される主キーで、一意のキーを作成するものである。

主キーの規則

主キーは各レコードを一意に識別するために使われる。
主キーのルールは以下のとおり。

  • 主キーはNULLにできない
  • 主キーはレコード挿入時に値を与える必要がある
  • 主キーは簡潔でなければならない
  • 主キーの値は変更できない

関数従属しているとはどういうことか?
関数従属していることはfunctionally dependentともいい、列Aの値が修正されると列Bのデータも変更されなければいけないときのことを指す。
関数従属を表す記号は以下のように書ける。

TABLE.x ->; TABLE.y
person.name ->; person_initials
member.country ->; member.city

関数従属性には

  • 部分的関数従属性
  • 推移的関数従属性

がある。
部分的関数従属性とは、主キーではない列が、複合主キーを構成する列の一部に従属しているが、複合主キーを構成する「列全体」には従属していないことを意味する。
推移的関数従属性とは、「キーではない列のどれか」が、「他のキーでない列」のどれかと関連を持つ場合を言う。

第二正規形とは

第二正規形の条件は以下の2つ

  • 第一正規形の規則を満たしていること
  • 部分的関数従属性を持たないこと

第三正規形とは

第三正規形の条件は以下の2つ

  • 第二正規形を満たしていること
  • 推移的従属性を持たないこと

勉強した本

Head First SQL ―頭とからだで覚えるSQLの基本

Head First SQL ―頭とからだで覚えるSQLの基本

感謝のプログラミング

今回で感謝のプログラミングは【537時間目】
10000時間まで、あと【9463時間】