LoginSignup
1
1

More than 5 years have passed since last update.

SQLの基本(複数テーブルのデータベース設計)

Last updated at Posted at 2016-04-02

外部キーに制約をつける

SQL
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)

(規則)
1. 1NFであること
2. 部分的関数従属性を持たない

単一列の主キーを持っていればそのテーブルは2NFである
(部分的関数従属性を持つことはないため)

(2NFにする為には)
部分的関数従属性をもつ列を別のテーブルに移す

第3正規形(3NF)

(規則)
1. 2NFであること
2. 推移的関数従属性を持たない

単一列の主キーを持っていればそのテーブルは2NFである
(部分的関数従属性を持つことはないため)

(2NFにする為には)
部分的関数従属性をもつ列を別のテーブルに移す

参考

HeadFirstSQL7章

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1