フルスタックエンジニアのノウハウ
2022.04.04    2022.11.29

データベース設計のやり方、コツ

この記事の動画版はこちら(画像クリックでYoutubeに飛びます)

チャンネル登録お願いします!


データベース設計とは


データベース設計とは、データベースに「どういった種類のデータを」「どのような区分けで保存するか」を決める作業のことです。


アプリを実際にプログラミングする前の「設計フェーズ」で行います。

なお、データベース自体がよく分からないという方は、こちらの記事で詳しく解説していますので、まずはそちらから学習してみてくださいね。

関連記事

データベースの基礎知識【実例を交えて説明】

データベース設計の流れとコツ


データベース設計はこのような流れで行います。


【前準備】画面設計を起こす


データベース設計を行うためには「これから作るアプリには、どんな種類のデータが必要になるのか?」、ということが分からないといけません。

そのため、先にこのような画面設計を作成しておくのがお薦めです。


画面設計を見ながら、データベース設計を考えていくと迷わずに進めていくことが出来ます。

画面設計の具体的なやり方については、開発実況動画が参考になるかと思いますので、気になる方はそちらも参考にしてみてください。
【開発実況シリーズ】店舗用Web予約システムを作る「#2 画面設計編」


【手順①】アプリ専用のデータベースを作成する


まずは、大元になる「データベース」を作成します。

基本的には、アプリに対してデータベースを1つ作成する形になります。

データベースの名前は、アプリの名前と同じにしておくと分かりやすくて良いと思います。

例えば、開発実況で作っているWeb予約システムは「reserve」というアプリ名ですが、データベースの名前も「reserve」で作成しています。


【手順②】テーブルを設計する


データベースが作成出来たら、その中に「テーブル」を複数作成していきます。

テーブルは、アプリで扱う「データの種類」ごとに分けて作成していきます。

ここが、データベース設計の「肝」になります。


画面設計を眺めながら、このアプリには「どんなデータが蓄積されていくのか?」ということを想像します。

例えば、Web予約システムなら、このアプリが使われていくと、日々「予約のデータ」が蓄積されていきますよね。

そのデータをExcelなどの表に、1件1件手で記録していくことを考えてみてください。

あなたなら、どのような表を作って管理しますか?


横の列に、予約日、人数、予約時間、予約者の氏名、メールアドレス、電話番号、備考といった各項目を用意して、縦の行に、日々のデータを記録していく形になると思います。


これがそのままテーブル設計になります。


データベースのテーブルも「表」のような形になっており、横の列の項目のことを「カラム」と言います。



この例では、「予約データ(reserve)」という名前のテーブルを作り、その中に、予約日、人数、予約時間、予約者の氏名、メールアドレス、電話番号、備考といったカラムを作成している訳ですね。

このように、アプリの中で扱うデータを「どのような表で管理していくか?」を考えることがテーブル設計です。


画面設計を見ながら、他にも必要なデータがありそうなら、それをどういった形の表で管理出来るかを同じように考え、テーブル化していきます。

例えば、このWeb予約システムでは店舗の営業時間や予約上限人数などを登録出来るようになっているため、こういった情報を記録するための表も必要になります。


「店舗データ(shop)」というテーブルを用意し、その中に、予約可能日、営業時間、予約上限人数といったカラムを作成して記録するようにします。


このアプリでは、これら2つのテーブルが必要という訳ですね。

他のアプリの例だと、例えばネットショップのシステムなら、日々「注文のデータ」が蓄積されていきますので、まず「注文」というテーブルが必要となり、その中に、注文日、注文者の情報、注文された商品の情報といったカラムを追加します。

また、ネットショップの場合は、新しい「商品」も日々登録されていきますので、注文テーブルの他に「商品」テーブルも必要になります。

商品テーブルには、商品名、商品価格、商品画像といった「商品の情報」を保存するためのカラムを追加します。

このように、アプリの中で扱うデータを種類ごとに「表」にまとめ、それをテーブルとして定義していきます。

各テーブルと、必要なカラムがリストアップ出来れば、この手順はクリアです。


【手順③】カラム設計


必要なテーブルとカラムが決まったら、各カラムの細かい設計を決めていきます。

具体的には、各カラムごとに

データの型
データのサイズ
デフォルト値
NULLを許可するかどうか

といったことを決めていきます。



データの型は、登録するデータのタイプの指定です。

そのカラムに登録するのが数値なのか、文字なのか、日付なのか、通貨なのか、といったデータのタイプを予め指定します。

データサイズは、登録するデータのサイズの指定です。

例えば、「氏名」を登録するカラムは最大20文字登録出来るようにするのか、30文字登録出来るようにするのかといった指定ですね。

デフォルト値は、カラムに何も指定されなかった場合に自動的に登録される値。

NULLを許可するかどうかは、カラムに何も登録しないことを許すかどうかの指定です。

こういった指定全てのカラムに対して、1つずつ行っていきます。


この辺りは、何度もデータベース設計を経験していくと、例えば「氏名」ならデータ型はこれで、サイズはこのくらい、というのが大体決まってくるので、経験を積むことであまり考えずにサクサク決めていくことが出来るようになってきます。

実際のデータベース設計の様子は、開発実況動画でも見ることが出来ますので参考にしてみてください。
【開発実況シリーズ】店舗用Web予約システムを作る「#3 DB設計」


【手順④】テーブルの正規化


最後に、テーブルの正規化を考えていきます。

正規化というのは、テーブルに無駄なデータを出来るだけ持たないように、テーブルを分ける作業です。


例えば、先程のネットショップの例では「注文テーブル」と「商品テーブル」を作成しましたが、注文は同じ人が何度も行う可能性があり、その場合注文テーブルには同じ人の氏名やメールアドレスなどが重複して登録されます。

そこで、新しく「顧客テーブル」を作成し、顧客の情報はそっちで一括管理して、注文テーブルの方には、顧客のIDだけを保存するようにすれば、重複した無駄なデータを持たなくて済むようになります。

これが「テーブルの正規化」です。

設計した各テーブルに対して、無駄なデータを持っている部分は無いかどうかをチェックし、もしあれば、別テーブルに分離することを検討していきます。

正規化は行わなくても、データベースにデータを保存することは出来ますが、無駄なデータが増えることでサーバーのストレージを圧迫してしまったり、プログラムの動作パフォーマンス低下につながってしてしまう可能性があるため、これも重要な工程です。

正規化については、こちらの記事でも解説していますので併せてご参考にしてみてください。

関連記事

正規化とは何か?(データベース設計のコツ)

この4つの手順で、データベース設計は完了です。

①アプリのデータベースを作成
②テーブルの設計
③カラムの設計
④正規化


まとめ


データベース設計は、まずアプリ専用の「データベース」を作り、その中に、アプリで必要となるデータの種類分だけ「テーブル」を作る。

さらに、各テーブルにはそのデータに持たせたい項目(カラム)を設定する。

そして、最後に必要に応じてテーブルの正規化を行う。

このような流れで進めていきます。

アプリを作る際には是非この手順で進めてみてくださいね。

おすすめ記事