なぜ住所変更が1か所で済むのか
注文の記録をExcelで管理すると、1行にお客様の名前や住所まで全部を書き込みがちです。同じお客様が10回注文すると住所は10か所にコピーされ、直し漏れの危険が生まれます。データベースは逆に、表を分けて番号で参照し合います。
注文管理のデータベースをのぞいてみる
| カラム | PK | NK | FK | NN | TYPE |
|---|---|---|---|---|---|
| idお客様の 番号 | uuid | ||||
| nameお名前 | text | ||||
| emailメールア ドレス | text |
| カラム | PK | NK | FK | NN | TYPE |
|---|---|---|---|---|---|
| id注文の番 号 | uuid | ||||
| custom er_idどのお客 様か | 不明参照先の行を削除したとき 削除動作の情報がありません。CASCADEやNO ACTIONとは推測しません。 | uuid | |||
| ordere d_at注文した 日時 | timestamptz |
| カラム | PK | NK | FK | NN | TYPE |
|---|---|---|---|---|---|
| id商品の番 号 | uuid | ||||
| name商品名 | text | ||||
| price価格 | numeric |
| カラム | PK | NK | FK | NN | TYPE |
|---|---|---|---|---|---|
| id明細の番 号 | uuid | ||||
| order_ idどの注文 か | 不明参照先の行を削除したとき 削除動作の情報がありません。CASCADEやNO ACTIONとは推測しません。 | uuid | |||
| produc t_idどの商品 か | 不明参照先の行を削除したとき 削除動作の情報がありません。CASCADEやNO ACTIONとは推測しません。 | uuid | |||
| quanti ty個数 | integer |
テーブル・列・関係をクリックすると、説明と関連がここに表示されます。
この図をテキストで読む
ER図「注文管理データベースの4つの表」。テーブル4個、関係3本。 【テーブル】 - customers(お客様名簿、列3個、主キー: id(お客様の番号)、列: id(お客様の番号), name(お名前), email(メールアドレス)) - orders(注文の台帳、列3個、主キー: id(注文の番号)、列: id(注文の番号), customer_id(どのお客様か), ordered_at(注文した日時)) - products(商品カタログ、列3個、主キー: id(商品の番号)、列: id(商品の番号), name(商品名), price(価格)) - order_items(注文の明細、列4個、主キー: id(明細の番号)、列: id(明細の番号), order_id(どの注文か), product_id(どの商品か), quantity(個数)) 【関係】 - orders.customer_id → customers.id(1以上対1): 注文した人 - order_items.order_id → orders.id(1以上対1): どの注文の明細か - order_items.product_id → products.id(1以上対1): どの商品か
Excelの表と何が違う?
Excelには「他の表の行しか指せない」「重複登録を拒否する」といった約束を強制する仕組みがありません。リレーショナルデータベースは約束を自身で見張るので、人が気をつけなくてもデータが壊れにくいのです。
押さえておきたい用語
- 主キー(PK)
- 外部キー(FK)
- リレーショナルデータベース この用語の解説を読む
- ER図