こんにちは!
先日、呪術廻戦で俺が学ぶMySQL①【PHP】をアップしましたが、
今日はその続きです。
さらに新しいことをアウトプット、前回の記事より理解度が上がった箇所は
もう一度ディグってみます。
そもそもデータベースとは?SQLとは?とか突かれると
答えられなくて泣きながら走って逃走する自信しかないので
ちゃんと言語化できるように今度記事にしてまとめます(絶対やる)
カラムを追加
前回よりデータ増やしました。
ちなみに僕の好きな術式は投射呪法です。
ちょっと領域展開がなさそうなのが不安ですが、
僕なら投射呪法を会得したいなあ。
例えば上図のmagiciansテーブルに
どこに所属しているのかを表すカラムbelong,
階級を表すカラムrankを増やしたとしましょう。
一見ちゃんと管理できてるように見えますが、
今後データが増えたときにすごくごちゃっとして
わかりにくくなります。
実際五条先生を追加するのを忘れてた。
また、rankは悠仁は2級呪術師(?????)ですが、
階級が変わった時に一々書き換えなければいけません。
リレーション
データベースを使用する最大の利点はリレーションらしい。
テーブルを分けることで管理しやすくします。
リレーションを利用することであたかも2つ以上のテーブルが
1つであるかの如く振る舞うことが可能です。
テーブルが複数存在しているのにデータが簡単に
管理できるって素敵やん(紳助さん)
リレーションってRuby on Railsの
アソシエーションみたいなものと考えればええんかな?
ということでrankテーブルとbelongテーブルを作成しました。
belongテーブル
rankテーブル
じゃあこの呪術師(呪詛師と呪霊いるけどごめんね)の情報とどこに所属しているか、階級はどうなのかというデータを紐付けるにはどうすればいいのか。
magicianテーブルにbelong_id、 rank_idというカラムを追加し、
それぞれのテーブルの該当するidを記述します。
何でこんなデータ作ったんやろか…
めんどくさかった…
しかし、これで出来上がりと思っちゃあいけねえいけねえ。
真人がナナミンのことを知りたくて「キミ何級?」とデータを調べようとしたときに、
magicianテーブルのrank_idの番号を確認してからrankテーブルに
情報を見に行かなければなりません。
この確認方法は非常に効率が悪いです。
宿儺もびっくりです。
そこでリレーションです。
ナナミンの階級を調べたい時は
SELECT * FROM `magicians`, `rank` WHERE magicians.id=4 AND rank.id = magicians.rank_id;
WHERE句に続けてmagicians.id=4
と記述するとmagiciansテーブルの
idの4番目、つまりナナミンを指定できます。
真人はナナミンが何級か知りたいのでANDでrank.id = magicians.rank_id;
とリレーションを利用することで1級呪術師なのだとわかりました。
これで真人も宿儺から斬撃を受けることもなくなるでしょう
このsql文を入力すると
リレーションを利用することで複数のテーブルに値を入れてデータを管理し、
必要な時だけ合体させて取り出し閲覧することが可能なので
データベースがより便利なものとなりますねえ。