アラフォ〜プログラミング未経験会社員のエンジニアへの道

神奈川県横浜市在住。アラフォーで小学生の息子あり。プログラミング勉強中でHTML/CSS, Ruby, Ruby on Rails, Javascriptなど。 いずれAI関連サービスを開発したい。

[アラフォプログラミング未経験]データベース設計の基礎について学んだみた

データベース設計について、学習してみました。

データベースの検索についてカリキュラムを進めてましたが、エラー地獄にハマってしまい、


いやになったので、次のカリキュラムへ現実逃避っす!


目次

データベース設計って何?

データベースの設計とは、作成するサービスやシステムに必要な情報を

どのようにデータベースで管理するかを決める作業です。


データベース設計をしっかりと行うことで、サービスが複雑になった場合でも

より効率的かつ簡易的にデータの操作を行うことができます。
〜カリキュラム抜粋〜

今後のサービスを作っていくにも、しっかりしたデータベースの構築が必要不可欠・・・ってことですよね!

今までのカリキュラムでは流れでサラッと作ってましたが、今回でしっかり理解するってことですかい!


って、生意気なことを言っていた自分を殴ってやりたいです。。。

先のカリキュラムのDB設計で全くチンプンカンプンで、撃沈しましたー


やはり基本は大事だと痛感しました。。。



・データベース設計はなぜ必要?

ほとんどの場合、サービスはデータベースを持ちます。

データベースには顧客の情報や商品の情報など様々なデータが保管されます。

サービスのプログラムを書く際に、こうしたデータやデータ同士の関係性(どの顧客がどの商品を買ったかなど)を
あらかじめ決めて置かなければいけません。

なぜならプログラムはそれらのデータを操作することが主な役割だからです。

データベース設計を行うことで、データ同士の関係性を明確にするだけでなく
効率のよいデータ操作を可能にします。
〜カリキュラム抜粋〜


ここはサラッと流してたんですが、

何気に大切なことを言ってます。


特にリレーションを多対多で作るときに

関係性をしっかり掴んでコードをあてないと

こちらの意図とは違う動きをしてしまいます。




・データベース設計はいつ行うのか

データベース設計はサービスやシステムの開発の最初の段階で行います。
プログラムを書き始めるよりも前にデータベースの設計は行っておきましょう。
〜カリキュラム抜粋〜


最初に設計しておくのか!

入れ物を先に入れんといかんのね。。。

しっかり道順を決めておかないと後々袋小路に迷い込んじゃいます。

というか迷い込んで立ち往生してましたorz



データベース設計の基礎知識

データベース設計は基本的には現実世界の要素をデータに落としこむ作業です。

現実世界の要素とは例えば顧客(ユーザー)です。

顧客をデータベースで管理するには

「顧客という概念(エンティティ)」

「一人ひとりの顧客の持つ情報(属性)」

「顧客と他の情報の関係性(リレーション)」

を決める必要があります。
〜カリキュラムより抜粋〜


定義をしっかり抑えます。




データベースを構成する要素


データベースを構成する要素は以下の3つです。

1.サービスで扱う概念(エンティティ)

サービスで扱うデータを定義します。

データベース設計ではこのデータをエンティティと言います。

・ エンティティ
エンティティとは、サービスの中で管理する必要のある概念(情報)を指します。

例えば、SNSなどのサービスでは「ユーザー」や「投稿内容」、「コメント」などの情報を管理する必要があります。

これらの情報がエンティティにあたります。


・エンティティの属性
エンティティは属性を持ちます。

映画というエンティティであれば、

タイトルや説明、公開日、監督などが属性です。



・ エンティティの属性
属性とは、エンティティが個別に持つ情報です。

ユーザーというエンティティでは、

「名前」「アドレス」「パスワード」「プロフィール写真」

が属性にあたります。



これらを踏まえると、エンティティはサービスで扱う情報を大きく捉えたものであり、
属性はエンティティそれぞれが実際に持つ情報と言えます。
〜カリキュラムより抜粋〜




エンティティと属性の例

エンティティ 属性
ユーザー 名前、アドレス、パスワード、プロフィール写真 etc
投稿内容(ツイートなど) 投稿したテキスト、投稿した写真、イイネ数 etc

実際に設計したいサービス当てはめて考える癖をつけねばと感じますね!


マックのレシートからDB設計しようといったカリキュラムの演習でもありましたが、


日常のサービスからある程度DB設計を考えてみるのも良い練習になりますね。。。



エンティティ同士の関係性(リレーション)

エンティティとエンティティの間に関係性がある場合があります。
これをリレーションといいます。

Twitterではツイートとツイートを投稿したユーザーの間には関連性があります。


・リレーション
リレーションとは、エンティティとエンティティとの間に存在する関係性のことです。

例えば、映画には、その映画を撮った監督がいます。

こういった場合映画と監督の2つのエンティティには関係性があります。
〜カリキュラムより抜粋〜



データベース設計の手順

データベース設計の手順のうち、ほとんどの場合で必須となる手順は以下の4つです。

1. データベースで管理するデータ(エンティティ)を決める

まずは、作成するサービスで管理するデータを決めます。

この作業はエンティティを決定することと同義です。


2. それぞれのデータの持つ属性を決める

エンティティが決定したら次に属性を決定します。

属性とはエンティティがそれぞれ持つデータの事でした。

ユーザーに持たせる属性は名前、アドレス、パスワードなどがあげられ、

ツイートに持たせる属性は、本文、イイネ数、投稿時間などがあげられます。


3. エンティティ同士の関係性を決める(リレーション)

エンティティ同士の関連性を決定します。

ツイートには必ず投稿したユーザーが存在します。

そこでユーザーとツイートとの間にリレーションを設定することで2つのエンティティ同士に関係性を持たせます。

もちろん他のエンティティと関係のない独立したエンティティも存在します。


4.データを実際にデータベースのテーブルとして定義する

最後に1〜3の手順を元に実際にテーブルを作成することになります。


エンティティはテーブルに相当し、属性はテーブルが持つカラムに相当します。
〜カリキュラムより抜粋〜



この流れが基本であり、一番シンプルなんですが、

身につけるためには何度も繰り返し設計しないとですね。。。






以前取り組んでいたPicktweetでもやったはずなんですが、

今回でようやく「こういうことだったんだ!」と気づいた気がします。



ただ、まだリレーションの決め方にイマイチ確信が持てないので、

それはドンドン設計しながら覚えるしかないですね!!