Skip to content

Latest commit

 

History

History
81 lines (54 loc) · 3.61 KB

04-database.ja.md

File metadata and controls

81 lines (54 loc) · 3.61 KB

STEP4: データベース

ここまでitems.jsonに情報を保存してきましたが、このデータをデータベースに移し替えます。

📖 Reference

1. SQLiteに情報を移行する

今回は SQLiteというデータベースを使います。

  • SQLiteをインストール
  • dbフォルダに、mercari.sqlite3 というデータベースファイルを作成
  • mercari.sqlite3を開き、itemsテーブルを作成
  • itemsテーブルは以下のように定義し、スキーマを db/items.db に保存します。
  • id: int 商品ごとにユニークなID
  • name: string 商品の名前
  • category: string 商品のカテゴリ
  • image_name: string 画像のパス

items.dbはgitの管理対象にしますが、mercari.sqlite3はgitの管理対象として追加しないようにしてください。

データがデータベースに保存され、商品一覧情報を取り出すことができるように、GET /itemsPOST /itemsのエンドポイントを変更しましょう。

Items table example:

id name category image_name
1 jacket fashion 510824dfd4caed183a7a7cc2be80f24a5f5048e15b3b5338556d5bbd3f7bc267.jpg
2 ...

🔰 Point

  • jsonファイルではなくデータベース(SQLite)にデータを保存する利点は何がありますか?

2. 商品を検索する

指定したキーワードを含む商品一覧を返す、GET /searchエンドポイントを作ります。

# "jacket"という文字を含む商品一覧をリクエストする
$ curl -X GET 'http://127.0.0.1:9000/search?keyword=jacket'
# "jacket"をnameに含む商品一覧が返ってくる
{"items": [{"name": "jacket", "category": "fashion"}, ...]}

3. カテゴリの情報を別のテーブルに移す

データベースを以下のように構成しなおします。
これによってカテゴリの名前を途中で変えたとしても、全部のitemsテーブルのcategoryを修正する必要がなくなります。
GET itemsではこれまでと同様にcategoryの名前を取得したいので、テーブルをjoinしてレスポンス用のデータを作って返すように実装を更新しましょう。

items table

id name category_id image_name
1 jacket 1 510824dfd4caed183a7a7cc2be80f24a5f5048e15b3b5338556d5bbd3f7bc267.jpg
2 ...

categories table

id name
1 fashion
...

🔰 Point

  • データベースの正規化とは何でしょうか?

Next

STEP5: 仮想環境でアプリを動かす