外部キーに制約をつける
CREATE TABLE テーブル名 (
列名 データ型 NOT NULL AUTO_INCREMENT PRIMARY KEY,
列名 データ型 [NOT NULL],
列名(外部キー) 型 [NOT NULL],
[CONSTRAINT テーブル名(参照元)_列名(参照元)_FK]
FOREIGN KEY (列名(外部キー))
REFERENSES テーブル名(参照元) 列名(参照元)
)
CREATE TABLE interests (
int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
interest VERCHAR [NOT NULL],
contact_id INT [NOT NULL],
[CONSTRAINT my_contact_contact_id_FK]
FOREIGN KEY (contact_id)
REFERENSES my_contact contact_id
)
外部キー制約(FOREIN KEY)
参照整合性(外部キーに挿入できるのは、そのキーの参照元のテーブルに存在している値のみ)を持ち
主キー側のテーブルで行の削除や主キー値の変更を試みた場合エラーになる
CONSTRAINT my_contact_contact_id_FK
必須ではない
後から取り消す場合に利用する
関数従属
列Aの値が修正されると列Bも変更しなければならない時
列Bは列Aに関係従属している
省略記法
テーブル名.列名A ->; テーブル名.列名B
(例:initials列はname列に従属している)
super_heroes.name ->; super_heroes.initials
部分的関数従属性
主キーではない列が、複合主キーに従属しているが、
複合主キーを構成する列全体には従属していないことを部分的関数従属性という
(複合主キーの一部分に従属していること)
推移的関数従属性
主キーでない列のどれかが主キーでない列のどれかに従属していることを推移的関数従属性があるという
第2正規形(2NF)
(規則)
- 1NFであること
- 部分的関数従属性を持たない
単一列の主キーを持っていればそのテーブルは2NFである
(部分的関数従属性を持つことはないため)
(2NFにする為には)
部分的関数従属性をもつ列を別のテーブルに移す
第3正規形(3NF)
(規則)
- 2NFであること
- 推移的関数従属性を持たない
単一列の主キーを持っていればそのテーブルは2NFである
(部分的関数従属性を持つことはないため)
(2NFにする為には)
部分的関数従属性をもつ列を別のテーブルに移す
参考
HeadFirstSQL7章