この記事は自分用の備忘録です。
正規化ってなんぞ
データを利用しやすいように整理すること
冗長なデータ
ID | 名前 | タイプ | トレーナー名 | トレーナーの町 | ポケモンの重さ | ポケモンの高さ |
---|---|---|---|---|---|---|
1 | のび太 | メガネ | ドラえもん | ミライタウン | 35.0kg | 1.4m |
2 | スネ夫 | エスパー | ドラえもん | ミライタウン | 40.0kg | 1.3m |
3 | ジャイアン | かくとう | ドラえもん | ミライタウン | 90.0kg | 1.7m |
これの何が冗長なんですか?
=>ドラえもんが引っ越した場合に面倒
ID | 名前 | タイプ | トレーナー名 | トレーナーの町 | ポケモンの重さ | ポケモンの高さ |
---|---|---|---|---|---|---|
1 | のび太 | メガネ | ドラえもん | カコタウン | 35.0kg | 1.4m |
2 | スネ夫 | エスパー | ドラえもん | カコタウン | 40.0kg | 1.3m |
3 | ジャイアン | かくとう | ドラえもん | カコタウン | 90.0kg | 1.7m |
3つもデータを書き換えないといけないね
正規化されたデータ
- やること
- トレーナーとポケモンの2つのテーブルに分ける
- トレーナーテーブルのPK(ID)を、ポケモンテーブルのFK(トレーナーID)として関連付ける
ID | トレーナー名 | トレーナーの町 |
---|---|---|
1 | ドラえもん | ミライタウン |
ID | 名前 | タイプ | トレーナーID | 重さ | 高さ |
---|---|---|---|---|---|
1 | のび太 | メガネ | 1 | 35.0kg | 1.4m |
2 | スネ夫 | エスパー | 1 | 40.0kg | 1.3m |
3 | ジャイアン | かくとう | 1 | 90.0kg | 1.7m |
これでデータを1つ書き換えるだけでよくなった
もしポケモンが1025匹テーブルに登録されていたら
冗長なデータだと1025行書き換えが必要
フォロワー100万人とかのデータだったら
100万行書き換えが必要
それが正規化によって1行の変更で済むわけだ
感想
この辺り本で勉強してた頃は読み飛ばしてた気がする
実務だと基本設計の時に使う大事な考え方である
アウトプットしないとやっぱり身につかない
アウトプット大事
参考