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