Mysql
 sql >> Base de données >  >> RDS >> Mysql

Guide pour concevoir une base de données pour le système de gestion des stocks dans MySQL

Ce didacticiel fournit les étapes complètes pour concevoir un schéma de base de données du système de gestion des stocks afin de gérer les fournisseurs, les vendeurs, les articles, le stock d'articles, les bons de commande et les commandes des clients.

Remarques :Généralement, les entreprises de vente au détail et de fabrication utilisent des systèmes d'inventaire. Parmi les cas d'utilisation répandus dans d'autres secteurs, ce schéma de base de données peut être utilisé, par exemple, pour la gestion des stocks hospitaliers afin d'accroître l'efficacité des chaînes d'approvisionnement des soins de santé et de réduire le gaspillage de médicaments.

Le diagramme de relation d'entité ou la conception visuelle de la base de données est illustré ci-dessous.

Base de données de gestion des stocks

Vous pouvez également consulter les didacticiels populaires, notamment Comment installer MySQL 8 sur Ubuntu 20.04 LTS, Comment installer MySQL 8 sur Windows, Comment installer MySQL Workbench sur Ubuntu, 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, base de données de sondages et d'enquêtes dans MySQL, base de données de paniers d'achat en ligne dans MySQL et apprentissage des requêtes SQL de base dans MySQL.

Base de données d'inventaire

La toute première étape consiste à créer la base de données d'inventaire. Il peut être créé à l'aide de la requête comme indiqué ci-dessous.

CREATE SCHEMA `inventory` 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. Les utilisateurs peuvent gérer leurs propres profils. De plus, les utilisateurs peuvent utiliser l'application en fonction des rôles qui leur sont attribués. Vous pouvez également vous référer au didacticiel RBAC Database dans MySql pour implémenter un système RBAC complet de gestion des rôles et des autorisations. Vous trouverez ci-dessous la description de toutes les colonnes de la table des utilisateurs.

Identifiant L'identifiant unique pour identifier l'utilisateur.
Identifiant du rôle Le rôle de l'utilisateur. Il peut s'agir d'un administrateur, d'un fournisseur, d'un vendeur et d'un client.
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.
E-mail 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.
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 Une brève présentation de l'utilisateur.
Profil Détails de l'utilisateur.

La table utilisateur avec les contraintes appropriées est illustrée ci-dessous.

CREATE TABLE `inventory`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`roleId` SMALLINT NOT NULL,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`username` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`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_username` (`username` ASC),
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.
Titre Le titre du produit à afficher sur l'inventaire.
Résumé Le résumé pour mentionner les principaux faits saillants.
Type Le type permettant de distinguer les différents types de produits.
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.
Contenu La colonne utilisée pour stocker les détails supplémentaires du produit.

Le tableau des produits avec les contraintes appropriées est illustré ci-dessous.

CREATE TABLE `inventory`.`product` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);

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 `inventory`.`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 `inventory`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

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 `inventory`.`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 `inventory`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `inventory`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `inventory`.`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 `inventory`.`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 `inventory`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `inventory`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tableau des marques

Dans cette section, nous allons concevoir le tableau des marques pour stocker les données de la marque. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des marques.

Identifiant L'identifiant unique pour identifier la marque.
Titre Le titre de la marque à afficher sur l'inventaire.
Résumé Le résumé mentionne les principaux faits saillants.
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.
Contenu La colonne utilisée pour stocker les détails supplémentaires de la marque.

Le tableau des marques avec les contraintes appropriées est illustré ci-dessous.

CREATE TABLE `inventory`.`brand` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`summary` TINYTEXT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);

Tableau des commandes

Cette section fournit le tableau pour gérer les commandes d'inventaire. La commande peut être associée au fournisseur ou au client. 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 de l'utilisateur pour identifier le fournisseur ou le client associé à la commande.
Type Le type de commande à distinguer entre bon de commande ou commande client.
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.
Totale 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.
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 `inventory`.`order` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`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,
`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 `inventory`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tableau d'adresses

Cette section fournit le tableau pour gérer l'adresse de l'utilisateur ou de la commande. L'adresse de l'utilisateur peut être utilisée pour stocker l'adresse associée à l'utilisateur. L'adresse de commande peut être utilisée pour stocker l'adresse de livraison pour les commandes de livraison à domicile. Vous trouverez ci-dessous la description de toutes les colonnes de la table d'adresses.

Identifiant L'identifiant unique pour identifier l'adresse.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur associé à l'adresse.
Identifiant de commande L'identifiant de la commande pour identifier la commande associée à l'adresse.
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.
E-mail 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.

La table d'adresses avec les contraintes appropriées est illustrée ci-dessous.

CREATE TABLE `inventory`.`address` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`orderId` BIGINT NULL DEFAULT NULL,
`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,
PRIMARY KEY (`id`),
INDEX `idx_address_user` (`userId` ASC),
CONSTRAINT `fk_address_user`
FOREIGN KEY (`userId`)
REFERENCES `inventory`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `inventory`.`address`
ADD INDEX `idx_address_order` (`orderId` ASC);
ALTER TABLE `inventory`.`address`
ADD CONSTRAINT `fk_address_order`
FOREIGN KEY (`orderId`)
REFERENCES `inventory`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tableau des articles

Dans cette section, nous allons concevoir l'élément Tableau pour stocker les détails de l'article. L'article représente les articles stockés dans l'inventaire et achetés auprès des fournisseurs. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des éléments.

Identifiant L'identifiant unique pour identifier l'article.
Identifiant du produit L'identifiant du produit pour identifier le produit associé à l'article d'inventaire.
Identifiant de marque L'identifiant de la marque pour identifier la marque associée à l'article d'inventaire.
Identifiant du fournisseur L'identifiant du fournisseur pour identifier le fournisseur associé à l'article en stock.
Identifiant de commande L'identifiant de la commande pour identifier la commande associée à l'article en stock.
Créé par L'identifiant d'utilisateur pour identifier l'utilisateur qui a ajouté l'article d'inventaire.
Mise à jour par L'identifiant d'utilisateur pour identifier l'utilisateur qui a mis à jour l'élément d'inventaire.
Unité de gestion des stocks L'identifiant pour identifier l'article en stock.
Prix de vente maximum Le prix imprimé du produit associé à l'article.
Remise La remise est accordée par le fournisseur.
Prix Le prix auquel le produit a été acheté.
Quantité La quantité totale reçue à l'inventaire.
Vendu La quantité totale vendue aux clients.
Disponible La quantité disponible sur le stock.
Défectueux Le nombre total d'articles défectueux reçus à l'inventaire ou retournés par les clients.
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.

La table d'éléments avec les contraintes appropriées est illustrée ci-dessous.

CREATE TABLE `inventory`.`item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`brandId` BIGINT NOT NULL,
`supplierId` BIGINT NOT NULL,
`orderId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`mrp` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`price` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`sold` SMALLINT(6) NOT NULL DEFAULT 0,
`available` SMALLINT(6) NOT NULL DEFAULT 0,
`defective` SMALLINT(6) NOT NULL DEFAULT 0,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_item_product` (`productId` ASC),
CONSTRAINT `fk_item_product`
FOREIGN KEY (`productId`)
REFERENCES `inventory`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `inventory`.`item`
ADD INDEX `idx_item_brand` (`brandId` ASC);
ALTER TABLE `inventory`.`item`
ADD CONSTRAINT `fk_item_brand`
FOREIGN KEY (`brandId`)
REFERENCES `inventory`.`brand` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `inventory`.`item`
ADD INDEX `idx_item_user` (`supplierId` ASC);
ALTER TABLE `inventory`.`item`
ADD CONSTRAINT `fk_item_user`
FOREIGN KEY (`supplierId`)
REFERENCES `inventory`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `inventory`.`item`
ADD INDEX `idx_item_order` (`orderId` ASC);
ALTER TABLE `inventory`.`item`
ADD CONSTRAINT `fk_item_order`
FOREIGN KEY (`orderId`)
REFERENCES `inventory`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tableau des articles de commande

Cette section fournit le tableau pour gérer les articles de commande achetés par les clients. 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 l'article L'identifiant de l'article pour identifier l'article 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 `inventory`.`order_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`itemId` 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 `inventory`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `inventory`.`order_item`
ADD INDEX `idx_order_item_item` (`itemId` ASC);
ALTER TABLE `inventory`.`order_item`
ADD CONSTRAINT `fk_order_item_item`
FOREIGN KEY (`itemId`)
REFERENCES `inventory`.`item` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `inventory`.`order_item`
ADD INDEX `idx_order_item_order` (`orderId` ASC);
ALTER TABLE `inventory`.`order_item`
ADD CONSTRAINT `fk_order_item_order`
FOREIGN KEY (`orderId`)
REFERENCES `inventory`.`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 `inventory`.`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 `inventory`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

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

Résumé

Dans ce tutoriel, nous avons discuté de la conception de la base de données d'un système de gestion d'inventaire 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 les bons de commande et les commandes des clients.

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.