sql >> Databasteknik >  >> RDS >> Mysql

Guide till designdatabas för online kundvagn i MySQL

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.


  1. ett effektivt sätt att testa om det finns en tabellrad

  2. Hur hittar man gränserna för grupper av sammanhängande sekventiella tal?

  3. Hur man lägger till standardbegränsning i MySQL

  4. Ersätt dubblettutrymmen med ett enda utrymme i T-SQL