sql >> Database >  >> RDS >> Mysql

Gids voor het ontwerpen van database voor online winkelwagentje in MySQL

Deze tutorial biedt volledige stappen voor het ontwerpen van een databaseschema van online winkels en winkelwagentjes om de gebruikers, producten, recensies, winkelwagentjes, bestellingen en betalingen te beheren. Het kan verder worden gebruikt om een ​​online winkel en op winkelwagentjes gebaseerde websites of applicaties te ontwikkelen.

Het entiteitsrelatiediagram of visueel databaseontwerp wordt hieronder weergegeven.

Online winkelwagen

Opmerkingen :Hiermee kunnen gastbestellingen de bestelling plaatsen zonder in te loggen. De beveiliging kan worden afgehandeld door de RBAC-database in MySql te volgen.

U kunt ook de populaire tutorials bezoeken, waaronder MySQL 8 installeren op Ubuntu, MySQL 8 installeren op Windows, MySQL 8 installeren met Workbench op Windows 10, RBAC Database in MySql, Blog Database in MySql, Quiz Database in MySQL, Enquête- en enquêtedatabase op MySQL en leer elementaire SQL-query's in MySQL.

Winkeldatabase

De allereerste stap is het maken van de winkeldatabase. Het kan worden gemaakt met behulp van de onderstaande query.

CREATE SCHEMA `shop` 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. Dezelfde tabel kan worden gebruikt om verschillende soorten gebruikers te beheren, waaronder beheerders en klanten. Het kan ook worden gebruikt om de productmakers (vanuit het beheerderspaneel) en klantorders die op de website zijn geplaatst, te relateren. Gebruikers kunnen hun eigen bestellingen volgen en de status volgen. Hieronder staat de beschrijving van alle kolommen van de gebruikerstabel.

Id Het unieke ID om de gebruiker te identificeren.
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.
E-mail 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.
Beheerder De vlag om aan te geven of de gebruiker een beheerder is. Het is niet vereist als RBAC-tabellen zijn gemaakt door het RBAC-databaseontwerp te volgen.
Verkoper De vlag om aan te geven of de gebruiker een product in de winkel kan hosten. Het is niet vereist als RBAC-tabellen zijn gemaakt door het RBAC-databaseontwerp te volgen.
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 De korte introductie van de verkopergebruiker die op de productpagina moet worden weergegeven.
Profiel De details van de leverancier die op de productpagina moeten worden weergegeven.

De gebruikerstabel met de juiste beperkingen is zoals hieronder weergegeven.

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) );

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.
Gebruikers-ID Het gebruikers-ID om de beheerder of leverancier te identificeren.
Titel De producttitel die moet worden weergegeven op de winkelpagina en productpagina.
Metatitel De metatitel die moet worden gebruikt voor browsertitel en SEO.
Naaktslak De slug om de URL te vormen.
Samenvatting De samenvatting om de belangrijkste hoogtepunten te noemen.
Type Het type om onderscheid te maken tussen de verschillende producttypes.
SKU De Stock Keeping Unit om de productvoorraad bij te houden.
Prijs De prijs van het product.
Korting De korting op het product.
Hoeveelheid De beschikbare hoeveelheid van het product.
Winkel Het kan worden gebruikt om te bepalen of het product openbaar beschikbaar is om te winkelen.
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.
Gepubliceerd op Het slaat de datum en tijd op waarop het product in de winkel is gepubliceerd.
Begint om Het slaat de datum en tijd op waarop de productverkoop begint.
Eindigt op Het slaat de datum en tijd op waarop de productverkoop eindigt.
Inhoud De kolom die wordt gebruikt om de aanvullende details van het product op te slaan.

Het gebruikt de kolomhoeveelheid om de beschikbare voorraad in de productinventaris bij te houden om het ontwerp eenvoudig te houden. Het kan nodig zijn om de hoeveelheid in meerdere kolommen te specificeren om een ​​breed scala aan producten te dekken. De mogelijke kolommen kunnen sellQuantity, sellUnit, stockQuantity en stockUnit zijn, waarbij de sellQuantity en sellUnit kunnen worden gebruikt om voor de kopers in de winkel te worden weergegeven en de stockQuantity en stockUnit kunnen worden gebruikt om de voorraad bij te houden. Het kan ook nodig zijn om de sellUnit om te zetten in stockUnit tijdens het bijwerken van de voorraad bij het plaatsen van de bestelling. De producttabel met de juiste beperkingen is zoals hieronder weergegeven.

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);

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 `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;

Productbeoordelingstabel

In deze sectie zullen we de Product Review Table . ontwerpen om de productrecensies op te slaan. Hieronder vindt u de beschrijving van alle kolommen van de Product Review Table.

Id De unieke id om de productrecensie te identificeren.
Product-ID De product-ID om het bovenliggende product te identificeren.
Ouder-ID De ouder-ID om de ouderbeoordeling te identificeren.
Titel De titel van de recensie.
Beoordeling De beoordelingsbeoordeling.
Gepubliceerd Het kan worden gebruikt om te bepalen of de recensie openbaar beschikbaar is.
Gemaakt op Het slaat de datum en tijd op waarop de beoordeling is ingediend.
Gepubliceerd op Het slaat de datum en tijd op waarop de recensie is gepubliceerd.
Inhoud De kolom die wordt gebruikt om de recensiegegevens op te slaan.

De productbeoordelingstabel met de juiste beperkingen is zoals hieronder weergegeven.

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;

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 `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;

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 `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);

Tag-tabel en producttag-tabel

Net als bij de categorie- en productcategorietabellen, kunnen we de Tag Table . ontwerpen en tabel met producttags . De belangrijkste verschillen tussen de categorie en tag worden hieronder vermeld.

  • De parentId-kolom is niet vereist in de Tag-tabel.
  • Het aantal categorieën blijft laag omdat deze kunnen worden gebruikt om het hoofdmenu te vormen voor navigatiedoeleinden. De tags kunnen meer zijn in vergelijking met categorieën.
  • Beide categorieën en tags kunnen worden gebruikt om de producten te relateren.
  • Men zou slechts een paar categorieën aan een product moeten toewijzen, terwijl het aantal tags meer kan zijn.

Winkeltabel en winkelwagenitemtabel

Dit gedeelte biedt de tabellen voor het beheren van de virtuele winkelwagentjes om de gebruikersselectie op te slaan voordat de daadwerkelijke bestelling wordt gemaakt. Als de gebruiker de betaling annuleert of de betaling mislukt, kunnen dezelfde winkelwagentjes door het marketingteam worden gebruikt als een verlaten winkelwagentje om te informeren naar de kopers. Een ingelogde gebruiker kan ook aan de winkelwagen worden gekoppeld. Hieronder staat de beschrijving van alle kolommen van de winkelwagentabel.

Opmerkingen :De winkelwagentabel en winkelwagenitemtabel kunnen optioneel worden gemaakt als de lokale gegevens, sessie of in-memory database zoals Redis wordt gebruikt om de winkelwagengegevens op te slaan. Hetzelfde kan worden gebruikt om de bestelling te maken als de betaling is gelukt.

Id De unieke id om de winkelwagen te identificeren.
Gebruikers-ID De gebruikers-ID om de gebruiker of koper te identificeren die aan het winkelwagentje is gekoppeld.
Sessie-ID De unieke sessie-ID die aan het winkelwagentje is gekoppeld.
Token Het unieke token dat aan de winkelwagen is gekoppeld om de winkelwagen over meerdere sessies te identificeren. Hetzelfde token kan indien nodig ook worden doorgegeven aan de Payment Gateway.
Status De status van de winkelwagen kan zijn:Nieuw, Winkelwagen, Afrekenen, Betaald, Voltooid en Verlaten.
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.
E-mail 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 winkelwagen is gemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop de winkelwagen is bijgewerkt.
Inhoud De kolom die wordt gebruikt om de aanvullende details van de winkelwagen op te slaan.

De winkelwagentabel met de juiste beperkingen is zoals hieronder weergegeven.

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);

Hieronder vindt u de beschrijving van alle kolommen van de tabel met winkelwagenitems.

Id De unieke id om het winkelwagenitem te identificeren.
Product-ID De product-ID om het product te identificeren dat is gekoppeld aan het winkelwagenitem.
Winkel-ID De winkelwagen-ID om de winkelwagen te identificeren die aan het winkelwagenitem 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.
Actief De vlag om te identificeren of het product actief is in de winkelwagen. Het kan worden gebruikt om te voorkomen dat hetzelfde product meerdere keren aan hetzelfde winkelwagentje wordt toegevoegd.
Gemaakt op Het slaat de datum en tijd op waarop het winkelwagenitem is gemaakt.
Bijgewerkt om Het slaat de datum en tijd op waarop het winkelwagenitem is bijgewerkt.
Inhoud De kolom die wordt gebruikt om de aanvullende details van het winkelwagenitem op te slaan.

De tabel met winkelwagenitems met de juiste beperkingen is zoals hieronder weergegeven.

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;

Besteltabel en bestelitemtabel

Deze sectie bevat de tabellen om de winkelorders te beheren. Een ingelogde gebruiker kan ook aan de bestelling worden gekoppeld. Hieronder staat de beschrijving van alle kolommen van de Besteltabel.

Id Het unieke ID om de bestelling te identificeren.
Gebruikers-ID De gebruikers-ID om de gebruiker of koper te identificeren die aan de bestelling is gekoppeld.
Sessie-ID De unieke sessie-ID die aan de bestelling is gekoppeld.
Token Het unieke token dat aan de bestelling is gekoppeld om deze over meerdere sessies te identificeren. Hetzelfde token kan indien nodig ook worden doorgegeven aan de Payment Gateway.
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.
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.
E-mail 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.
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 `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);

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.
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 `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;

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 `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;

Adrestabel

Een adrestabel kan worden gebruikt om de overbodige kolommen in de winkelwagen- en besteltabel te vermijden, afhankelijk van de daadwerkelijke implementatie. Het kan direct worden toegewezen aan de winkelwagentabel en besteltabel met behulp van de juiste externe sleutels.

Samenvatting

In deze zelfstudie hebben we het databaseontwerp van een online winkelwagentje besproken om de gebruikers op te slaan en de productvoorraad te beheren. Het leverde ook het databaseontwerp om de winkelwagen te beheren, de winkelwagenitems op te slaan en de bestellingen in een online winkel te beheren. Het vereenvoudigde stroomschema voor online winkelen kan worden gebruikt om een ​​winkelwagentje te implementeren.

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.


  1. Converteren tussen datum- en tijdgegevenstypen in SQL Server (T-SQL-voorbeelden)

  2. Een tabel bijwerken in Oracle als een veldwaarde Null is en bepalen of de update succesvol is

  3. Introductie van MariaDB Platform X5:de database voor elke workload, nu op elke schaal

  4. Belangrijkste indicatoren van probleemontwerp