*

「初級」〜「中級」のPHPエンジニアのスキルについてまとめてみる(DB編)

公開日: : 最終更新日:2018/05/05 MySQL, 講義

本日はデータベース系の必要な技術について。

ウェブエンジニアといっても技術領域が非常に広いのですが、
PHPで仕事を指定していればデータベースを扱う機会が非常に多いでしょう。
(どの規模の案件かにもよりますが、一定以上の規模のWebアプリであればほぼ100%とといっていいかと思います。)

私も携わった範囲内で実務で必要だなと思う知識などについて下記に書いておきます。

なおDデータベースといってもWEB形であればほぼMySQLを使われている方が多いでしょう。
8割方の方がMySQLでそれ以外の方はPostgreSQLや業務形ではOracleではないでしょうか。

基本的にMySQLを前提として話を進めさせていただきます。

SQL(特にSELECT句について)

身につけておきたいスキル

  • 4,5個のテーブルが絡んでいても欲しいデータを言われてSQLがすぐに組める
  • EXIST,CASE,HAVINGなどが適切に使える
  • JOINに対して集合のイメージが持てる
  • ループの中で発行しているようなSQLがある場合、集計をうまく使って1回のSQLに収めることができる

実務でデータベースを使ってまず必要になってくるのはSQLがスラスラかけるかですね。
何も見ずに基本のSELECT,INSERT,UPDATE,DELETEがスラスラかけるようになっておきましょう。

といってもある程度複雑なSQLになりますと8割方SELECT句が適切にかけるかどうかといったことになります。
特にデータの集計を必要とするようなケース(例えばECサイトを管理していて売り上げの集計を行うなど)で適切なSQLが
かけるかどうかでスピードが変わってきます。

複雑なデータの取り出しはプログラム側で配列を使ってゴリゴリやるよりSQLで一気に出してしまった方が楽になるケースもあります。

チューニング系

アプリが遅い場合、遅いクエリを発見できる
EXPLAINの基本的な見方がわかり、遅い部分の発見とインデックスを貼り付けることができる

適切なSQLを書くのと同様に実務ですとデータベースが原因でスピードが遅くなることが多いです。
その場合必要なのは

  1. 遅いクエリの発見
  2. 対処法の考慮→実際の対策

になってきます。

1に関してはmysqlの設定で出すこともできますし、フレームワークの場合、デバッガを使うと発見が楽なこともあります。2に関してですが、ほとんどのケースで対処法に関してメリットとデメリットがありますので、それらを正確に理解しておきましょう。

遅い場合、

  • SQL自体の回数を減らすこと
  • SQL自体を早くすること

の2つの対策が挙げられます。

前者はほとんどの場合集計タイプのSQLが正確にかけるかが大切になります。後者の場合、EXPLAINを使ってSQL自体がどのようにデータを抽出しているかを理解し、indexを適切に貼ってスピードアップさせられることが多いです。

インデックスも本当だったらアルゴリズムについての理解などしておくと良いです。
またチューニングに関しては他にも設定ファイルでMySQL自体のメモリ設定などもできるようなのですが、私がやったことがないので触れられません・・・(申しわけないです)

設計

  • 基本的なテーブルの設計ができる
  • 基本的なテーブルの作り方のパターンをだいたい身につけている
  • NG、グレーな設計などがわかる。(メリット、デメリットを正確に理解している)

記述内容が書き方が抽象的すぎるかな・・・
要は販売管理のテーブルを作れ、と言われた時に必要なテーブル、カラム、そしてリレーションがイメージできるかです。

設計に関してはよほど極端なものを覗くとだいたいの場合においてメリット、デメリットがあり、それを理解していることが大切だと思っています。
例えばテーブルの主キーとしてauto_incrementのidを使うケースが多いのですが(サロゲートキー)、これもメリットデメリットがあります。

薬と同じで使い方によっては毒にもなるので、効果と副作用についてしっかり理解しておくことが重要だと思っております。

とりあえずこんなところで。
基本的にはSQLは単独でも勉強できますので、非エンジニアの方でも手が出やすい分野ではないかなと思っております。

参考書籍

私が使って良かった本などを。

スッキリわかる SQL 入門 ドリル215問付き! 

基礎固めに非常にいいかと思います。
SQLをやったことがない方、これから始める方にはまずはこれをお勧めします。

達人に学ぶ SQL徹底指南書

個人的に私が感銘を受けた技術書第一位です。
ある程度の SQLが自然にかけるようになった方のレベルアップに非常にいいです。
ウェブサイト(http://www.geocities.jp/mickindex/database/db_support_sinan.html)もありますが、
レベルの高い内容を適切な例を使って順序立てて説明できるかたって非常少ないですがこのかたの説明は適切かつ非常にわかりやすいです。
著者の方(ミックさん)はDB業界では有名な方のようです。

データベース設計

販売管理システムを題材に一般的な業務のフローとテーブルの設計例などを書いています。
業務系のシステムの全体的なテーブルの設計例などを理解したい方にお勧めです。

ECCUBEのテーブル

一般的なECサイトのテーブル構成がどうなっているか、大変勉強になります。

44のアンチパターンに学ぶDBシステム

データベースに関する失敗例やダメな例に関してリストアップしています。
業務系がメインですが、Web系の方でも参考になることが多いかと思います。

関連記事

よく使う処理をまとめよう その2 (関数)

こんにちは。松本です。 最近の私の使命はダイエットです(爆)。 ダイエットはいろいろな方

記事を読む

PHPで掲示板を作ろう!(データベース編) その5 PHP-MySQL連結編

今回はMySQLの第5回目の講義です。 前回までの記事 PHPで掲示板を作ろう!(データベース編

記事を読む

理論と実践のバランス

ネタ不足&開発のほうが忙しく、一か月以上書いておりませんでした。 今回は漠然とスキルアップする

記事を読む

CMSの大まかな構成

前回に引き続き、CMSの大まかな構成について話したいと思います。 HTMLサイトとの違い CMS

記事を読む

PHPはなぜ簡単といわれるのか?

最近ではブラック企業と同じような意味合いでブラックバイトなんて言葉があるらしいですね。 ただ定

記事を読む

PHPで掲示板を作ろう!(データベース編) その4 SQL編

今回はMySQLで掲示板を作ろうの続きです。前回のMySQLの講義が11/18日ですね。 2か

記事を読む

お問い合わせフォームを作ろう! その1(HTML)

このサイト、PHPの学習サイトなのに内容から遠ざかっていました(爆) 個人的にはプログラミング

記事を読む

CMSとは?

先週オフィスにきた新規の受講生の方に「CMSを使いたいので、使い方を教えていただきたいのですが・・・

記事を読む

プログラミング学習法「写経」について

本日は本ブログのメインテーマであるプログラミング学習について考えてみたいと思います。 今までプ

記事を読む

作業が遅くてイライラしている方必見!作業スピードを改善するネタ・ツールなど

エンジニアとして仕事をしていますと、「ある機能を実装する最適な方法(設計やプログラムの組み方全般)を

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

転職エージェントについて

さて、エンジニアとして転職を考えている人であれば転職エージェントを使っ

エンジニアが転職して年収を上げる方法を考えてみました。

えー前回の記事でも書きましたが、2020年2月現在転職活動中です。

2020年のご挨拶

今更ですが、明けましておめでとうございます。 2019年も2本し

自社開発>客先常駐である本当の理由

このブログでも何回か取り上げていますが、ITエンジニアの働き方としては

エンジニアにとって必要なコミュニケーション能力とは

気がついたらもう3月下旬になっていますね・・ 年末年始忙しかった

→もっと見る

  • follow us in feedly
PAGE TOP ↑