データベースとは?
-
大悟
ノブ、データベースって何? -
ノブ
大悟、データベースってのはさ、データを管理・蓄積する仕組みのことやで。アプリやサイトで使うデータを効率的に扱えるようにするんや。
ER図とは?
- 大悟
で、ER図ってなんなん? - ノブ
ER図は、Entity Relationship Diagramの略で、データベースの構造を視覚的に表す図のことや。これを使ってデータ同士の関係性を整理してデータベース設計を行うんや。
データベース設計のポイント
データベース設計における重要なポイント
-
大悟
ノブ、データベース設計って何が大事なん? -
ノブ
大悟、いい質問やな。データベース設計で大事なのは、正規化やリレーションの設定、適切なデータ型の選択やインデックスの設定などやで。 -
大悟
正規化ってなんや? -
ノブ
正規化っていうのは、データベースの構造を効率的にするために、テーブルのデータを分割して、重複をなくすことや。 -
大悟
リレーションって? -
ノブ
リレーションは、テーブル同士の関係性を表すんや。例えば、ユーザーが商品を出品するアプリだったら、ユーザーテーブルと商品テーブルが関連付けられるようにリレーションを設定するわけや。 -
大悟
で、データ型って? -
ノブ
データ型は、データベースに保存するデータの種類を表すんや。例えば、整数型や文字列型、日付型とか。これを適切に選択することで、データを効率的に管理できるんや。 -
大悟
インデックスって何? -
ノブ
インデックスは、データベースの検索速度を向上させるための仕組みや。データの並び順を記録しておくことで、検索が早くなるんや。ただ、インデックスを設定すると、データの追加や更新が遅くなる場合もあるから、適切な設定が大事やで。
実践例:フリーマーケットアプリのデータベース設計
フリーマーケットアプリのデータベース設計を題材にした実践例を紹介
-
大悟
ノブ、じゃあ実際にフリーマーケットアプリのデータベース設計をしてみたいんやけど、どうすればいい? -
ノブ
いいんちゃう?フリーマーケットアプリのデータベース設計は、ユーザー管理機能や商品出品機能、商品購入機能などのテーブルが必要になるから、それぞれのテーブルの設計を考えてみようや。 -
大悟
ユーザーテーブルには、ユーザーIDとか名前とかメールアドレスとかが必要やろ? -
ノブ
そうや!他にもパスワードや住所などの情報も必要になるで。 -
大悟
商品テーブルには、商品名や説明、値段とかが必要やな? -
ノブ
ああ、それに加えて出品者IDやカテゴリーID、商品の状態や配送方法なども必要やで。 -
大悟
購入履歴テーブルはどんな感じにすればいいん? -
ノブ
購入履歴テーブルは、購入者ID、出品者ID、商品IDなどの情報を持っておくといいで。これで、誰がどの商品を購入したかが分かるようになるんや。 -
大悟
ノブ、具体的な例で教えて! -
ノブ
仕方ないのお、例えばフリーマーケットアプリのデータベース設計やったら、ユーザー、商品、購入履歴などのテーブルが必要になるわな。それぞれのテーブル間のリレーションをER図で表現して、データベース設計を行うんじゃ -
大悟
じゃあ、ER図を書く流れを教えてくれ! -
ノブ
おっけー。まず、全てのテーブルとそのカラムをリストアップするんや。それから、テーブル同士の関係を線で繋いでいくで。 -
大悟
関係って何? -
ノブ
関係ってのは、一つのテーブルのデータが他のテーブルのデータとどんな関係があるのかってことや。例えば、ユーザーと商品の関係は「1対多」やな。1人のユーザーが複数の商品を出品できるから。 -
大悟
ユーザーテーブルは、ユーザーID、名前、メールアドレス、パスワード、住所とかが必要やな。 -
ノブ
せや。それに加えて、商品テーブルには、商品ID、商品名、説明、値段、出品者ID、カテゴリーID、商品の状態、配送方法とかが必要や。 -
大悟
じゃあ、購入履歴テーブルは、購入者ID、出品者ID、商品IDなどの情報を持っておくんやな? -
ノブ
ああ、そうや。これで誰がどの商品を購入したかが分かるようになるで。
[User] [Product] [Purchase]
+ user_id [PK] <-----+ seller_id [FK] + buyer_id [FK]
+ name + product_id [PK] ------>+ product_id [FK]
+ email + product_name + seller_id [FK]
+ password + description
+ address + price
+ category_id
+ condition
+ shipping_method
markdown形式("databese.yml"に記述するもの)
## ER図
### User
| Column | Type |
| --------- | ------- |
| user_id | integer |
| name | string |
| email | string |
| password | string |
| address | string |
### Product
| Column | Type |
| --------------- | ------- |
| product_id | integer |
| product_name | string |
| description | text |
| price | integer |
| seller_id | integer |
| category_id | integer |
| condition | string |
| shipping_method | string |
### Purchase
| Column | Type |
| ---------- | ------- |
| buyer_id | integer |
| product_id | integer |
| seller_id | integer |
実際の見え方(READE.MEにはこう映る)
User
| Column | Type |
|---|---|
| user_id | integer |
| name | string |
| string | |
| password | string |
| address | string |
Product
| Column | Type |
|---|---|
| product_id | integer |
| product_name | string |
| description | text |
| price | integer |
| seller_id | integer |
| category_id | integer |
| condition | string |
| shipping_method | string |
Purchase
| Column | Type |
|---|---|
| buyer_id | integer |
| product_id | integer |
| seller_id | integer |
- ノブ
このようにmarkdown形式だと、表形式で表せることができるんやで!ただテーブル間の関係性を表現する線はMarkdown形式では直接書くことはできんのじゃ。せやから、テーブル間の関係性については文章で説明することが望ましい。
まとめ
- ノブ
「データベース設計で大事なポイントは、正規化やリレーションの設定、適切なデータ型の選択、インデックスの設定などがあるど。これらを理解し、効率的なデータベース設計ができるようになると、アプリやサイトの開発がスムーズに進むじゃろ」