Upgrade to Pro — share decks privately, control downloads, hide ads and more …

後編 データベースと SQL を分かった気になる勉強会

後編 データベースと SQL を分かった気になる勉強会

配信動画はこちら
https://www.youtube.com/watch?v=68r-5o6vkLk&t=774s

もし良かったらムーザルちゃんねるのチャンネル登録お願いします!
https://www.youtube.com/channel/UCLPHXwLp90A5R69Eltxo-sg

Twitter でもプログラミングネタをつぶやいているのでフォローお待ちしております。
ムー
https://twitter.com/mu_vpoe
zaru
https://twitter.com/zaru

mu_zaru

June 11, 2020
Tweet

More Decks by mu_zaru

Other Decks in Programming

Transcript

  1. データベースと SQL を分かった 気になる勉強会 YouTube Live (2020.6.11 Thur. 21:00~) CTO

    と VPoE が初学者向けに講義する オンライン勉強会です。 随時質問なども受け付けていますので、 お気軽にどうぞ。 ハッシュタグ #mu_zaru 後編
  2. 初学者向けです。JavaScript/PHP/Ruby などを使って Web 開発をしていきたい方向け。 Lv.2-3 をメイン対象としてます。 難易度? Lv.4 Lv.3 Lv.2

    Lv.1 HTML/CSS を触り始める 書籍、Progate、ドットインストールなどで JS/PHP/Ruby 入門 スクールに通いフレームワーク Laravel/Rails や DB/Git 入門 未経験から内定圏内 / エンジニア1年目 実務 1~2年 テストコード、リファクタ、設計、インフラ 中堅 以上 Lv.5 Lv.6
  3. エディタ触りながらではなく、 動画に集中してもらって大丈夫です。 YouTube 上でも、Twitter の メンションでも構いません。 質問にはできるだけ答えていきた いと思います。 質問OK ライブ配信の動画は、

    そのまま YouTube に公開します。 なので途中で抜けてもいいし、 生で見なくてもいいです。 動画公開 ソースコード公開 講義中に使うソースコードは全て GitHub に公開しています。 github.com/mu-zaru/mu-zaru-channel
  4. 正規化 User No 名前 Email 1 zaru [email protected] 2 mu

    [email protected] ToDo No ToDo 完了 登録日時 User No 1 生放送する 完了 2020-05-31 1 2 コード書く 未完了 2020-06-01 1 3 絵を描く 未完了 2020-06-02 2 4 ご飯つくる 未完了 2020-06-04 1 「ToDo テーブル」と「 User テーブル」の2つに分割。 詳しくは次回
  5. 人が扱いやすいように作りがちな表 ユーザ名 Email ToDo 完了 登録日時 zaru [email protected] 生放送する 完了

    2020-05-31 コード書く 未完了 2020-06-01 mu [email protected] 絵を描く 未完了 2020-06-02 同じ項目を セル結合する ユーザ名 Email ToDo 完了 登録日時 ToDo 完了 登録日時 zaru [email protected] 生放送する 完了 2020-05-31 コード書く 未完了 2020-06-01 mu [email protected] 絵を描く 未完了 2020-06-02 右に項目を 追加し 繰り返す
  6. 人が読みやすいように作りがちな表 ユーザ名 Email ToDo 完了 登録日時 zaru [email protected] 生放送する 完了

    2020-05-31 コード書く 未完了 2020-06-01 mu [email protected] 絵を描く 未完了 2020-06-02 同じ項目を セル結合する ユーザ名 Email ToDo 完了 登録日時 ToDo 完了 登録日時 zaru [email protected] 生放送する 完了 2020-05-31 コード書く 未完了 2020-06-01 mu [email protected] 絵を描く 未完了 2020-06-02 右側に項目を 追加していく こういった Excel などで作りがちな表形式は、 リレーショナル DB では扱いにくい
  7. ToDo No ToDo 完了 登録日時 ユーザ名 Email 1 生放送する 完了

    2020-05-31 zaru [email protected] 2 コード書く 未完了 2020-06-01 zaru [email protected] 3 絵を描く 未完了 2020-06-02 mu [email protected] 行 列 リレーショナル DB が扱える形式 1行に、1個単位で成立に必要な情報が集約されている
  8. ToDo No ToDo 完了 登録日時 ユーザ名 Email 1 生放送する 完了

    2020-05-31 zaru [email protected] 2 コード書く 未完了 2020-06-01 zaru [email protected] 3 絵を描く 未完了 2020-06-02 mu [email protected] もっと扱いやすくする
  9. ToDo No ToDo 完了 登録日時 ユーザ名 Email 1 生放送する 完了

    2020-05-31 zaru [email protected] 2 コード書く 未完了 2020-06-01 zaru [email protected] 3 絵を描く 未完了 2020-06-02 mu [email protected] もっと扱いやすくする 情報が重複 している 例えば、ユーザ名やメールアドレスを変更しようとする と、関係する全ての行を更新操作しなくてはならない…
  10. ユーザ名 Email zaru [email protected] mu [email protected] ToDo No ToDo 完了

    登録日時 1 生放送する 完了 2020-05-31 2 コード書く 未完了 2020-06-01 3 絵を描く 未完了 2020-06-02 4 ご飯つくる 未完了 2020-06-04 ToDo No ToDo 完了 登録日時 ユーザ名 Email 1 生放送する 完了 2020-05-31 zaru [email protected] 2 コード書く 未完了 2020-06-01 zaru [email protected] 3 絵を描く 未完了 2020-06-02 mu [email protected] 「ToDo テーブル」と「 User テーブル」の2つに分割。 こうすることで、ユーザ名を変更する時は User テーブルの 1行だけを更新操作すれば済み、無駄がなくなる。 ここだけ 変更すればOK
  11. ユーザ名 Email zaru [email protected] mu [email protected] ToDo No ToDo 完了

    登録日時 1 生放送する 完了 2020-05-31 2 コード書く 未完了 2020-06-01 3 絵を描く 未完了 2020-06-02 4 ご飯つくる 未完了 2020-06-04 ToDo No ToDo 完了 登録日時 ユーザ名 Email 1 生放送する 完了 2020-05-31 zaru [email protected] 2 コード書く 未完了 2020-06-01 zaru [email protected] 3 絵を描く 未完了 2020-06-02 mu [email protected] 「ToDo テーブル」と「 User テーブル」の2つに分割。 こうすることで、ユーザ名を変更する時は User テーブルの 1行だけを更新操作すれば済み、無駄がなくなる。 ここだけ 変更すればOK リレーショナル DB が扱いにくい形式から、 扱いやすい形式に変えていくことを「正規化」と呼ぶ
  12. あらためて、 正規化ってなに? テーブル(表) 人が扱いやすい形式 リレーショナル DB が 扱いやすい形式 正規化とは、リレーショナル DB

    が情報を扱いやすいように変更するこ と。扱いやすいとは、冗長ではなく整合性が維持され効率的であること
  13. 分けたはいいけど… テーブルを分けたはいいが、どうやって ToDo とユーザの情 報を一緒に取得すればいいのか? ユーザ名 Email zaru [email protected] mu

    [email protected] ToDo No ToDo 完了 登録日時 1 生放送する 完了 2020-05-31 2 コード書く 未完了 2020-06-01 3 絵を描く 未完了 2020-06-02 4 ご飯つくる 未完了 2020-06-04
  14. 結合するための情報 User No ユーザ名 Email 1 zaru [email protected] 2 mu

    [email protected] ToDo No ToDo 完了 登録日時 User No 1 生放送する 完了 2020-05-31 1 2 コード書く 未完了 2020-06-01 1 3 絵を描く 未完了 2020-06-02 2 4 ご飯つくる 未完了 2020-06-04 1 二つのテーブルの行同士を紐づけるための列を追加する。 ユーザ毎に No を振り、そのユーザが作った ToDo にユーザ No を追加することで結合するための情報になる。
  15. プライマリーキー User No ユーザ名 Email 1 zaru [email protected] 2 mu

    [email protected] ToDo No ToDo 完了 登録日時 User No 1 生放送する 完了 2020-05-31 1 2 コード書く 未完了 2020-06-01 1 3 絵を描く 未完了 2020-06-02 2 4 ご飯つくる 未完了 2020-06-04 1 行をテーブルの中から、一意に特定可能な列のことをプライマリー キー(主キー)と呼ぶ。一般的にリレーショナル DB では 1 から始 まる連番が採用される。テーブルの中で必ずユニークでなくてはな らない。
  16. テーブルの結合 JOIN SELECT 取得したい列名 FROM テーブルA JOIN テーブルB ON テーブルA.列名

    = テーブルB.列名 user_id name 1 zaru 2 mu todo_id todo user_id 1 生放送する 1 2 コード書く 1 3 絵を描く 2 4 ご飯つくる 1 user_id が 二つのテーブルを 紐づけるための列 SELECT * FROM todos JOIN users ON todos.user_id = users.user_id todos users
  17. テーブルの結合 JOIN SELECT 取得したい列名 FROM テーブルA JOIN テーブルB ON テーブルA.列名

    = テーブルB.列名 todo_id todo user_id user_id name 1 生放送する 1 1 zaru 2 コード書く 1 1 zaru 3 絵を描く 2 2 mu 4 ご飯つくる 1 1 zaru SELECT * FROM todos JOIN users ON todos.user_id = users.user_id todos テーブルの 右側に user_id に 対応した users テー ブルが結合された
  18. テーブルの結合 JOIN SELECT テーブル名.取得したい列名 FROM テーブルA JOIN テーブルB ON テーブルA.列名

    = テーブルB.列名 todo name 生放送する zaru コード書く zaru 絵を描く mu ご飯つくる zaru SELECT todos.todo, users.name FROM todos JOIN users ON todos.user_id = users.user_id 欲しい列名の前に ドットでテーブル名 を付けて指定できる
  19. ありがとうございました! 6/18(木)21:00~ 「PHP で作る はじめての Web サイト(Docker 環境構築編)#1」 6/25(木)21:00~ 「PHP

    で作る はじめての Web サイト(DB 接続編)#2」 質問感想など呟いていただけると嬉しいです! ハッシュタグ #mu_zaru
  20. Fin