sql >> データベース >  >> RDS >> Mysql

MySQLでオンラインショッピングカートのデータベースを設計するためのガイド

    このチュートリアルでは、ユーザー、製品、レビュー、カート、注文、および支払いを管理するためのオンラインショップおよびショッピングカートのデータベーススキーマを設計するための完全な手順を提供します。さらに、オンラインショップやショッピングカートベースのWebサイトやアプリケーションの開発にも使用できます。

    実体関連図または視覚的なデータベース設計を以下に示します。

    オンラインショッピングカート

    メモ :ゲストの注文でログインせずに注文できます。セキュリティは、MySqlのRBACデータベースをフォローすることで処理できます。

    また、UbuntuにMySQL 8をインストールする方法、WindowsにMySQL 8をインストールする方法、Windows10にWorkbenchを使用してMySQL8をインストールする方法、MySqlのRBACデータベース、MySqlのブログデータベース、MySQLのクイズデータベースなどの人気のあるチュートリアルにアクセスすることもできます。 MySQLでデータベースをポーリングおよび調査し、MySQLで基本的なSQLクエリを学習します。

    ショップデータベース

    最初のステップは、ショップデータベースを作成することです。以下に示すクエリを使用して作成できます。

    CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    文字セットutf8mb4を使用しました 幅広いキャラクターをサポートします。

    ユーザーテーブル

    このセクションでは、ユーザーテーブルを設計します ユーザー情報を保存します。同じテーブルを使用して、管理者や顧客を含むさまざまなタイプのユーザーを管理できます。また、(管理パネルからの)製品の作成者とWebサイトで行われた顧客の注文を関連付けるために使用することもできます。ユーザーは自分の注文を追跡し、ステータスを追跡できます。以下は、ユーザーテーブルのすべての列の説明です。

    Id ミドルネーム モバイル メール パスワードハッシュ 管理者 ベンダー 登録場所 最終ログイン はじめに プロフィール
    ユーザーを識別するための一意のID。
    ユーザーの名。
    ユーザーのミドルネーム。
    ユーザーの名前。
    ユーザーの携帯電話番号。ログインと登録の目的で使用できます。
    ユーザーのメールアドレス。ログインと登録の目的で使用できます。
    適切なアルゴリズムによって生成されたパスワードハッシュ。プレーンなパスワードや暗号化されたパスワードの保存は避けなければなりません。
    ユーザーが管理者であるかどうかを識別するフラグ。 RBACデータベースの設計に従ってRBACテーブルを作成する場合は、必須ではありません。
    ユーザーがショップで商品をホストできるかどうかを識別するフラグ。 RBACデータベースの設計に従ってRBACテーブルを作成する場合は、必須ではありません。
    この列は、アプリケーションを使用しているユーザーの寿命を計算するために使用できます。
    ユーザーの最後のログインを識別するために使用できます。
    製品ページに表示されるベンダーユーザーの簡単な紹介。
    製品ページに表示されるベンダーの詳細。

    適切な制約のあるユーザーテーブルは次のとおりです。

    CREATE TABLE `shop`.`user` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `firstName` VARCHAR(50) NULL DEFAULT NULL,
    `middleName` VARCHAR(50) NULL DEFAULT NULL,
    `lastName` VARCHAR(50) NULL DEFAULT NULL,
    `mobile` VARCHAR(15) NULL,
    `email` VARCHAR(50) NULL,
    `passwordHash` VARCHAR(32) NOT NULL,
    `admin` TINYINT(1) NOT NULL DEFAULT 0,
    `vendor` TINYINT(1) NOT NULL DEFAULT 0,
    `registeredAt` DATETIME NOT NULL,
    `lastLogin` DATETIME NULL DEFAULT NULL,
    `intro` TINYTEXT NULL DEFAULT NULL,
    `profile` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uq_mobile` (`mobile` ASC),
    UNIQUE INDEX `uq_email` (`email` ASC) );

    製品テーブル

    このセクションでは、製品テーブルを設計します 製品データを保存します。以下は、製品テーブルのすべての列の説明です。

    Id ユーザーID タイトル メタタイトル スラッグ 概要 タイプ SKU 価格 割引 数量 ショップ 作成場所 更新日 公開日 開始時間 終了 コンテンツ
    製品を識別するための一意のID。
    管理者またはベンダーを識別するためのユーザーID。
    ショップページと商品ページに表示される商品タイトル。
    ブラウザのタイトルとSEOに使用されるメタタイトル。
    URLを形成するためのスラッグ。
    主なハイライトに言及する要約。
    異なる製品タイプを区別するためのタイプ。
    製品在庫を追跡するための在庫管理ユニット。
    製品の価格。
    製品の割引。
    製品の利用可能な数量。
    商品が一般に購入可能かどうかを識別するために使用できます。
    製品が作成された日時を保存します。
    製品が更新された日時を保存します。
    商品がショップに公開された日時を保存します。
    商品の販売が開始された日時が保存されます。
    商品の販売が終了した日時を保存します。
    製品の追加の詳細を保存するために使用される列。

    カラム数量を使用して、製品在庫で利用可能な在庫を追跡し、設計をシンプルに保ちます。幅広い製品をカバーするために、いくつかの列で数量を指定する必要がある場合があります。可能な列は、sellQuantity、sellUnit、stockQuantity、およびstockUnitであり、sellQuantityとsellUnitを使用して購入者のショップに表示し、stockQuantityとstockUnitを使用して在庫を追跡できます。注文時に在庫を更新するときに、sellUnitをstockUnitに変換する必要がある場合もあります。適切な制約のある製品テーブルは次のとおりです。

    CREATE TABLE `shop`.`product` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `userId` BIGINT NOT NULL,
    `title` VARCHAR(75) NOT NULL,
    `metaTitle` VARCHAR(100) NULL,
    `slug` VARCHAR(100) NOT NULL,
    `summary` TINYTEXT NULL,
    `type` SMALLINT(6) NOT NULL DEFAULT 0,
    `sku` VARCHAR(100) NOT NULL,
    `price` FLOAT NOT NULL DEFAULT 0,
    `discount` FLOAT NOT NULL DEFAULT 0,
    `quantity` SMALLINT(6) NOT NULL DEFAULT 0,
    `shop` TINYINT(1) NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `publishedAt` DATETIME NULL DEFAULT NULL,
    `startsAt` DATETIME NULL DEFAULT NULL,
    `endsAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uq_slug` (`slug` ASC),
    INDEX `idx_product_user` (`userId` ASC),
    CONSTRAINT `fk_product_user`
    FOREIGN KEY (`userId`)
    REFERENCES `shop`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    製品メタ

    製品メタテーブルは、製品バナーURLなどの製品に関する追加情報を格納するために使用できます。以下は、製品メタテーブルのすべての列の説明です。

    Id 製品ID キー コンテンツ
    製品メタを識別するための一意のID。
    親製品を識別するための製品ID。
    メタを識別するキー。
    商品のメタデータを保存するために使用される列。

    適切な制約のある製品メタテーブルは次のとおりです。

    CREATE TABLE `shop`.`product_meta` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `productId` BIGINT NOT NULL,
    `key` VARCHAR(50) NOT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_meta_product` (`productId` ASC),
    UNIQUE INDEX `uq_product_meta` (`productId` ASC, `key` ASC),
    CONSTRAINT `fk_meta_product`
    FOREIGN KEY (`productId`)
    REFERENCES `shop`.`product` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB;

    製品レビュー表

    このセクションでは、製品レビューテーブルを設計します 商品レビューを保存します。以下は、製品レビューテーブルのすべての列の説明です。

    Id 製品ID 親ID タイトル 評価 公開済み 作成場所 公開日 コンテンツ
    商品レビューを識別するための一意のID。
    親製品を識別するための製品ID。
    親レビューを識別するための親ID。
    レビューのタイトル。
    レビューの評価。
    レビューが公開されているかどうかを識別するために使用できます。
    レビューが送信された日時が保存されます。
    レビューが公開された日時が保存されます。
    レビューの詳細を保存するために使用される列。

    適切な制約のある製品レビュー表は次のとおりです。

    CREATE TABLE `shop`.`product_review` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `productId` BIGINT NOT NULL,
    `parentId` BIGINT NULL DEFAULT NULL,
    `title` VARCHAR(100) NOT NULL,
    `rating` SMALLINT(6) NOT NULL DEFAULT 0,
    `published` TINYINT(1) NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `publishedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_review_product` (`productId` ASC),
    CONSTRAINT `fk_review_product`
    FOREIGN KEY (`productId`)
    REFERENCES `shop`.`product` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    ALTER TABLE `shop`.`product_review`
    ADD INDEX `idx_review_parent` (`parentId` ASC);
    ALTER TABLE `shop`.`product_review`
    ADD CONSTRAINT `fk_review_parent`
    FOREIGN KEY (`parentId`)
    REFERENCES `shop`.`product_review` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    カテゴリテーブルと製品カテゴリテーブル

    このセクションでは、カテゴリテーブルを設計します および製品カテゴリテーブル 製品カテゴリとそのマッピングを保存します。以下は、カテゴリテーブルのすべての列の説明です。

    Id 親ID タイトル メタタイトル スラッグ コンテンツ
    カテゴリを識別するための一意のID。
    親カテゴリを識別するための親ID。
    カテゴリタイトル。
    ブラウザのタイトルとSEOに使用されるメタタイトル。
    URLを形成するためのカテゴリスラッグ。
    カテゴリの詳細を保存するために使用される列。

    適切な制約のあるカテゴリテーブルは次のとおりです。

    CREATE TABLE `shop`.`category` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `parentId` BIGINT NULL DEFAULT NULL,
    `title` VARCHAR(75) NOT NULL,
    `metaTitle` VARCHAR(100) NULL DEFAULT NULL,
    `slug` VARCHAR(100) NOT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`));

    ALTER TABLE `shop`.`category`
    ADD INDEX `idx_category_parent` (`parentId` ASC);
    ALTER TABLE `shop`.`category`
    ADD CONSTRAINT `fk_category_parent`
    FOREIGN KEY (`parentId`)
    REFERENCES `shop`.`category` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    以下は、製品カテゴリテーブルのすべての列の説明です。

    製品ID カテゴリID
    商品を識別するための商品ID。
    カテゴリを識別するためのカテゴリID。

    適切な制約のある製品カテゴリテーブルは次のとおりです。

    CREATE TABLE `shop`.`product_category` (
    `productId` BIGINT NOT NULL,
    `categoryId` BIGINT NOT NULL,
    PRIMARY KEY (`productId`, `categoryId`),
    INDEX `idx_pc_category` (`categoryId` ASC),
    INDEX `idx_pc_product` (`productId` ASC),
    CONSTRAINT `fk_pc_product`
    FOREIGN KEY (`productId`)
    REFERENCES `shop`.`product` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
    CONSTRAINT `fk_pc_category`
    FOREIGN KEY (`categoryId`)
    REFERENCES `shop`.`category` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    タグテーブルと製品タグテーブル

    カテゴリおよび製品カテゴリテーブルと同様に、タグテーブルを設計できます。 および製品タグテーブル 。カテゴリとタグの主な違いを以下に示します。

    • タグテーブルではparentId列は必要ありません。
    • カテゴリの数は、ナビゲーション目的でメインメニューを形成するために使用できるため、低いままです。タグは、カテゴリと比較してより多くなる可能性があります。
    • カテゴリとタグの両方を使用して、製品を関連付けることができます。
    • 商品に割り当てるカテゴリはごくわずかですが、タグの数はもっと多くなる可能性があります。

    カートテーブルとカートアイテムテーブル

    このセクションでは、実際の注文を作成する前にユーザーの選択を保存するための仮想カートを管理するためのテーブルを提供します。ユーザーが支払いをキャンセルした場合、または支払いが失敗した場合、マーケティングチームは同じカートを放棄されたカートとして使用して、購入者について問い合わせることができます。ログインしたユーザーをカートに関連付けることもできます。以下は、カートテーブルのすべての列の説明です。

    メモ :ローカルデータ、セッション、またはRedisなどのインメモリデータベースを使用してカートデータを保存する場合は、カートテーブルとカートアイテムテーブルをオプションにすることができます。同じことが、支払い成功時に注文を作成するために参照することができます。

    Id ユーザーID セッションID トークン ステータス ミドルネーム モバイル メール 1行目 2行目 都市 作成場所 更新日 コンテンツ
    カートを識別するための一意のID。
    カートに関連付けられているユーザーまたは購入者を識別するためのユーザーID。
    カートに関連付けられている一意のセッションID。
    複数のセッションでカートを識別するためのカートに関連付けられた一意のトークン。必要に応じて、同じトークンをペイメントゲートウェイに渡すこともできます。
    カートのステータスは、[新規]、[カート]、[チェックアウト]、[有料]、[完了]、[放棄]のいずれかになります。
    ユーザーの名。
    ユーザーのミドルネーム。
    ユーザーの名前。
    ユーザーの携帯電話番号。
    ユーザーのメールアドレス。
    住所を保存する最初の行。
    住所を保存する2行目。
    住所の都市。
    住所の州。
    住所の国。
    カートが作成された日時が保存されます。
    カートが更新された日時が保存されます。
    カートの追加の詳細を保存するために使用される列。

    適切な制約のあるカートテーブルは次のとおりです。

    CREATE TABLE `shop`.`cart` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `userId` BIGINT NULL DEFAULT NULL,
    `sessionId` VARCHAR(100) NOT NULL,
    `token` VARCHAR(100) NOT NULL,
    `status` SMALLINT(6) NOT NULL DEFAULT 0,
    `firstName` VARCHAR(50) NULL DEFAULT NULL,
    `middleName` VARCHAR(50) NULL DEFAULT NULL,
    `lastName` VARCHAR(50) NULL DEFAULT NULL,
    `mobile` VARCHAR(15) NULL,
    `email` VARCHAR(50) NULL,
    `line1` VARCHAR(50) NULL DEFAULT NULL,
    `line2` VARCHAR(50) NULL DEFAULT NULL,
    `city` VARCHAR(50) NULL DEFAULT NULL,
    `province` VARCHAR(50) NULL DEFAULT NULL,
    `country` VARCHAR(50) NULL DEFAULT NULL,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_cart_user` (`userId` ASC),
    CONSTRAINT `fk_cart_user`
    FOREIGN KEY (`userId`)
    REFERENCES `shop`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    以下は、カートアイテムテーブルのすべての列の説明です。

    Id 製品ID カートID SKU 価格 割引 数量 アクティブ 作成場所 更新日 コンテンツ
    カートアイテムを識別するための一意のID。
    カートアイテムに関連付けられている商品を識別するための商品ID。
    カートアイテムに関連付けられているカートを識別するためのカートID。
    購入時の製品のSKU。
    購入時の製品の価格。
    購入時の商品の割引。
    ユーザーが選択した商品の数量。
    製品がカートでアクティブかどうかを識別するフラグ。同じ商品が同じカートに複数回追加されるのを防ぐために使用できます。
    カートアイテムが作成された日時を保存します。
    カートアイテムが更新された日時が保存されます。
    カートアイテムの追加の詳細を保存するために使用される列。

    適切な制約のあるカートアイテムテーブルは次のとおりです。

    CREATE TABLE `shop`.`cart_item` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `productId` BIGINT NOT NULL,
    `cartId` BIGINT NOT NULL,
    `sku` VARCHAR(100) NOT NULL,
    `price` FLOAT NOT NULL DEFAULT 0,
    `discount` FLOAT NOT NULL DEFAULT 0,
    `quantity` SMALLINT(6) NOT NULL DEFAULT 0,
    `active` TINYINT(1) NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_cart_item_product` (`productId` ASC),
    CONSTRAINT `fk_cart_item_product`
    FOREIGN KEY (`productId`)
    REFERENCES `shop`.`product` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    ALTER TABLE `shop`.`cart_item`
    ADD INDEX `idx_cart_item_cart` (`cartId` ASC);
    ALTER TABLE `shop`.`cart_item`
    ADD CONSTRAINT `fk_cart_item_cart`
    FOREIGN KEY (`cartId`)
    REFERENCES `shop`.`cart` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    注文テーブルと注文アイテムテーブル

    このセクションでは、店舗注文を管理するためのテーブルを提供します。ログインしたユーザーを注文に関連付けることもできます。以下は、注文テーブルのすべての列の説明です。

    Id ユーザーID セッションID トークン ステータス 小計 アイテムの割引 税金 配送 合計 プロモーション 割引 総計 ミドルネーム モバイル メール 1行目 2行目 都市 作成場所 更新日 コンテンツ
    注文を識別するための一意のID。
    注文に関連付けられているユーザーまたは購入者を識別するためのユーザーID。
    注文に関連付けられた一意のセッションID。
    複数のセッションで注文を識別するための注文に関連付けられた一意のトークン。必要に応じて、同じトークンをペイメントゲートウェイに渡すこともできます。
    注文のステータスは、[新規]、[チェックアウト]、[支払い済み]、[失敗]、[発送済み]、[配信済み]、[返品済み]、[完了]のいずれかになります。
    注文アイテムの合計金額。
    注文アイテムの合計割引。
    注文アイテムに対する税金。
    注文商品の送料。
    注文の合計金額(税金と送料を含む)。アイテム割引は含まれません。
    注文のプロモーションコード。
    プロモーションコードまたはストア割引に基づく注文の合計割引。
    購入者が支払う注文の総計。
    ユーザーの名。
    ユーザーのミドルネーム。
    ユーザーの名前。
    ユーザーの携帯電話番号。
    ユーザーのメールアドレス。
    住所を保存する最初の行。
    住所を保存する2行目。
    住所の都市。
    住所の州。
    住所の国。
    注文が作成された日時が保存されます。
    注文が更新された日時が保存されます。
    注文の追加の詳細を保存するために使用される列。

    適切な制約のある注文表は次のとおりです。

    CREATE TABLE `shop`.`order` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `userId` BIGINT NULL DEFAULT NULL,
    `sessionId` VARCHAR(100) NOT NULL,
    `token` VARCHAR(100) NOT NULL,
    `status` SMALLINT(6) NOT NULL DEFAULT 0,
    `subTotal` FLOAT NOT NULL DEFAULT 0,
    `itemDiscount` FLOAT NOT NULL DEFAULT 0,
    `tax` FLOAT NOT NULL DEFAULT 0,
    `shipping` FLOAT NOT NULL DEFAULT 0,
    `total` FLOAT NOT NULL DEFAULT 0,
    `promo` VARCHAR(50) NULL DEFAULT NULL,
    `discount` FLOAT NOT NULL DEFAULT 0,
    `grandTotal` FLOAT NOT NULL DEFAULT 0,
    `firstName` VARCHAR(50) NULL DEFAULT NULL,
    `middleName` VARCHAR(50) NULL DEFAULT NULL,
    `lastName` VARCHAR(50) NULL DEFAULT NULL,
    `mobile` VARCHAR(15) NULL,
    `email` VARCHAR(50) NULL,
    `line1` VARCHAR(50) NULL DEFAULT NULL,
    `line2` VARCHAR(50) NULL DEFAULT NULL,
    `city` VARCHAR(50) NULL DEFAULT NULL,
    `province` VARCHAR(50) NULL DEFAULT NULL,
    `country` VARCHAR(50) NULL DEFAULT NULL,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_order_user` (`userId` ASC),
    CONSTRAINT `fk_order_user`
    FOREIGN KEY (`userId`)
    REFERENCES `shop`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    以下は、注文アイテムテーブルのすべての列の説明です。

    Id 製品ID 注文ID SKU 価格 割引 数量 作成場所 更新日 コンテンツ
    注文した商品を識別するための一意のID。
    注文した商品に関連付けられている商品を識別するための商品ID。
    注文されたアイテムに関連付けられた注文を識別するための注文ID。
    購入時の製品のSKU。
    購入時の製品の価格。
    購入時の商品の割引。
    ユーザーが選択した商品の数量。
    注文したアイテムが作成された日時が保存されます。
    注文した商品が更新された日時が保存されます。
    注文した商品の詳細を保存するために使用される列。

    適切な制約のある注文アイテムテーブルは次のとおりです。

    CREATE TABLE `shop`.`order_item` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `productId` BIGINT NOT NULL,
    `orderId` BIGINT NOT NULL,
    `sku` VARCHAR(100) NOT NULL,
    `price` FLOAT NOT NULL DEFAULT 0,
    `discount` FLOAT NOT NULL DEFAULT 0,
    `quantity` SMALLINT(6) NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_order_item_product` (`productId` ASC),
    CONSTRAINT `fk_order_item_product`
    FOREIGN KEY (`productId`)
    REFERENCES `shop`.`product` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    ALTER TABLE `shop`.`order_item`
    ADD INDEX `idx_order_item_order` (`orderId` ASC);
    ALTER TABLE `shop`.`order_item`
    ADD CONSTRAINT `fk_order_item_order`
    FOREIGN KEY (`orderId`)
    REFERENCES `shop`.`order` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    トランザクションテーブル

    また、バイヤーによる注文の支払いを追跡し、簿記を行うためのトランザクションテーブルも必要です。同じテーブルを使用して、注文の一部または全額の払い戻しを記録することもできます。以下は、トランザクションテーブルのすべての列の説明です。

    Id ユーザーID 注文ID コード タイプ モード ステータス 作成場所 更新日 コンテンツ
    トランザクションを識別するための一意のID。
    トランザクションに関連付けられているユーザーを識別するためのユーザーID。
    トランザクションに関連付けられた注文を識別するための注文ID。
    支払いゲートウェイによって提供される支払いID。
    注文トランザクションのタイプは、クレジットまたはデビットのいずれかです。
    注文トランザクションのモードは、オフライン、代金引換、小切手、ドラフト、有線、オンラインのいずれかです。
    注文トランザクションのステータスは、新規、キャンセル、失敗、保留中、拒否、拒否、成功のいずれかになります。
    注文トランザクションが作成された日時が保存されます。
    注文トランザクションが更新された日時が保存されます。
    トランザクションの追加の詳細を格納するために使用される列。

    適切な制約のあるトランザクションテーブルは次のとおりです。

    CREATE TABLE `shop`.`transaction` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `userId` BIGINT NOT NULL,
    `orderId` BIGINT NOT NULL,
    `code` VARCHAR(100) NOT NULL,
    `type` SMALLINT(6) NOT NULL DEFAULT 0,
    `mode` SMALLINT(6) NOT NULL DEFAULT 0,
    `status` SMALLINT(6) NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_transaction_user` (`userId` ASC),
    CONSTRAINT `fk_transaction_user`
    FOREIGN KEY (`userId`)
    REFERENCES `shop`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    ALTER TABLE `shop`.`transaction`
    ADD INDEX `idx_transaction_order` (`orderId` ASC);
    ALTER TABLE `shop`.`transaction`
    ADD CONSTRAINT `fk_transaction_order`
    FOREIGN KEY (`orderId`)
    REFERENCES `shop`.`order` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    アドレステーブル

    アドレステーブルを使用すると、実際の実装に応じて、カートテーブルと注文テーブルの冗長な列を回避できます。適切な外部キーを使用して、カートテーブルと注文テーブルに直接マッピングできます。

    概要

    このチュートリアルでは、ユーザーを保存し、製品の在庫を管理するためのオンラインショッピングカートのデータベース設計について説明しました。また、カートを管理し、カートアイテムを保存し、オンラインショップで注文を管理するためのデータベース設計も提供しました。簡略化されたオンラインショッピングフローチャートは、ショッピングカートを実装するために参照できます。

    コメントを送信して、ディスカッションに参加できます。 BlogおよびPoll&Surveyアプリケーションのデータベースの設計にも興味があるかもしれません。完全なデータベーススキーマはGitHubでも入手できます。


    1. JDBC仕様は「?」を防止しますか? (引用符の外で)演算子として使用されることから?

    2. アプリケーションユーザーと行レベルのセキュリティ

    3. SQLコマンドの概要

    4. SQLiteクエリ結果をHTMLテーブルとしてフォーマットする