7章 複数テーブルのデータベース設計

ここ辺りから、命令文ではなく概念の話になってきます。
言いたいことは概ねわかるつもりなんですけど、飲み込んだ気がしないのが残念です。

スキーマ
データベース内のデータの記述、他のすべての関連するオブジェクト、およびその接続方法。

1対1関係
親テーブルのちょうど1行が、子テーブルの1行に関連付けられる。

この関係なら、別離せずにメインテーブルにあっても問題ようです。
ただ、その部分だけ整備未然だったりアクセス制限を設けたかったりデータが巨大だったりする場合は、別離が有効な場合があるみたいです。

1対多関係
あるテーブルの1行が2番目のテーブルの複数行と合致可能ですが、2番目のテーブルの1行が合致するのは最初のテーブルの1行だけ。

メインの名簿テーブルあり、職業テーブルに職業リストがあるとします。
名簿テーブルの個人は一つの職業を持ち、職業テーブルの該当する職業IDにリンクします。
名簿テーブルの職業列には、同じIDが並び得るでしょう。
職業テーブルの職業の一つは、名簿テーブルの複数の人々とリンクするということです。
名簿テーブルの個人の行から職業テーブルの職業行には一本の矢印でつながります。
しかし、職業テーブルの職業行から見れば、複数の個人の行へ矢印が伸び得るわけです。

多対多関係
2つのテーブルが結合テーブルによって接続され、最初のテーブルの複数行が2番目のテーブルの複数行に合致し、その逆も成り立ちます。

職業ではなく趣味で考えると、個人は複数の趣味を持ち得ることがわかります。
二つのテーブルの間に統合テーブルを設けます。その中身は…こんな感じですかね。
名簿ID01 趣味ID05
名簿ID01 趣味ID07
名簿ID02 趣味ID05
名簿ID02 趣味ID06
名簿テーブルと統合テーブルは1対多関係、趣味テーブルと統合テーブルも1対多関係です。

第1正規形
列は原始的な値のみを含み、データの繰り返しグループは認められません。

一つの趣味列の欄の中に複数の趣味を書いたり、趣味列を複数設けて個別に書いて、ってのはだめだということです。

推移的関数従属性
キーではない列がキーでない他の列に関係していることを意味します。

第2正規形
テーブルが1NFであり部分的関数従属性を持たない場合、2NFになります。

第3正規形
テーブルが2NFであり推移的従属性を持たない場合、3NFになります。

外部キー
別のテーブルの主キーを参照する、あるテーブルの列。

復号キー
一意のキー値を与える複数の列から構成される主キー。