Ce didacticiel fournit des étapes complètes pour concevoir un schéma de base de données de boutiques en ligne et de paniers d'achat afin de gérer les utilisateurs, les produits, les avis, les paniers, les commandes et les paiements. Il peut également être utilisé pour développer une boutique en ligne et des sites Web ou des applications basés sur des paniers d'achat.
Le diagramme de relation d'entité ou la conception visuelle de la base de données est illustré ci-dessous.
Panier en ligne
Remarques :Il permet aux commandes des invités de passer la commande sans se connecter. La sécurité peut être gérée en suivant la base de données RBAC dans MySql.
Vous pouvez également consulter les didacticiels populaires, notamment Comment installer MySQL 8 sur Ubuntu, Comment installer MySQL 8 sur Windows, Comment installer MySQL 8 avec Workbench sur Windows 10, Base de données RBAC dans MySql, Base de données de blogs dans MySql, Base de données de quiz dans MySQL, Poll &Survey Database sur MySQL et apprenez les requêtes SQL de base dans MySQL.
Base de données de la boutique
La toute première étape consiste à créer la base de données de la boutique. Il peut être créé à l'aide de la requête comme indiqué ci-dessous.
CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
J'ai utilisé le jeu de caractères utf8mb4 pour prendre en charge un large éventail de caractères.
Tableau des utilisateurs
Dans cette section, nous allons concevoir la table des utilisateurs pour stocker les informations de l'utilisateur. Le même tableau peut être utilisé pour gérer différents types d'utilisateurs, y compris les administrateurs et les clients. Il peut également être utilisé pour mettre en relation les créateurs de produits (depuis le panneau d'administration) et les commandes des clients passées sur le site Web. Les utilisateurs peuvent suivre leurs propres commandes et suivre le statut. Vous trouverez ci-dessous la description de toutes les colonnes de la table des utilisateurs.
Identifiant | L'identifiant unique pour identifier l'utilisateur. |
Prénom | Le prénom de l'utilisateur. |
Deuxième prénom | Le deuxième prénom de l'utilisateur. |
Nom de famille | Le nom de famille de l'utilisateur. |
Mobile | Le numéro de portable de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement. |
L'adresse e-mail de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement. | |
Hachage du mot de passe | Le hachage du mot de passe généré par l'algorithme approprié. Nous devons éviter de stocker des mots de passe simples ou cryptés. |
Administrateur | L'indicateur pour identifier si l'utilisateur est un administrateur. Ce n'est pas obligatoire si les tables RBAC sont créées en suivant la conception de la base de données RBAC. |
Fournisseur | L'indicateur pour identifier si l'utilisateur peut héberger un produit dans la boutique. Ce n'est pas obligatoire si les tables RBAC sont créées en suivant la conception de la base de données RBAC. |
Enregistré à | Cette colonne peut être utilisée pour calculer la durée de vie de l'utilisateur avec l'application. |
Dernière connexion | Il peut être utilisé pour identifier la dernière connexion de l'utilisateur. |
Introduction | La brève présentation de l'utilisateur vendeur à afficher sur la page produit. |
Profil | Les détails du fournisseur à afficher sur la page produit. |
La table utilisateur avec les contraintes appropriées est illustrée ci-dessous.
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) );
Tableau des produits
Dans cette section, nous allons concevoir le tableau des produits pour stocker les données du produit. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des produits.
Identifiant | L'identifiant unique pour identifier le produit. |
Identifiant utilisateur | L'ID utilisateur permettant d'identifier l'administrateur ou le fournisseur. |
Titre | Le titre du produit à afficher sur la page de la boutique et la page du produit. |
Méta-titre | Le méta-titre à utiliser pour le titre du navigateur et le référencement. |
limace | Le slug pour former l'URL. |
Résumé | Le résumé pour mentionner les principaux faits saillants. |
Type | Le type permettant de distinguer les différents types de produits. |
SKU | L'unité de gestion des stocks pour suivre l'inventaire des produits. |
Prix | Le prix du produit. |
Remise | La remise sur le produit. |
Quantité | La quantité disponible du produit. |
Boutique | Il peut être utilisé pour identifier si le produit est disponible publiquement pour les achats. |
Créé à | Il stocke la date et l'heure auxquelles le produit est créé. |
Mis à jour à | Il stocke la date et l'heure auxquelles le produit est mis à jour. |
Publié à | Il stocke la date et l'heure auxquelles le produit est publié sur la Boutique. |
Commence à | Il stocke la date et l'heure auxquelles la vente du produit commence. |
Se termine à | Il stocke la date et l'heure auxquelles la vente du produit se termine. |
Contenu | La colonne utilisée pour stocker les détails supplémentaires du produit. |
Il utilise la quantité de colonne pour suivre le stock disponible dans l'inventaire du produit afin de simplifier la conception. Il peut être nécessaire de spécifier la quantité par plusieurs colonnes pour couvrir une large gamme de produits. Les colonnes possibles peuvent être sellQuantity, sellUnit, stockQuantity et stockUnit où sellQuantity et sellUnit peuvent être utilisées pour être affichées sur la boutique pour les acheteurs et stockQuantity et stockUnit peuvent être utilisées pour suivre l'inventaire. Il peut également être nécessaire de convertir sellUnit en stockUnit lors de la mise à jour de l'inventaire lors de la commande. Le tableau des produits avec les contraintes appropriées est illustré ci-dessous.
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);
Méta produit
La méta-table des produits peut être utilisée pour stocker des informations supplémentaires sur les produits, y compris l'URL de la bannière du produit, etc. Vous trouverez ci-dessous la description de toutes les colonnes de la méta-table des produits.
Identifiant | L'identifiant unique pour identifier la méta du produit. |
Identifiant du produit | L'identifiant du produit pour identifier le produit parent. |
Clé | La clé identifiant la méta. |
Contenu | La colonne utilisée pour stocker les métadonnées du produit. |
La méta-table du produit avec les contraintes appropriées est illustrée ci-dessous.
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;
Tableau d'évaluation des produits
Dans cette section, nous allons concevoir le tableau d'évaluation des produits pour stocker les avis sur les produits. Vous trouverez ci-dessous la description de toutes les colonnes du tableau d'examen des produits.
Identifiant | L'identifiant unique pour identifier l'avis sur le produit. |
Identifiant du produit | L'identifiant du produit pour identifier le produit parent. |
Identifiant parent | L'identifiant parent pour identifier l'avis parent. |
Titre | Le titre de l'avis. |
Évaluation | La note de l'avis. |
Publié | Il peut être utilisé pour déterminer si l'avis est accessible au public. |
Créé à | Il stocke la date et l'heure auxquelles l'avis est soumis. |
Publié à | Il stocke la date et l'heure auxquelles l'avis est publié. |
Contenu | La colonne utilisée pour stocker les détails de l'avis. |
Le tableau d'examen des produits avec les contraintes appropriées est illustré ci-dessous.
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;
Tableau des catégories et tableau des catégories de produits
Dans cette section, nous allons concevoir le tableau des catégories et tableau des catégories de produits pour stocker les catégories de produits et leurs mappages. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des catégories.
Identifiant | L'identifiant unique pour identifier la catégorie. |
Identifiant parent | L'identifiant parent pour identifier la catégorie parent. |
Titre | Le titre de la catégorie. |
Méta-titre | Le méta-titre à utiliser pour le titre du navigateur et le référencement. |
limace | Le slug de catégorie pour former l'URL. |
Contenu | La colonne utilisée pour stocker les détails de la catégorie. |
Le tableau des catégories avec les contraintes appropriées est illustré ci-dessous.
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;
Vous trouverez ci-dessous la description de toutes les colonnes du tableau des catégories de produits.
Identifiant du produit | L'identifiant du produit pour identifier le produit. |
Identifiant de catégorie | L'identifiant de catégorie pour identifier la catégorie. |
Le tableau des catégories de produits avec les contraintes appropriées est illustré ci-dessous.
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);
Tableau des balises et tableau des balises de produit
Semblable aux tableaux de catégories et de catégories de produits, nous pouvons concevoir le tableau de balises et Tableau des balises de produit . Les principales différences entre la catégorie et le tag sont répertoriées ci-dessous.
- La colonne parentId n'est pas obligatoire dans le tableau des balises.
- Le nombre de catégories reste faible car celles-ci peuvent être utilisées pour former le menu principal à des fins de navigation. Les tags peuvent être plus nombreux que les catégories.
- Les catégories et les balises peuvent être utilisées pour associer les produits.
- Il ne faut attribuer que quelques catégories à un produit alors que le nombre de balises peut être supérieur.
Tableau du panier et tableau des articles du panier
Cette section fournit les tables pour gérer les chariots virtuels pour stocker la sélection de l'utilisateur avant de créer la commande réelle. Si l'utilisateur annule le paiement ou si le paiement échoue, les mêmes paniers peuvent être utilisés comme panier abandonné par l'équipe marketing pour se renseigner sur les acheteurs. Un utilisateur connecté peut également être associé au panier. Vous trouverez ci-dessous la description de toutes les colonnes du tableau du panier.
Remarques :La table du panier et la table des articles du panier peuvent être rendues facultatives si les données locales, la session ou la base de données en mémoire comme Redis sont utilisées pour stocker les données du panier. La même chose peut être renvoyée pour créer la commande en cas de succès du paiement.
Identifiant | L'identifiant unique pour identifier le panier. |
Identifiant utilisateur | L'identifiant de l'utilisateur pour identifier l'utilisateur ou l'acheteur associé au panier. |
Identifiant de session | L'identifiant de session unique associé au panier. |
Jeton | Le jeton unique associé au panier pour identifier le panier sur plusieurs sessions. Le même jeton peut également être transmis à la passerelle de paiement si nécessaire. |
Statut | Le statut du panier peut être Nouveau, Panier, Paiement, Payé, Terminé et Abandonné. |
Prénom | Le prénom de l'utilisateur. |
Deuxième prénom | Le deuxième prénom de l'utilisateur. |
Nom de famille | Le nom de famille de l'utilisateur. |
Mobile | Le numéro de portable de l'utilisateur. |
L'adresse e-mail de l'utilisateur. | |
Ligne 1 | La première ligne pour stocker l'adresse. |
Ligne 2 | La deuxième ligne pour stocker l'adresse. |
Ville | La ville de l'adresse. |
Province | La province de l'adresse. |
Pays | Le pays de l'adresse. |
Créé à | Il stocke la date et l'heure auxquelles le panier est créé. |
Mis à jour à | Il stocke la date et l'heure auxquelles le panier est mis à jour. |
Contenu | La colonne utilisée pour stocker les détails supplémentaires du panier. |
Le tableau du panier avec les contraintes appropriées est illustré ci-dessous.
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);
Vous trouverez ci-dessous la description de toutes les colonnes du tableau des éléments du panier.
Identifiant | L'identifiant unique pour identifier l'article du panier. |
Identifiant du produit | L'identifiant du produit pour identifier le produit associé à l'article du panier. |
Identifiant du panier | L'identifiant du panier pour identifier le panier associé à l'article du panier. |
SKU | Le SKU du produit lors de son achat. |
Prix | Le prix du produit lors de son achat. |
Remise | La remise du produit lors de son achat. |
Quantité | La quantité du produit sélectionné par l'utilisateur. |
Actif | L'indicateur pour identifier si le produit est actif sur le panier. Il peut être utilisé pour éviter que le même produit ne soit ajouté plusieurs fois au même panier. |
Créé à | Il stocke la date et l'heure auxquelles l'article du panier est créé. |
Mis à jour à | Il stocke la date et l'heure auxquelles l'article du panier est mis à jour. |
Contenu | La colonne utilisée pour stocker les détails supplémentaires de l'article du panier. |
Le tableau des articles du panier avec les contraintes appropriées est illustré ci-dessous.
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;
Tableau des commandes et tableau des articles commandés
Cette section fournit les tables pour gérer les commandes du magasin. Un utilisateur connecté peut également être associé à la commande. Vous trouverez ci-dessous la description de toutes les colonnes du tableau de commande.
Identifiant | L'identifiant unique pour identifier la commande. |
Identifiant utilisateur | L'identifiant utilisateur pour identifier l'utilisateur ou l'acheteur associé à la commande. |
Identifiant de session | L'identifiant de session unique associé à la commande. |
Jeton | Le jeton unique associé à la commande pour l'identifier sur plusieurs sessions. Le même jeton peut également être transmis à la passerelle de paiement si nécessaire. |
Statut | Le statut de la commande peut être Nouveau, Paiement, Payé, Échec, Expédié, Livré, Renvoyé et Terminé. |
Sous-total | Le prix total des articles de la commande. |
Remise sur les articles | La remise totale des articles de la commande. |
Taxe | La taxe sur les articles de la commande. |
Livraison | Les frais d'expédition des articles commandés. |
Total | Le prix total de la Commande incluant les taxes et les frais d'expédition. Cela exclut la remise sur les articles. |
Promotion | Le code promo de la Commande. |
Remise | La remise totale de la commande en fonction du code promotionnel ou de la remise en magasin. |
Total général | Le grand total de la commande à payer par l'acheteur. |
Prénom | Le prénom de l'utilisateur. |
Deuxième prénom | Le deuxième prénom de l'utilisateur. |
Nom de famille | Le nom de famille de l'utilisateur. |
Mobile | Le numéro de portable de l'utilisateur. |
L'adresse e-mail de l'utilisateur. | |
Ligne 1 | La première ligne pour stocker l'adresse. |
Ligne 2 | La deuxième ligne pour stocker l'adresse. |
Ville | La ville de l'adresse. |
Province | La province de l'adresse. |
Pays | Le pays de l'adresse. |
Créé à | Il stocke la date et l'heure auxquelles la commande est créée. |
Mis à jour à | Il stocke la date et l'heure auxquelles la commande est mise à jour. |
Contenu | La colonne utilisée pour stocker les détails supplémentaires de la commande. |
La table de commande avec les contraintes appropriées est illustrée ci-dessous.
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);
Vous trouverez ci-dessous la description de toutes les colonnes du tableau des éléments de commande.
Identifiant | L'identifiant unique pour identifier l'article commandé. |
Identifiant du produit | L'identifiant du produit pour identifier le produit associé à l'article commandé. |
Identifiant de commande | L'identifiant de la commande pour identifier la commande associée à l'article commandé. |
SKU | Le SKU du produit lors de son achat. |
Prix | Le prix du produit lors de son achat. |
Remise | La remise du produit lors de son achat. |
Quantité | La quantité du produit sélectionné par l'utilisateur. |
Créé à | Il stocke la date et l'heure auxquelles l'article commandé est créé. |
Mis à jour à | Il stocke la date et l'heure auxquelles l'article commandé est mis à jour. |
Contenu | La colonne utilisée pour stocker les détails supplémentaires de l'article commandé. |
Le tableau des articles de commande avec les contraintes appropriées est illustré ci-dessous.
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;
Tableau des transactions
Nous avons également besoin d'un tableau des transactions pour suivre les paiements des commandes effectués par l'acheteur et pour la comptabilité. Nous pouvons également utiliser le même tableau pour enregistrer le remboursement partiel ou total de la commande. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des transactions.
Identifiant | L'identifiant unique pour identifier la transaction. |
Identifiant utilisateur | L'identifiant de l'utilisateur pour identifier l'utilisateur associé à la transaction. |
Identifiant de commande | L'identifiant de la commande pour identifier la commande associée à la transaction. |
Code | L'identifiant de paiement fourni par la passerelle de paiement. |
Type | Le type de transaction de commande peut être crédit ou débit. |
Mode | Le mode de transaction de la commande peut être Hors ligne, Paiement à la livraison, Chèque, Brouillon, Virement bancaire et En ligne. |
Statut | Le statut de la transaction de commande peut être Nouveau, Annulé, Échec, En attente, Refusé, Rejeté et Réussi. |
Créé à | Il stocke la date et l'heure auxquelles la transaction de commande est créée. |
Mis à jour à | Il stocke la date et l'heure auxquelles la transaction de commande est mise à jour. |
Contenu | La colonne utilisée pour stocker les détails supplémentaires de la transaction. |
Le tableau des transactions avec les contraintes appropriées est illustré ci-dessous.
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;
Tableau d'adresses
Une table d'adresses peut être utilisée pour éviter les colonnes redondantes dans la table Panier et Commande en fonction de l'implémentation réelle. Il peut être directement mappé à la table de panier et à la table de commande à l'aide des clés étrangères appropriées.
Résumé
Dans ce didacticiel, nous avons discuté de la conception de la base de données d'un panier d'achat en ligne pour stocker les utilisateurs et gérer l'inventaire des produits. Il a également fourni la conception de la base de données pour gérer le panier, stocker les articles du panier et gérer les commandes sur une boutique en ligne. L'organigramme d'achat en ligne simplifié peut être utilisé pour mettre en œuvre un panier d'achat.
Vous pouvez soumettre vos commentaires pour participer à la discussion. Vous pouvez également être intéressé par la conception de la base de données des applications Blog et Poll &Survey. Le schéma complet de la base de données est également disponible sur GitHub.