Denna handledning innehåller fullständiga steg för att utforma ett databasschema över onlinebutiker och kundvagnar för att hantera användare, produkter, recensioner, vagnar, beställningar och betalningar. Det kan vidare användas för att utveckla en onlinebutik och kundvagnsbaserade webbplatser eller applikationer.
Entity Relationship Diagram eller visuell databasdesign visas nedan.
Varukorg online
Anteckningar :Det tillåter gästbeställningar att lägga beställningen utan att logga in. Säkerheten kan hanteras genom att följa RBAC Database i MySql.
Du kan också besöka de populära handledningarna inklusive Hur man installerar MySQL 8 på Ubuntu, Hur man installerar MySQL 8 på Windows, Hur man installerar MySQL 8 med Workbench på Windows 10, RBAC Database i MySql, Blog Database i MySql, Quiz Database i MySQL, Enkät- och enkätdatabas på MySQL och lär dig grundläggande SQL-frågor i MySQL.
Butiksdatabas
Det allra första steget är att skapa butiksdatabasen. Den kan skapas med hjälp av frågan som visas nedan.
CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Jag har använt teckenuppsättningen utf8mb4 för att stödja ett stort antal tecken.
Användartabell
I det här avsnittet kommer vi att utforma användartabellen för att lagra användarinformation. Samma tabell kan användas för att hantera olika typer av användare inklusive administratörer och kunder. Den kan också användas för att relatera produktskaparna (från adminpanelen) och kundorder som lagts på webbplatsen. Användare kan spåra sina egna beställningar och spåra status. Nedan nämns beskrivningen av alla kolumner i användartabellen.
Id | Det unika ID:t för att identifiera användaren. |
Förnamn | Användarens förnamn. |
Mellannamn | Användarens mellannamn. |
Efternamn | Användarens efternamn. |
Mobil | Användarens mobilnummer. Den kan användas för inloggning och registreringsändamål. |
E-post | Användarens e-postadress. Den kan användas för inloggning och registreringsändamål. |
Lösenordshash | Lösenords-hash som genereras av lämplig algoritm. Vi måste undvika att lagra vanliga eller krypterade lösenord. |
Admin | Flaggan för att identifiera om användaren är en administratör. Det krävs inte om RBAC-tabeller skapas genom att följa RBAC-databasdesignen. |
Leverantör | Flaggan för att identifiera om användaren kan vara värd för en produkt i butiken. Det krävs inte om RBAC-tabeller skapas genom att följa RBAC-databasdesignen. |
Registrerad på | Denna kolumn kan användas för att beräkna användarens livslängd med programmet. |
Senaste inloggning | Den kan användas för att identifiera användarens senaste inloggning. |
Intro | Den korta introduktionen av leverantörsanvändaren som ska visas på produktsidan. |
Profil | Leverantörsinformation som ska visas på produktsidan. |
Användartabellen med lämpliga begränsningar är som visas nedan.
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) );
Produkttabell
I det här avsnittet kommer vi att utforma Produkttabellen för att lagra produktdata. Nedan nämns beskrivningen av alla kolumner i produkttabellen.
Id | Det unika ID:t för att identifiera produkten. |
Användar-ID | Användar-id för att identifiera administratören eller leverantören. |
Titel | Produkttiteln som ska visas på butikssidan och produktsidan. |
Metatitel | Metatiteln som ska användas för webbläsartitel och SEO. |
Snigel | Snigeln för att bilda URL:en. |
Sammanfattning | Sammanfattningen för att nämna de viktigaste höjdpunkterna. |
Typ | Typen för att skilja mellan de olika produkttyperna. |
SKU | Lagerhållningsenheten för att spåra produktinventeringen. |
Pris | Priset på produkten. |
Rabatt | Rabatten på produkten. |
Mängd | Den tillgängliga kvantiteten av produkten. |
Handla | Den kan användas för att identifiera om produkten är allmänt tillgänglig för shopping. |
Skapat vid | Den lagrar datum och tid då produkten skapades. |
Uppdaterad kl. | Den lagrar datum och tid då produkten uppdateras. |
Publicerad på | Den lagrar datum och tid då produkten publiceras i butiken. |
Börjar vid | Den lagrar datum och tid då produktförsäljningen startar. |
Slutar vid | Den lagrar datum och tid då produktförsäljningen avslutas. |
Innehåll | Kolumnen som används för att lagra ytterligare information om produkten. |
Den använder kolumnantal för att spåra det tillgängliga lagret i produktinventeringen för att hålla designen enkel. Det kan behövas att ange kvantiteten i flera kolumner för att täcka ett brett utbud av produkter. De möjliga kolumnerna kan vara sellQuantity, sellUnit, stockQuantity och stockUnit där sellQuantity och sellUnit kan användas för att visas i butiken för köparna och stockQuantity och stockUnit kan användas för att spåra lagret. Det kan också vara nödvändigt att konvertera sellUnit till stockUnit samtidigt som du uppdaterar inventeringen vid beställning. Produkttabellen med lämpliga begränsningar är som visas nedan.
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);
Produktmeta
Produktmetatabellen kan användas för att lagra ytterligare information om produkter inklusive webbadressen till produktens banner etc. Nedan nämns en beskrivning av alla kolumner i produktmetatabellen.
Id | Det unika ID:t för att identifiera produktens meta. |
Produkt-ID | Produkt-id för att identifiera den överordnade produkten. |
Nyckel | Nyckeln som identifierar meta. |
Innehåll | Kolumnen som används för att lagra produktens metadata. |
Produktmetatabellen med lämpliga begränsningar visas nedan.
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;
Tabell för produktgranskning
I det här avsnittet kommer vi att utforma produktgranskningstabellen för att lagra produktrecensioner. Nedan nämns beskrivningen av alla kolumner i produktgranskningstabellen.
Id | Det unika ID:t för att identifiera produktrecensionen. |
Produkt-ID | Produkt-id för att identifiera den överordnade produkten. |
Förälder-ID | Förälder-ID för att identifiera förälderrecensionen. |
Titel | Recensionstiteln. |
Betyg | Recensionsbetyget. |
Publicerad | Den kan användas för att identifiera om recensionen är allmänt tillgänglig. |
Skapat vid | Den lagrar datum och tid då recensionen skickas. |
Publicerad på | Den lagrar datum och tid då recensionen publiceras. |
Innehåll | Kolumnen som används för att lagra recensionsinformationen. |
Produktgranskningstabellen med lämpliga begränsningar visas nedan.
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;
Kategoritabell och produktkategoritabell
I det här avsnittet kommer vi att utforma Kategoritabellen och Produktkategoritabell för att lagra produktkategorierna och deras mappningar. Nedan nämns beskrivningen av alla kolumner i kategoritabellen.
Id | Det unika ID:t för att identifiera kategorin. |
Förälder-ID | Det överordnade id för att identifiera den överordnade kategorin. |
Titel | Kategorititeln. |
Metatitel | Metatiteln som ska användas för webbläsartitel och SEO. |
Snigel | Kategorin som bildar URL:en. |
Innehåll | Kolumnen som används för att lagra kategoriinformationen. |
Kategoritabellen med lämpliga begränsningar är som visas nedan.
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;
Nedan nämns beskrivningen av alla kolumner i produktkategoritabellen.
Produkt-ID | Produkt-id för att identifiera produkten. |
Kategori-ID | Kategori-id för att identifiera kategorin. |
Produktkategoritabellen med lämpliga begränsningar visas nedan.
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);
Taggtabell och produkttaggtabell
I likhet med kategori- och produktkategoritabellerna kan vi designa Taggtabellen och Produkttaggtabell . De största skillnaderna mellan kategorin och taggen listas nedan.
- Kolumnen parentId krävs inte i taggtabellen.
- Antalet kategorier är fortfarande lågt eftersom dessa kan användas för att bilda huvudmenyn för navigeringsändamål. Taggarna kan vara fler jämfört med kategorier.
- Både kategorier och taggar kan användas för att relatera produkterna.
- Man bör bara tilldela ett fåtal kategorier till en produkt medan taggantalet kan vara fler.
Korgbord och kundvagnsartikeltabell
Det här avsnittet tillhandahåller tabellerna för att hantera de virtuella vagnarna för att lagra användarvalet innan den faktiska beställningen skapas. Om användaren avbryter betalningen eller betalningen misslyckas, kan samma vagnar användas som en övergiven vagn av marknadsföringsteamet för att fråga efter köparna. En inloggad användare kan också kopplas till varukorgen. Nedan nämns beskrivningen av alla kolumner i vagntabellen.
Anteckningar :Varukorgstabellen och Cart Item-tabellen kan göras valfria om den lokala data-, sessions- eller minnesdatabasen som Redis används för att lagra kundvagnsdata. Detsamma kan hänvisas till att skapa beställningen vid betalningsframgång.
Id | Det unika ID:t för att identifiera varukorgen. |
Användar-ID | Användar-id för att identifiera användaren eller köparen som är kopplad till kundvagnen. |
Sessions-ID | Det unika sessions-id som är kopplat till kundvagnen. |
Token | Den unika token som är associerad med vagnen för att identifiera vagnen under flera sessioner. Samma token kan också skickas till Payment Gateway om det behövs. |
Status | Korgens status kan vara Ny, Varukorg, Utcheckning, Betald, Komplett och Övergiven. |
Förnamn | Användarens förnamn. |
Mellannamn | Användarens mellannamn. |
Efternamn | Användarens efternamn. |
Mobil | Användarens mobilnummer. |
E-post | Användarens e-postadress. |
rad 1 | Första raden att lagra adress. |
rad 2 | Den andra raden för att lagra adressen. |
Stad | Stad för adressen. |
Provins | Adressens provins. |
Land | Adressens land. |
Skapat vid | Den lagrar datum och tid då varukorgen skapas. |
Uppdaterad kl. | Den lagrar datum och tid då varukorgen uppdateras. |
Innehåll | Kolumnen som används för att lagra ytterligare information om kundvagnen. |
Varukorgstabellen med lämpliga begränsningar är som visas nedan.
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);
Nedan nämns beskrivningen av alla kolumner i varukorgsföremålstabellen.
Id | Det unika ID:t för att identifiera varukorgsartikeln. |
Produkt-ID | Produkt-id för att identifiera produkten som är kopplad till varukorgsvaran. |
Korg-ID | Korg-ID för att identifiera den kundvagn som är kopplad till varukorgsartikeln. |
SKU | Produktens SKU när du köper den. |
Pris | Priset på produkten när du köper den. |
Rabatt | Rabatten på produkten när du köper den. |
Mängd | Mängden av produkten som valts av användaren. |
Aktiv | Flaggan för att identifiera om produkten är aktiv i varukorgen. Den kan användas för att undvika att samma produkt läggs till i samma varukorg flera gånger. |
Skapat vid | Den lagrar datum och tid då varukorgsartikeln skapas. |
Uppdaterad kl. | Den lagrar datum och tid då varukorgsartikeln uppdateras. |
Innehåll | Kolumnen som används för att lagra ytterligare information om varukorgsföremålet. |
Varukorgsföremålstabellen med lämpliga begränsningar är som visas nedan.
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;
Beställningstabell och Beställningsartikeltabell
Det här avsnittet tillhandahåller tabellerna för att hantera butiksbeställningarna. En inloggad användare kan också kopplas till beställningen. Nedan nämns beskrivningen av alla kolumner i beställningstabellen.
Id | Det unika ID:t för att identifiera beställningen. |
Användar-ID | Användar-ID för att identifiera användaren eller köparen som är kopplad till beställningen. |
Sessions-ID | Det unika sessions-id som är kopplat till beställningen. |
Token | Den unika token som är kopplad till ordern för att identifiera den över flera sessioner. Samma token kan också skickas till Payment Gateway om det behövs. |
Status | Beställningens status kan vara Ny, Kassa, Betald, Misslyckad, Levererad, Levererad, Returnerad och Komplett. |
Subtotal | Totalpriset för beställningsartiklarna. |
Artiklarabatt | Den totala rabatten på beställningsartiklarna. |
Skatt | Skatten på beställningsartiklarna. |
Frakt | Fraktavgifterna för beställningsartiklarna. |
Totalt | Det totala priset för beställningen inklusive moms och frakt. Det exkluderar varornas rabatt. |
Kampanj | Kampanjkoden för beställningen. |
Rabatt | Den totala rabatten för beställningen baserat på kampanjkoden eller butiksrabatten. |
Grundsumma | Totalsumman av beställningen som ska betalas av köparen. |
Förnamn | Användarens förnamn. |
Mellannamn | Användarens mellannamn. |
Efternamn | Användarens efternamn. |
Mobil | Användarens mobilnummer. |
E-post | Användarens e-postadress. |
rad 1 | Första raden att lagra adress. |
rad 2 | Den andra raden för att lagra adressen. |
Stad | Stad för adressen. |
Provins | Adressens provins. |
Land | Adressens land. |
Skapat vid | Den lagrar datum och tid då beställningen skapas. |
Uppdaterad kl. | Den lagrar datum och tid då beställningen uppdateras. |
Innehåll | Kolumnen som används för att lagra ytterligare information om beställningen. |
Ordningstabellen med lämpliga begränsningar är som visas nedan.
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);
Nedan nämns beskrivningen av alla kolumner i beställningsartikeltabellen.
Id | Det unika ID:t för att identifiera den beställda artikeln. |
Produkt-ID | Produkt-id för att identifiera produkten som är kopplad till den beställda artikeln. |
Beställnings-ID | Beställnings-ID för att identifiera beställningen som är kopplad till den beställda artikeln. |
SKU | Produktens SKU när du köper den. |
Pris | Priset på produkten när du köper den. |
Rabatt | Rabatten på produkten när du köper den. |
Mängd | Mängden av produkten som valts av användaren. |
Skapat vid | Den lagrar datum och tid då den beställda artikeln skapas. |
Uppdaterad kl. | Den lagrar datum och tid då den beställda artikeln uppdateras. |
Innehåll | Kolumnen som används för att lagra ytterligare information om den beställda artikeln. |
Beställningsartikeltabellen med lämpliga begränsningar är som visas nedan.
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;
Transaktionstabell
Vi behöver också en transaktionstabell för att spåra orderbetalningar som gjorts av köparen och för bokföring. Vi kan också använda samma tabell för att registrera den partiella eller fullständiga återbetalningen av beställningen. Nedan nämns beskrivningen av alla kolumner i transaktionstabellen.
Id | Det unika ID:t för att identifiera transaktionen. |
Användar-ID | Användar-ID för att identifiera användaren som är kopplad till transaktionen. |
Beställnings-ID | Beställnings-ID för att identifiera beställningen som är kopplad till transaktionen. |
Kod | Betalnings-id som tillhandahålls av betalningsgatewayen. |
Typ | Typen av ordertransaktion kan vara antingen Kredit eller Debet. |
Läge | Läget för beställningstransaktionen kan vara offline, postförskott, check, växel, fast och online. |
Status | Status för ordertransaktionen kan vara Ny, Avbruten, Misslyckad, Väntande, Avvisad, Avvisad och Framgång. |
Skapat vid | Den lagrar datum och tid då ordertransaktionen skapas. |
Uppdaterad kl. | Den lagrar datum och tid då ordertransaktionen uppdateras. |
Innehåll | Kolumnen som används för att lagra ytterligare information om transaktionen. |
Transaktionstabellen med lämpliga begränsningar är som visas nedan.
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;
Adresstabell
En adresstabell kan användas för att undvika de redundanta kolumnerna i varukorgs- och beställningstabellen beroende på den faktiska implementeringen. Den kan mappas direkt till kundvagns- och beställningstabellen med hjälp av lämpliga främmande nycklar.
Sammanfattning
I den här handledningen har vi diskuterat databasdesignen för en online kundvagn för att lagra användarna och hantera produktlager. Det gav också databasdesignen för att hantera kundvagnen, lagra varukorgsartiklarna och hantera beställningarna i en onlinebutik. Det förenklade flödesschemat för onlineshopping kan användas för att implementera en kundvagn.
Du kan skicka in dina kommentarer för att delta i diskussionen. Du kanske också är intresserad av att designa databasen med applikationerna Blog och Poll &Survey. Det fullständiga databasschemat finns också tillgängligt på GitHub.