Webに関わる人に覚えてほしいデータベースとSQLの基礎

Web制作に関わる人の中でもデータベースとSQLが全くわからない、という方も多いと思います。
システム開発の中でもデータベースとSQLの学習コストは意外に低く、基本的にWebサイトはシステムによって動いているため、データベースとSQLは覚えておくと、システム全般の会話をしやすくなり、アクセス解析が無くとも必要最低限のデータはエンジニアの手を借りなくても参照することが可能になります。
今回は、このデータベースとSQLについて解説させていただきます。
今までは実体験をもとに他にはない考え方やロジックをご紹介してきました。しかし、今回はGoogleで調べれば様々な情報が閲覧できます。役に立つ情報も多くあります。
非エンジニアが多少、間違えていてもどの記事よりも分かりやすくデータベースとSQLの説明をさせていただきます。
私自身もプログラミングよりもデータベースとSQLの方が理解しやすく、この概要を把握していくことからシステム開発に詳しくなっていった経緯がありますので、是非とも覚えていただけると今後Web制作でシステム開発の幅が広がるのではないかと思っています。
データベースとは
データベースとは、データを集積したり、検索(参照)しやすくするための物です。
アナログの方に分かりやすくいうと、台帳をデジタル化した物だと思ってください。会社の社員情報や顧客情報もデジタル化すればデータベースとなります。
データベースにも色々な型がありますが、Webで扱うのはほぼリレーショナルデータベース(RDB)と呼ばれるものです。このワードは覚える必要はありませんがWebサイトで使うデータベースの種類は以下となります。
- MySQL
- PostgreSQL
ほぼ上記の2種類ですが、大規模なシステムの場合Oracleを使う場合もあります。違いは一旦把握しなくて大丈夫ですので、データベースは大まかに上記2種類でたまにOracle使うと思っていてください。
DBは何を使っていますか?と聞けば、MySQLかポスグレ(PostgreSQL)だよ、と回答が来ます。そろそろエンジニアの方からツッコミが来そうですが続けます。
データベースの中身は基本的にExcelだと思ってください。Excelとは呼び名が違うので以下のように覚えてください。

最低限、これだけでも知っておけばデータベースについて会話するときに何を話しているかなんとなく理解できると思います。
テーブルとテーブルをつなぐリレーション
リレーションとは、テーブルとテーブルを繋ぐ共通のキー(key)となります。Excelで言うところの別シートのデータを紐づける意味と同じです。
例えば学校を例に例えるならば、「学校」「授業」「担任」「生徒」がいます。学校にそれぞれIDを持っていれば、そのIDをキーとして「授業」「担任」「生徒」を紐づけると言うのがリレーションになります。
では、リレーションはどのような種類があるかを紹介していきたいと思います。
リレーションの種類としては以下の3パターンがあります。nは多とも言います。
- 1:1(一対一)
- 1:n(一対多)
- n:n(多対多)
生徒と授業に例えると、生徒が1人で授業も1つの場合が一対一です。生徒が一人で授業が複数ある場合は一対多となり、生徒も授業も複数ある場合は多対多の関係になります。それぞれ図にすると以下の通りです。



Excelだとこのような表でも問題ありませんが、データベースでは授業なしが膨大な数となるため非効率です。そのため一対多となるようにデータベースのテーブルを分割します。

データベースは、基本的に1つのテーブルに1つの情報しか入れられません。このようなテーブル構造にしておくと、例えば学生や授業が増えた時にテーブルのレコード(列)を追加するだけで他のテーブルに影響を及ぼすことなく追加できます。
このようなテーブルをマスター系のテーブルと呼びます。
マスター系のテーブルは情報の参照用に使われます。
マスター系のテーブルの他にトランザクション系のテーブルがありますが、処理系のテーブルと覚えてください。例えば、ECサイトで購入した時に消費税や送料などを計算する処理に使うテーブルになります。処理の回数ごとに情報が追加されるのがトランザクション系のテーブルです。
正規化

データベースの正規化とは、「冗長なデータを取り除いた状態にする」ということで、平たく言えばデータを最適化することになります。
正規化の手順としては、まず横に繰り返したデータを探して縦に直します。当然ですが、テーブルは縦に長くなり、これを第1正規化と呼びます。
次に、縦に繰り返すデータを探します。縦に繰り返しているデータを別のテーブルに切り分けるのですが、切り分けるためには従属関係が必要です。
例えば、授業ごとに教室が決まっている場合は従属関係にあるのでテーブルを切り分けます。授業ごとに教室が決まっていない場合は従属関係にないためテーブルは切り分けません。ここでの切り分けを第2正規化と呼びます。
最後に第3正規化ですが、推移的関数従属と呼ばれる従属関係の切り分けを行います。ちょっと言葉が難しいですが、要は第2正規化で切り分けたデータの中で更に繰り返すデータがあれば切り分ければ良いというだけです。
正規化はこの後第5正規化まで続きますが、基本的には第3正規化まで覚えておけば、次に出てくるER図を読むことができます。
実際に設計や実装をする方以外は覚えなくて大丈夫です。実際に設計する場合でも第3正規化までで実践した方が理解が早まると思います。
コラムキー(key)について
正規化をするにあたりキー(key)の設定が必要になります。
キー(key)の説明を詳しくすると分かりにくくなるため、ログインIDと思ってください。ほとんどの場合はメールアドレスです。なぜメールアドレスがキー(key)にするかというと、重複しないからです。メールアドレスではない場合は、任意でユニークなIDを発行してキー(key)にします。
ER図
と呼ばれます。平たく言えば、データベースの設計書です。
色々と難しい単語が出てきますが、現場でもあまり使われないので、現場で使われる単語のみ紹介します。
これまでに解説したリレーションは以下で表記します。
1:1(一対一)

1:n(一対多)

n:n(多対多)

そして、テーブルの左上に書いてあるのがテーブル名で、青い枠に記載されている項目がキー(key)です。データが追加されると、レコードとして追加されていきます。そして白枠で記載されている内容が、テーブル内にあるデータ項目です。
SQLとは
SQLはデータベースの言語で、データベースのミドルウェアを管理、制御します。SQLはユーザーが指定した条件を見つけて実行するだけのものとなるため、非常にシンプルです。ユーザーからSQL文でクエリを送り、帰ってきた値を画面に表示するか、システムに指示します。
例えばSQL文の基本としては「SELECT 取得したい列名 FROM 使用テーブル名;」と書けばテーブルのカラムが選択されます。
1ヶ月で習得できます
他のプログラム言語とは違いとてもシンプルで、学習コストも1ヶ月あれば基本は習得できますので、皆さん是非データベースとSQLを覚えてみましょう。

この記事を書いた人
クーシーブログ編集部
1999年に設立したweb制作会社。「ラクスル」「SUUMO」「スタディサプリ」など様々なサービスの立ち上げを支援。10,000ページ以上の大規模サイトの制作・運用や、年間約600件以上のプロジェクトに従事。クーシーブログ編集部では、数々のプロジェクトを成功に導いたメンバーが、Web制作・Webサービスに関するノウハウやハウツーを発信中。
お問い合わせはこちらから
Web制作デザイン、丸ごとお任せ
お問い合わせする
牧野秀哲