*

「初級」〜「中級」の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系の方でも参考になることが多いかと思います。

関連記事

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

それでは前回のコードを例に少しずつ内容について説明をしていきます。 値を取得するには まず一番最

記事を読む

Java/PHP/Perl/Ruby/Python 主要Web系言語徹底比較

本日はWeb系で使われているプログラミング言語の比較をしてみようと思います。 Web系で使われ

記事を読む

基本ルールのまとめ

こんばんは、松本です。 このブログのコンテンツもこのエントリーで25本目となってきました。

記事を読む

フレームワークのメリット・デメリット

こんばんは。松本です。 昨日25日にはオフィスで第一回目の授業を開講させていただきました。広島

記事を読む

なぜPHPなのか

はじめまして、プログラミングの講師を担当させていただきます、松本と申します。 このたび、株式会

記事を読む

気を付けよう!個人事業主として働くときのトラブル

最近は開発のほうが忙しく、更新頻度が落ちているのですが、既存の記事を読んでる読者さんが多く、アクセス

記事を読む

未経験者がWEBエンジニアとして就職する前に身につけておいたほうがよいスキル一覧

夕方、用事から帰ってきてから寝てしまったので寝れなくなっている松本です。 寝れないので今日はも

記事を読む

開発を便利にする道具たち

PHPだけではありませんが、プログラミングには開発スピードをアップさせるための便利な道具があります。

記事を読む

データを扱ってみよう その2(配列)

こんばんは松本です。 少しずつ暖かくなってきましたね。暖かいのはいいんですが、オフィスでブログ

記事を読む

PHPのメリット・デメリット

うちのブログで一番読まれている記事が「フレームワークのメリット・デメリット」ですね。 タイトル

記事を読む

Message

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

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

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

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

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

2020年のご挨拶

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

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

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

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

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

→もっと見る

  • follow us in feedly
PAGE TOP ↑