Deze zelfstudie biedt de volledige stappen voor het ontwerpen van een databaseschema van het voorraadbeheersysteem om de leveranciers, verkopers, artikelen, artikelvoorraad, inkooporders en klantorders te beheren.
Opmerkingen :Gewoonlijk maken bedrijven in de detailhandel en productie gebruik van voorraadsystemen. Onder wijdverbreide gebruiksscenario's in andere industrieën kan dit databaseschema bijvoorbeeld worden gebruikt voor ziekenhuisinventarisbeheer om de efficiëntie van de toeleveringsketens in de gezondheidszorg te vergroten en medicijnverspilling te verminderen.
Het entiteitsrelatiediagram of visueel databaseontwerp wordt hieronder weergegeven.
Voorraadbeheerdatabase
U kunt ook de populaire tutorials bezoeken, waaronder MySQL 8 installeren op Ubuntu 20.04 LTS, MySQL 8 installeren op Windows, MySQL Workbench installeren op Ubuntu, MySQL 8 installeren met Workbench op Windows 10, RBAC Database in MySql, Blogdatabase in MySql, quizdatabase in MySQL, enquête- en enquêtedatabase in MySQL, online winkelwagendatabase in MySQL en leer elementaire SQL-query's in MySQL.
Voorraaddatabase
De allereerste stap is het maken van de Inventory Database. Het kan worden gemaakt met behulp van de onderstaande query.
CREATE SCHEMA `inventory` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ik heb de tekenset utf8mb4 . gebruikt om een breed scala aan karakters te ondersteunen.
Gebruikerstabel
In deze sectie zullen we de Gebruikerstabel . ontwerpen om gebruikersinformatie op te slaan. Gebruikers kunnen hun eigen profielen beheren. Ook kunnen de gebruikers de applicatie gebruiken volgens de rollen die aan hen zijn toegewezen. Je kunt ook de tutorial RBAC Database in MySql raadplegen om een compleet RBAC-systeem te implementeren voor het beheren van rollen en machtigingen. Hieronder staat de beschrijving van alle kolommen van de gebruikerstabel.
Id | Het unieke ID om de gebruiker te identificeren. |
Rol-ID | De rol van de gebruiker. Dit kan een beheerder, leverancier, verkoper en klant zijn. |
Voornaam | De voornaam van de gebruiker. |
Middelste naam | De middelste naam van de gebruiker. |
Achternaam | De achternaam van de gebruiker. |
Mobiel | Het mobiele nummer van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden. |
Het e-mailadres van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden. | |
Wachtwoordhash | De wachtwoord-hash gegenereerd door het juiste algoritme. We moeten vermijden om gewone of versleutelde wachtwoorden op te slaan. |
Geregistreerd bij | Deze kolom kan worden gebruikt om de levensduur van de gebruiker met de applicatie te berekenen. |
Laatste aanmelding | Het kan worden gebruikt om de laatste login van de gebruiker te identificeren. |
Inleiding | Een korte introductie van de gebruiker. |
Profiel | Gebruikersgegevens. |
De gebruikerstabel met de juiste beperkingen wordt hieronder weergegeven.
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) );
Producttabel
In deze sectie zullen we de Producttabel . ontwerpen om de productgegevens op te slaan. Hieronder vindt u de beschrijving van alle kolommen van de producttabel.
Id | De unieke id om het product te identificeren. |
Titel | De producttitel die in de inventaris moet worden weergegeven. |
Samenvatting | De samenvatting om de belangrijkste hoogtepunten te noemen. |
Type | Het type om onderscheid te maken tussen de verschillende producttypes. |
Gemaakt op | Het slaat de datum en tijd op waarop het product is gemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop het product is bijgewerkt. |
Inhoud | De kolom die wordt gebruikt om de aanvullende details van het product op te slaan. |
De producttabel met de juiste beperkingen wordt hieronder weergegeven.
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`)
);
Productmeta
De productmetatabel kan worden gebruikt om aanvullende informatie over producten op te slaan, waaronder de productbanner-URL enz. Hieronder vindt u de beschrijving van alle kolommen van de productmetatabel.
Id | De unieke id om de productmeta te identificeren. |
Product-ID | De product-ID om het bovenliggende product te identificeren. |
Sleutel | De sleutel die de meta identificeert. |
Inhoud | De kolom die wordt gebruikt om de metadata van het product op te slaan. |
De productmetatabel met de juiste beperkingen is zoals hieronder weergegeven.
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;
Categorietabel en productcategorietabel
In deze sectie zullen we de Categorietabel . ontwerpen en Productcategorietabel om de productcategorieën en hun toewijzingen op te slaan. Hieronder vindt u de beschrijving van alle kolommen van de categorietabel.
Id | Het unieke ID om de categorie te identificeren. |
Ouder-ID | Het bovenliggende ID om de bovenliggende categorie te identificeren. |
Titel | De categorietitel. |
Metatitel | De metatitel die moet worden gebruikt voor browsertitel en SEO. |
Naaktslak | De categorie-slug om de URL te vormen. |
Inhoud | De kolom die wordt gebruikt om de categoriedetails op te slaan. |
De categorietabel met de juiste beperkingen is zoals hieronder weergegeven.
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;
Hieronder vindt u de beschrijving van alle kolommen van de productcategorietabel.
Product-ID | De product-ID om het product te identificeren. |
Categorie-ID | De categorie-ID om de categorie te identificeren. |
De tabel met productcategorieën met de juiste beperkingen is zoals hieronder weergegeven.
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);
Merktabel
In deze sectie zullen we de Merktabel . ontwerpen om de merkgegevens op te slaan. Hieronder staat de beschrijving van alle kolommen van de Merktabel.
Id | De unieke id om het merk te identificeren. |
Titel | De merktitel die in de inventaris moet worden weergegeven. |
Samenvatting | De samenvatting vermeldt de belangrijkste hoogtepunten. |
Gemaakt op | Het slaat de datum en tijd op waarop het product is gemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop het product is bijgewerkt. |
Inhoud | De kolom die wordt gebruikt om de aanvullende details van het merk op te slaan. |
De merkentabel met de juiste beperkingen wordt hieronder weergegeven.
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`)
);
Tafel bestellen
Deze sectie bevat de tabel voor het beheren van de voorraadorders. De bestelling kan zowel aan de Leverancier als aan de Klant worden gekoppeld. Hieronder staat de beschrijving van alle kolommen van de Besteltabel.
Id | Het unieke ID om de bestelling te identificeren. |
Gebruikers-ID | Het gebruikers-ID om de leverancier of klant te identificeren die aan de bestelling is gekoppeld. |
Type | Het ordertype om onderscheid te maken tussen inkooporder of klantorder. |
Status | De status van de bestelling kan Nieuw, Afrekenen, Betaald, Mislukt, Verzonden, Bezorgd, Geretourneerd en Voltooid zijn. |
Subtotaal | De totale prijs van de Bestelitems. |
Artikelkorting | De totale korting van de Bestelitems. |
Belasting | De belasting op de bestelitems. |
Verzending | De verzendkosten van de Bestelitems. |
Totaal | De totale prijs van de Bestelling inclusief btw en verzendkosten. Het is exclusief de artikelenkorting. |
Promo | De promotiecode van de Bestelling. |
Korting | De totale korting van de Bestelling op basis van de promotiecode of winkelkorting. |
Totaal totaal | Het totaal van de bestelling die door de koper moet worden betaald. |
Gemaakt op | Het slaat de datum en tijd op waarop de bestelling is gemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de bestelling is bijgewerkt. |
Inhoud | De kolom die wordt gebruikt om de aanvullende details van de bestelling op te slaan. |
De besteltabel met de juiste beperkingen is zoals hieronder weergegeven.
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);
Adrestabel
Deze sectie bevat de tabel om het adres van de gebruiker of de bestelling te beheren. Het gebruikersadres kan worden gebruikt om het aan de gebruiker gekoppelde adres op te slaan. Het besteladres kan worden gebruikt om het afleveradres voor de thuisbezorging bestellingen op te slaan. Hieronder staat de beschrijving van alle kolommen van de adrestabel.
Id | De unieke id om het adres te identificeren. |
Gebruikers-ID | Het gebruikers-ID om de gebruiker te identificeren die aan het adres is gekoppeld. |
Bestel-ID | De bestellings-ID om de bestelling te identificeren die aan het adres is gekoppeld. |
Voornaam | De voornaam van de gebruiker. |
Middelste naam | De middelste naam van de gebruiker. |
Achternaam | De achternaam van de gebruiker. |
Mobiel | Het mobiele nummer van de gebruiker. |
Het e-mailadres van de gebruiker. | |
Lijn 1 | De eerste regel om het adres op te slaan. |
Lijn 2 | De tweede regel om het adres op te slaan. |
Stad | De plaats van het adres. |
Provincie | De provincie van het adres. |
Land | Het land van het adres. |
Gemaakt op | Het slaat de datum en tijd op waarop de bestelling is gemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de bestelling is bijgewerkt. |
De adrestabel met de juiste beperkingen is zoals hieronder weergegeven.
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;
Itemtabel
In deze sectie zullen we het Item . ontwerpen Tabel om de itemdetails op te slaan. Het artikel vertegenwoordigt de artikelen die in de voorraad zijn opgeslagen en zijn gekocht bij de leveranciers. Hieronder staat de beschrijving van alle kolommen van de itemtabel.
Id | De unieke id om het item te identificeren. |
Product-ID | De product-ID om het product te identificeren dat aan het voorraadartikel is gekoppeld. |
Merk-ID | De merk-ID om het merk te identificeren dat aan het voorraadartikel is gekoppeld. |
Leverancier-ID | De leverancier-ID om de leverancier te identificeren die is gekoppeld aan het voorraadartikel. |
Bestel-ID | De bestellings-ID om de bestelling te identificeren die is gekoppeld aan het voorraadartikel. |
Gemaakt door | De gebruikers-ID om de gebruiker te identificeren die het inventarisitem heeft toegevoegd. |
Bijgewerkt door | De gebruikers-ID om de gebruiker te identificeren die het inventarisitem heeft bijgewerkt. |
Voorraadbeheereenheid | De id om het artikel op voorraad te identificeren. |
Maximale verkoopprijs | De afgedrukte prijs van het product dat aan het artikel is gekoppeld. |
Korting | De korting wordt gegeven door de leverancier. |
Prijs | De prijs waartegen het product is gekocht. |
Hoeveelheid | De totale hoeveelheid ontvangen in de inventaris. |
Verkocht | De totale hoeveelheid verkocht aan de klanten. |
Beschikbaar | De hoeveelheid die op voorraad is. |
Defect | Het totale aantal defecte artikelen dat is ontvangen in de inventaris of is geretourneerd door de klanten. |
Gemaakt op | Het slaat de datum en tijd op waarop de bestelling is gemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de bestelling is bijgewerkt. |
De itemtabel met de juiste beperkingen is zoals hieronder weergegeven.
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;
Bestelitemtabel
Dit gedeelte bevat de tabel voor het beheren van de bestelitems die door de klanten zijn gekocht. Hieronder vindt u de beschrijving van alle kolommen van de Order Item Table.
Id | De unieke id om het bestelde artikel te identificeren. |
Product-ID | De product-ID om het product te identificeren dat aan het bestelde artikel is gekoppeld. |
Artikel-ID | De artikel-ID om het artikel te identificeren dat aan het bestelde artikel is gekoppeld. |
Bestel-ID | De bestellings-ID om de bestelling te identificeren die aan het bestelde artikel is gekoppeld. |
SKU | De SKU van het product bij aankoop. |
Prijs | De prijs van het product tijdens de aankoop. |
Korting | De korting van het product bij aankoop. |
Hoeveelheid | De hoeveelheid van het product geselecteerd door de gebruiker. |
Gemaakt op | Het slaat de datum en tijd op waarop het bestelde artikel is aangemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop het bestelde artikel is bijgewerkt. |
Inhoud | De kolom die wordt gebruikt om de aanvullende details van het bestelde artikel op te slaan. |
De tabel met bestelitems met de juiste beperkingen is zoals hieronder weergegeven.
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;
Transactietabel
We hebben ook een transactietabel nodig om de orderbetalingen van de koper te volgen en voor de boekhouding. We kunnen dezelfde tabel ook gebruiken om de gedeeltelijke of volledige terugbetaling van de bestelling vast te leggen. Hieronder staat de beschrijving van alle kolommen van de Transactietabel.
Id | Het unieke ID om de transactie te identificeren. |
Gebruikers-ID | Het gebruikers-ID om de gebruiker te identificeren die aan de transactie is gekoppeld. |
Bestel-ID | De bestellings-ID om de bestelling te identificeren die aan de transactie is gekoppeld. |
Code | De betalings-ID verstrekt door de betalingsgateway. |
Type | Het type ordertransactie kan Credit of Debet zijn. |
Modus | De modus van de ordertransactie kan Offline, Rembours, Cheque, Concept, Vast en Online zijn. |
Status | De status van de ordertransactie kan Nieuw, Geannuleerd, Mislukt, In behandeling, Afgewezen, Afgewezen en Geslaagd zijn. |
Gemaakt op | Het slaat de datum en tijd op waarop de ordertransactie is aangemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de ordertransactie is bijgewerkt. |
Inhoud | De kolom die wordt gebruikt om de aanvullende details van de transactie op te slaan. |
De transactietabel met de juiste beperkingen is zoals hieronder weergegeven.
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;
Samenvatting
In deze zelfstudie hebben we het databaseontwerp van een voorraadbeheersysteem besproken om de gebruikers op te slaan en de productvoorraad te beheren. Het leverde ook het databaseontwerp om de inkooporders en klantorders te beheren.
U kunt uw opmerkingen indienen om deel te nemen aan de discussie. Mogelijk bent u ook geïnteresseerd in het ontwerpen van de database van de Blog- en Poll &Survey-applicaties. Het volledige databaseschema is ook beschikbaar op GitHub.