主キーは、行を一つに決める
注文表では注文IDを主キーにします。同じ注文IDが二行にあっては一件に決まりません。
また主キーにはNULL(値がない状態)を許しません。顧客表の主キーは顧客IDです。
氏名は同姓同名や改姓があるため、この例では主キーにしません。主キーは一列とは限らず、複数列の組合せで構成する場合もあります。
| 表・項目 | この例の役割 | 重複 |
|---|---|---|
| 顧客表・顧客ID | 顧客を識別する主キー | 不可 |
| 注文表・注文ID | 注文を識別する主キー | 不可 |
| 注文表・顧客ID | 顧客表を参照する外部キー | 可:一人で複数注文 |
外部キーは、参照先とのつながり
顧客表にC01=あおい、C02=れんを登録します。注文表の顧客IDは、顧客表の顧客IDを参照する外部キーです。
C01がO101とO103を注文しても問題ありません。注文表では顧客IDの重複が許され、一人の顧客から複数の注文へつながる一対多の関係になります。
存在しない参照先を、制約で防ぐ
この例はすべての注文に登録済み顧客を必須とします。外部キー制約を設定すれば、顧客表に存在しないC99への参照を防げます。
参照中の顧客を削除したときの動作は、制約の設定によって異なります。常に注文が自動削除されると決めつけないこと。
NULLを許す設計かどうかも別途決めます。