
こんな疑問を解決します。
本記事の内容
- データベースとは
- データベースのテーブル設計方法
- データベースのテーブル設計をもっと学ぶには
ここでは、こういった悩みを持つ初心者エンジニア向けに、
実際の業務で普段からデータベースを扱う現役システムエンジニアの私が、
分かりやすく簡単に解説していきます!
最後まで読むことで、ぼんやりしていたデータベースの仕組みや設計方法を理解し、簡単なイメージを持って頂けると思います!
目次
データベースとは
そもそもデータベースとは、簡単に言うと
たくさんのデータを集めて整理し、必要に応じて検索や更新などの処理を行えるように管理したもの
をいいます。
普段はあまり意識することはないかと思いますが、生活の中でも様々な場所で利用されています。
図書館の書籍検索システムや銀行のATM、またレジのPOSシステムなど、いたるところで使用されています。
データベースを活用すると、複数の利用者が同じデータにアクセスする際に、安全かつ便利にデータを使用することができるので、
顧客を管理したい場合や、在庫を管理したい場合などに用いられます。
データベースのテーブル設計方法

それでは設計方法を説明していきます!
主な手順は以下の通りとなります。
- 論理設計
- 正規化
- 物理設計
名前だけではよく分からないと思うので、一つひとつ詳しく説明していきます!
論理設計
まずは論理設計から始まります。
この論理設計にも手順があり、以下の手順で進めていきます。
エンティティの抽出
論理設計のなかでまず始めに行うのは「エンティティの抽出」です。
エンティティとは、管理するデータの集合項目のことです。
会社の社員管理システムを例として考えてみると、この場合のエンティティは、「事業所」「部署」「社員」などが考えられます。
リレーションシップの抽出
エンティティの抽出が出来たら続いて行うのは、
「リレーションシップの抽出」です。
これはどういうことかというと、先ほど挙げたエンティティの関係性を考えます。
「事業所」と「部署」の関係性とは、
事業所が存在することでその中に部署も存在します。
つまり、事業所に部署が含まれている。それも複数可。という関係性が考えられます。
定義決め
「リレーションシップの抽出」が出来たら続いて「定義決め」を行います。
ではどういった定義を考えるのかというと、「属性」や「主キー」というものの定義を考えます。
属性の定義とは、
最初に挙げたエンティティにどのような属性、つまりそれらに含まれる項目はどのようなものがあるかを考えるということです。
「事業所」「部署」「社員」の属性はこのように考えられます。
事業所 |
事業所コード |
事業所名 |
部署 |
部署コード |
事業所コード |
部署名 |
社員 |
社員番号 |
部署コード |
社員名 |
属性の定義ができると、次はその中から主キーの定義を行います。
主キーとは、その属性が決まると、他の属性もすべて一意に決めることができるというものです。
これはどういうことかというと、
「社員」で考えると、社員番号が決まれば他の属性、つまり社員名などが特定できるので、この場合の主キーは社員番号となります。
正規化
論理設計が出来たら次の作業は「正規化」です。
正規化とは、データの構造を単純にし、重複をなくすことをいいます。
この正規化を行うことは、データの取り出しやすさや管理のしやすさに繋がるので必須の作業となります。
正規化には、第一正規化から第三正規化まであります。
第一正規化
まずは第一正規化です。
この第一正規化では、エンティティの中で繰り返しの項目がある場合、別のエンティティに取り出すという作業を行います。
このようなエンティティがあるとします。
貸出No. | 貸出日 | 本1 | 本2 | 本3 |
001 | 10/11 | UKロック史 | エンジニアの授業 | 金融入門書 |
002 | 10/12 | ITトレンドの歴史 | 国語辞典 | NULL |
このままだと、10/11に借りられている本が3冊ある状態で繰り返されています。
これをエンティティとして取り出すとこのようになります。
貸出No. | 貸出日 |
001 | 10/11 |
002 | 10/12 |
貸出No. | 番号 | 書籍 |
001 | 1 | UKロック史 |
001 | 2 | エンジニアの授業 |
001 | 3 | 金融入門書 |
002 | 4 | ITトレンドの歴史 |
002 | 5 | 国語辞典 |
これが第一正規化となります。
第二正規化
続いて行われるのが第二正規化です。
第二正規化とは、複合キーの一部で値を特定することができるものがある場合は、別のエンティティとして取り出すという作業です。
複合キーとは、主キーが複数の項目で定義されているものです。
ではこのようなエンティティで考えてみます。
学年 | 組 | 出席番号 | 学生 | 担任 |
1 | 1 | 7 | 山田太郎 | 佐藤先生 |
2 | 1 | 31 | 鈴木一郎 | 田中先生 |
この場合、「学年」「組」「出席番号」の複合キーとなります。
しかし、複合キーの一部である「学年」と「組」が分かれば「担任」を特定することができます。
したがってこれらをエンティティとして取り出します。
するとこのようになります。
学年 | 組 | 出席番号 | 学生 |
1 | 1 | 7 | 山田太郎 |
2 | 1 | 31 | 鈴木一郎 |
学年 | 組 | 担任 |
1 | 1 | 佐藤先生 |
2 | 1 | 田中先生 |
これが第二正規化となります。
第三正規化
最後は第三正規化です。
この第三正規化は、主キー以外の属性で値を特定することができる場合、それをエンティティとして取り出すものです。
このようなエンティティで考えてみます。
社員No. | 社員名 | 顧客コード | 顧客先名 | 連絡先 |
101 | 田中一郎 | 100101 | SE株式会社 | 090-... |
102 | 鈴木大樹 | 100102 | IT株式会社 | 080-... |
この状態だと、主キーである「社員No.」ではない「顧客コード」が分かれば、「顧客先名」を特定することができます。
このような場合にエンティティとして取り出します。
するとこのようになります。
社員No. | 社員名 | 顧客コード | 連絡先 |
101 | 田中一郎 | 100101 | 090-... |
102 | 鈴木大樹 | 100102 | 080-... |
顧客コード | 顧客先名 |
100101 | SE株式会社 |
100102 | IT株式会社 |
これが第三正規化となります。
ここまですることで、データの取り出しやすさや管理のしやすさを上げることができるのです。
物理設計
正規化まで済んだら最後は物理設計です。
この物理設計では実際にSQL文をうってテーブルを作成していきます。
論理設計して正規化まで済ませたエンティティ一つひとつがテーブルとなるので、まずはそれぞれのテーブル名とカラム名を決めていきます。
カラム名とは属性の名前のことです。どちらも半角英数字で決めます。
そして、そのカラムに入るデータのデータ型を決めます。
データ型にはこのような種類があります。
文字列型 | Char, Varchar |
数値型 | Int, Bigint, Float, Double |
日付型 | Date, Datatime, Time |
真偽値型 | Bool |
「社員番号」のようなカラムには、数値型の中から決めるなどしてデータ型を決めていきます。
次にオプションを決めていきます。
オプションとは、それぞれのカラムに対して入力を必須とする「NOT NULL制約」や、重複を不可とする「ユニーク制約」などがあります。
ここまで決まったら、実際にテーブルを作成するSQL文をうってテーブルを作成します。
テーブルを作成するSQL文はこのようになります。
CREATE TABLE テーブル名
(
カラム名 データ型 オプション,
カラム名 データ型 オプション,
カラム名 データ型 オプション,
参照制約
)
これでエンティティの抽出から始まった、データベースのテーブルを作成し設計まで行えます。
データベースのテーブル設計をもっと学ぶには
これでデータベース設計に関して簡単なイメージを持って頂けましたか?
しかし、ここでは基礎しか記載していません。
SQL文などデータベース設計に関する知識はもっと深く知ることで、様々なことができるようになります。
実際の私の現場でもデータベースは使用されているように、様々な現場のシステムで使用されています。
したがってデータベースに関する知識を付けることで、様々な現場で活躍することができるエンジニアになることができるのです。
こちらの「TECH::CAMP」というプログラミングスクールではSQLをもっと深く学習することができます。
どんなものか分からないと思いますが、今なら無料でカウンセリングや説明会を受けることができます。
どんなものか一度自分で見てみるといいかと思います!
>> 【評判・口コミまとめ】テックキャンプって実際どうなの?
データベースを学び需要の高いエンジニアに!
いかかでしたでしょうか?
データベースのテーブル設計方法について簡単なイメージを持つことができましたか?
顧客を抱えるシステムや多くのユーザーが同時に利用するシステムなど、様々なシステムにデータベースは活用されており、
実際の私がそうであるように、エンジニアとしてデータベースに触れる機会はとても多いです。
したがって、データベースに関する知識を持っておくだけで需要の高いエンジニアになることができます!
ここでは基礎だけですが、もっと深く学ぶとそれだけで立派な武器となります。
ぜひ学習してみてください!