教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。
その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。
このパートでは、なぜあなたがデータベース(以降、DBと表記します)設計について学ぶと良いか、について説明します。
何より、あなたが充分にモチベーションを高めてから学習に臨めるように!
さっそくですが、私が考えるDB設計を学ぶメリットは以下の2つです。
ここから、上記のDB設計を学ぶメリットについて具体例を交えながら説明していきます!
その前に、アプリケーションとDBの関係性について簡単に触れておきましょう。
ー あなたは今現在、IT業界とどのような関わり方をしているでしょうか?
IT業界で仕事をしたいと考えてプログラミングを学習中の方も、すでに実務に入ってプログラマやテスター、設計者として活躍中の方もおられるかも知れません。
ー そのあなたは、DBに対してどのような捉え方をされているでしょうか?
DBは、アプリケーションにおいて中核にあたる存在です。
最近のショッピングサイトやSNSなどの動的Webサイトは、PCで操作できる画面とスマートフォンアプリなど、複数のユーザーインターフェースを持つことが、ごく一般的です。
ですがそうした場合でも、DBはただひとつでアプリケーションの核となる存在です。
開発現場において、プログラムロジックのみでは実現できない、DB設計が大きく関係する実装を依頼されることが多々あります。
その際に、DB設計をきちんと理解しているかしていないかで一人で実装可能な範囲が大きく変わってきます。
この説明だけだとイメージがしづらいと思うので、具体例としてネット通販サイトの実装で考えてみましょう。
ネットショップの通販サイトであれば、まずユーザーがログインしているかしていないかで、ページに表示する内容を変える必要がありますね。
ネット通販サイトのように、動的に表示する内容を変更するサイトを動的サイトといいます。動的サイトではDBが必須となってきます。
ユーザーがログインしている場合、以下の画像のようにページ内で「こんにちは、○○さん」とユーザーの名前で呼びかけるという通販サイトは多いでしょう。
それでは、次に通販サイトのポイント機能を実現するために、DBがどのように使われているかを少し考えてみます。
企業のホームページやブログサイトのようにWebアプリケーションではない、サイトへ訪れた全員に同じようなコンテンツを表示すれば良いサイトは、静的サイトといいます。
静的サイトであれば、所定のURLにアクセスした際に表示するHTMLは決まっているので、DBについて深く考える必要はありませんね。
私は、通販サイトで買い物をするときに、ポイントを使ってお得に買い物をしたいと思うことがよくあります。
通販サイトを運営するお店にとっては、そうしたお客を効率よく捕まえるために、以下の画像のようにユーザーがいま何ポイント保有しているかをサイトに表示する仕組みが必要かも知れません。
今回は例として、「ユーザーが持っているポイントの有効期限が切れそうであれば、ポイントにあと少しお金を払えば買えるオススメ商品をサイトに表示してあげる」という機能を作ると仮定します。
この仕組みを実現するには、もちろんユーザーごとにポイントをあと何ポイント保有しているか、ポイントの有効期限がいつか、という情報をDBに持たせる必要がありますね。
また、ポイントについては、システムとして機能を実現するために考えなければならない点がいくつかあります。
以下でもう少し詳しく考えていきましょう!
ここからアプリケーション開発独自の言葉が出てくるので、先に言葉の定義を説明します。
ここでは「要件」と「仕様」という言葉について説明します。
要件とは何かを一言で言うと、「アプリケーションを作ることで、実現したいこと」です。
より正確に言うと、「要件」には「業務要件」と「システム要件」とがあります。
しかし本教材ではこの2つの違いについては主眼では無いので詳細の説明は割愛し、一般的に「システム要件」と呼ばれるものを「要件」と呼ぶことにします。
例えば、先ほどの
というのは今回のネット通販サイトの大きな「要件」です。
実務では、要件をさらに具体的にしてプログラムの「仕様」に落とし込んでいきます。
仕様とは、「要件を実現するために、プログラムをどのように動作させるかの規定」です。
先ほどのポイント有効期限切れ前のオススメ商品の要件の例で言えば、
をより具体的に「仕様」としてプログラムを実装する前に規定する必要があります。
通販サイトの利用者であるユーザー1人1人にとって、ポイントの価値はたかだか数円・数十円といった金額です。
しかし、サイトでモノを売るお店にとってポイントは販促のための重要な機能です。
ポイントによる商品価格の値引きは、お店にとっては販売促進費というコストにあたります。
利用者が多い通販サイトにとっては、バカにならない金額です。
ー 通販サイトを運営するお店が、ここにどの程度のコストがかけられるか?
そこから来るシステムに対する「要件」があります。
この 「システム要件」によって、ポイントの有効期限を計算するための「仕様」は変わってきます。
ー もしも、このポイントの有効期限計算についての要件に基づく仕様が、より複雑な「お客にポイントが付与されたタイミングごとに有効期限を計算する」仕様であったなら?
この仕様はプログラムロジックだけでは実現できませんね。
つまり、DB設計について理解していることを前提として、ユーザーが保有しているポイントを有効期限ごとに細かくDBに持たせるようなDB設計を行う必要があります。
また、今回の例のようにDB設計は、システムに対する「要件」とは切っても切り離せないものです。
DB設計はシステムに対する「要件」を見すえて行う必要がある、という点もよく覚えておいてください。
さて、ここまでシステム要件とDB設計についてお話ししてきました。
実務では、DB設計とプログラムの実装とは別々の工程です。
しかし、DB設計とプログラムの実装とを必ずしも別々のエンジニアで分業して行うとは限りません。
特に小規模のプロジェクトでは、DB設計とプログラムの実装とを1人で行うことも少なくありません。
「要件に沿ったDB設計を行うスキル」を持つエンジニアは、DB設計のスキルを持たないエンジニアに比べて1人でこなせる仕事の幅が明らかに広いと言えます。
下衆な話にはなりますが「エンジニアとして高収入を得たい」と考えている方にとっても、DB設計のスキルは必ず役に立ちます。
あなたがコーディングのみではなく設計も任される立場になった時、「要件に沿ってきちんとDB設計ができる」という点は、IT人材としてのあなたの差別化につながります。
是非とも、良いDB設計ができるようになっていただきたいと思います。
次のパートでは、本教材での学習を始める前に必要となる知識についてお話しします。