エンジニア

データベースのテーブル設計方法を解説!【初心者エンジニア向け】

パソコン
悩む人
エンジニアになったのはいいんだけど、データベースの仕組みや設計方法がよく分からない。。

こんな疑問を解決します。

本記事の内容

  • データベースとは
  • データベースのテーブル設計方法
  • データベースのテーブル設計をもっと学ぶには

ここでは、こういった悩みを持つ初心者エンジニア向けに、

実際の業務で普段からデータベースを扱う現役システムエンジニアの私が、

分かりやすく簡単に解説していきます!

最後まで読むことで、ぼんやりしていたデータベースの仕組みや設計方法を理解し、簡単なイメージを持って頂けると思います!

データベースとは

パソコン

そもそもデータベースとは、簡単に言うと

たくさんのデータを集めて整理し、必要に応じて検索や更新などの処理を行えるように管理したもの

をいいます。

普段はあまり意識することはないかと思いますが、生活の中でも様々な場所で利用されています。

図書館の書籍検索システムや銀行のATM、またレジのPOSシステムなど、いたるところで使用されています。

データベースを活用すると、複数の利用者が同じデータにアクセスする際に、安全かつ便利にデータを使用することができるので、

顧客を管理したい場合や、在庫を管理したい場合などに用いられます。

データベースのテーブル設計方法

パソコン

それでは設計方法を説明していきます!

主な手順は以下の通りとなります。

  1. 論理設計
  2. 正規化
  3. 物理設計

名前だけではよく分からないと思うので、一つひとつ詳しく説明していきます!

論理設計

まずは論理設計から始まります。

この論理設計にも手順があり、以下の手順で進めていきます。

エンティティの抽出

論理設計のなかでまず始めに行うのは「エンティティの抽出」です。

エンティティとは、管理するデータの集合項目のことです。

会社の社員管理システムを例として考えてみると、この場合のエンティティは、「事業所」「部署」「社員」などが考えられます。

リレーションシップの抽出

エンティティの抽出が出来たら続いて行うのは、

「リレーションシップの抽出」です。

これはどういうことかというと、先ほど挙げたエンティティの関係性を考えます。

「事業所」と「部署」の関係性とは、

事業所が存在することでその中に部署も存在します。

つまり、事業所に部署が含まれている。それも複数可。という関係性が考えられます。

定義決め

「リレーションシップの抽出」が出来たら続いて「定義決め」を行います。

ではどういった定義を考えるのかというと、「属性」や「主キー」というものの定義を考えます。

属性の定義とは、

最初に挙げたエンティティにどのような属性、つまりそれらに含まれる項目はどのようなものがあるかを考えるということです。

「事業所」「部署」「社員」の属性はこのように考えられます。

事業所
事業所コード
事業所名
部署
部署コード
事業所コード
部署名
社員
社員番号
部署コード
社員名

属性の定義ができると、次はその中から主キーの定義を行います。

主キーとは、その属性が決まると、他の属性もすべて一意に決めることができるというものです。

これはどういうことかというと、

「社員」で考えると、社員番号が決まれば他の属性、つまり社員名などが特定できるので、この場合の主キーは社員番号となります。

正規化

論理設計が出来たら次の作業は「正規化」です。

正規化とは、データの構造を単純にし、重複をなくすことをいいます。

この正規化を行うことは、データの取り出しやすさや管理のしやすさに繋がるので必須の作業となります。

正規化には、第一正規化から第三正規化まであります。

第一正規化

まずは第一正規化です。

この第一正規化では、エンティティの中で繰り返しの項目がある場合、別のエンティティに取り出すという作業を行います。

このようなエンティティがあるとします。

貸出No.貸出日本1本2本3
00110/11UKロック史エンジニアの授業金融入門書
00210/12ITトレンドの歴史国語辞典NULL

このままだと、10/11に借りられている本が3冊ある状態で繰り返されています。

これをエンティティとして取り出すとこのようになります。

貸出No.貸出日
00110/11
00210/12
貸出No.番号書籍
0011UKロック史
0012エンジニアの授業
0013金融入門書
0024ITトレンドの歴史
0025国語辞典

これが第一正規化となります。

第二正規化

続いて行われるのが第二正規化です。

第二正規化とは、複合キーの一部で値を特定することができるものがある場合は、別のエンティティとして取り出すという作業です。

複合キーとは、主キーが複数の項目で定義されているものです。

ではこのようなエンティティで考えてみます。

学年出席番号学生担任
117山田太郎佐藤先生
2131鈴木一郎田中先生

この場合、「学年」「組」「出席番号」の複合キーとなります。

しかし、複合キーの一部である「学年」と「組」が分かれば「担任」を特定することができます。

したがってこれらをエンティティとして取り出します。

するとこのようになります。

学年出席番号学生
117山田太郎
2131鈴木一郎
学年担任
11佐藤先生
21田中先生

これが第二正規化となります。

第三正規化

最後は第三正規化です。

この第三正規化は、主キー以外の属性で値を特定することができる場合、それをエンティティとして取り出すものです。

このようなエンティティで考えてみます。

社員No.社員名顧客コード顧客先名連絡先
101田中一郎100101SE株式会社090-...
102鈴木大樹100102IT株式会社080-...

この状態だと、主キーである「社員No.」ではない「顧客コード」が分かれば、「顧客先名」を特定することができます。

このような場合にエンティティとして取り出します。

するとこのようになります。

社員No.社員名顧客コード連絡先
101田中一郎100101090-...
102鈴木大樹100102080-...
顧客コード顧客先名
100101SE株式会社
100102IT株式会社

 

これが第三正規化となります。

ここまですることで、データの取り出しやすさや管理のしやすさを上げることができるのです。

物理設計

正規化まで済んだら最後は物理設計です。

この物理設計では実際にSQL文をうってテーブルを作成していきます。

論理設計して正規化まで済ませたエンティティ一つひとつがテーブルとなるので、まずはそれぞれのテーブル名カラム名を決めていきます。

カラム名とは属性の名前のことです。どちらも半角英数字で決めます。

そして、そのカラムに入るデータのデータ型を決めます。

データ型にはこのような種類があります。

文字列型Char, Varchar
数値型Int, Bigint, Float, Double
日付型Date, Datatime, Time
真偽値型Bool

「社員番号」のようなカラムには、数値型の中から決めるなどしてデータ型を決めていきます。

次にオプションを決めていきます。

オプションとは、それぞれのカラムに対して入力を必須とする「NOT NULL制約」や、重複を不可とする「ユニーク制約」などがあります。

ここまで決まったら、実際にテーブルを作成するSQL文をうってテーブルを作成します。

テーブルを作成するSQL文はこのようになります。

CREATE TABLE テーブル名
(
カラム名 データ型 オプション,
カラム名 データ型 オプション,
カラム名 データ型 オプション,
参照制約
)

これでエンティティの抽出から始まった、データベースのテーブルを作成し設計まで行えます。

データベースのテーブル設計をもっと学ぶには

パソコン

これでデータベース設計に関して簡単なイメージを持って頂けましたか?

しかし、ここでは基礎しか記載していません。

SQL文などデータベース設計に関する知識はもっと深く知ることで、様々なことができるようになります。

実際の私の現場でもデータベースは使用されているように、様々な現場のシステムで使用されています。

したがってデータベースに関する知識を付けることで、様々な現場で活躍することができるエンジニアになることができるのです。

こちらの「TECH::CAMP」というプログラミングスクールではSQLをもっと深く学習することができます。

どんなものか分からないと思いますが、今なら無料でカウンセリングや説明会を受けることができます。

どんなものか一度自分で見てみるといいかと思います!

>> 【評判・口コミまとめ】テックキャンプって実際どうなの?

データベースを学び需要の高いエンジニアに!

パソコン

いかかでしたでしょうか?

データベースのテーブル設計方法について簡単なイメージを持つことができましたか?

顧客を抱えるシステムや多くのユーザーが同時に利用するシステムなど、様々なシステムにデータベースは活用されており、

実際の私がそうであるように、エンジニアとしてデータベースに触れる機会はとても多いです。

したがって、データベースに関する知識を持っておくだけで需要の高いエンジニアになることができます!

ここでは基礎だけですが、もっと深く学ぶとそれだけで立派な武器となります。

ぜひ学習してみてください!

-エンジニア
-

© 2020 金融系エンジニアブログ Powered by AFFINGER5