【テーブル定義編】ハンバーガー屋のモバイルオーダーシステムを作成しよう
#モバイルオーダーシステム

【テーブル定義編】ハンバーガー屋のモバイルオーダーシステム作成


はじめに

最近、多くのお店でモバイルオーダーシステムが導入されていて、お客さんにとっても便利で、お店にとっても効率的ですよね。そこで、自分も後学としてハンバーガー店向けのモバイルオーダーシステムの開発プロセス1として、まずPostgreSQLを使用したテーブル定義を作成してみました。

Shopsテーブル

最初のテーブルは、店舗情報を格納する「Shopsテーブル」です。このテーブルには、店舗のID、店舗名、住所、営業時間などが格納されます。また、店舗ごとに異なる店舗IDを主キーに設定することで、複数の店舗情報を管理することができます。

CREATE TABLE shops (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    address VARCHAR(255) NOT NULL,
    phone VARCHAR(20) NOT NULL,
    opening_hours VARCHAR(50) NOT NULL,
    latitude DOUBLE PRECISION NOT NULL,
    longitude DOUBLE PRECISION NOT NULL
);


Usersテーブル

次に紹介するのは、顧客情報を格納する「Usersテーブル」です。このテーブルには、顧客ID、顧客名、電話番号、メールアドレスなどが格納されます。顧客IDを主キーに設定することで、顧客ごとの注文履歴を管理することができます。

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    phone VARCHAR(20) NOT NULL
);


Productsテーブル、Ordersテーブル、Order_itemsテーブル

最後に紹介するのは、メニュー商品情報、注文情報、注文された商品の詳細を格納する3つのテーブルです。
「Productsテーブル」には、商品ID、商品名、値段、商品説明などが格納されます。顧客が注文する際に、このテーブルの情報を参照し、注文する商品を決定します。
「Ordersテーブル」には、注文ID、顧客ID、注文日時、支払い方法、注文ステータスなどが格納されます。このテーブルを用いて、顧客ごとの注文履歴を管理し、ステータスを更新することができます。
「Order_itemsテーブル」には、注文ID、商品ID、数量、値段などが格納されます。このテーブルを用いて、注文された商品の詳細を管理することができます。

-- products
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    image_url VARCHAR(255),
    shop_id INTEGER REFERENCES shops(id)
);

-- orders
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    user_id INTEGER REFERENCES users(id),
    shop_id INTEGER REFERENCES shops(id),
    status VARCHAR(50) NOT NULL,
    created_at TIMESTAMP NOT NULL,
    updated_at TIMESTAMP NOT NULL
);

-- order_items
CREATE TABLE order_items (
    id SERIAL PRIMARY KEY,
    order_id INTEGER REFERENCES orders(id),
    product_id INTEGER REFERENCES products(id),
    quantity INTEGER NOT NULL,
    price DECIMAL(10, 2) NOT NULL
);


まとめ

今回は、ハンバーガー店向けモバイルオーダーシステムのテーブル定義について学びました。適切なテーブル設計により、顧客に使いやすいシステムを提供し、同時に店舗の業務効率も向上させることができます。(自分はまだまだですが、、、)
次回はrust言語でAPIサーバーを作成する記事を書こうと思います!!