sql >> Databáze >  >> RDS >> Mysql

Průvodce návrhem databáze pro online nákupní košík v MySQL

Tento tutoriál poskytuje kompletní kroky k návrhu schématu databáze online obchodů a nákupních vozíků pro správu uživatelů, produktů, recenzí, košíků, objednávek a plateb. Může být dále použit k vývoji online obchodu a webových stránek nebo aplikací založených na nákupním košíku.

Diagram vztahů entit nebo návrh vizuální databáze je uveden níže.

Online nákupní košík

Poznámky :Umožňuje objednávkám hostů zadat objednávku bez přihlášení. Zabezpečení lze vyřešit sledováním databáze RBAC v MySql.

Můžete také navštívit oblíbené výukové programy včetně Jak nainstalovat MySQL 8 na Ubuntu, Jak nainstalovat MySQL 8 na Windows, Jak nainstalovat MySQL 8 pomocí Workbench na Windows 10, Databáze RBAC v MySql, Databáze blogů v MySql, Databáze kvízů v MySQL, Databáze průzkumů a průzkumů na MySQL a naučte se základní SQL dotazy v MySQL.

Databáze obchodu

Úplně prvním krokem je vytvoření databáze obchodu. Lze jej vytvořit pomocí dotazu, jak je uvedeno níže.

CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Použil jsem znakovou sadu utf8mb4 pro podporu široké škály znaků.

Tabulka uživatelů

V této části navrhneme Tabulku uživatelů k ukládání uživatelských informací. Stejnou tabulku lze použít ke správě různých typů uživatelů včetně správců a zákazníků. Lze jej také použít ke spojení tvůrců produktu (z administračního panelu) a objednávek zákazníků zadaných na webu. Uživatelé mohou sledovat své vlastní objednávky a sledovat stav. Níže je uveden popis všech sloupců tabulky uživatelů.

ID Jedinečné ID k identifikaci uživatele.
Křestní jméno Křestní jméno uživatele.
Prostřední jméno Prostřední jméno uživatele.
Příjmení Příjmení uživatele.
Mobil Číslo mobilního telefonu uživatele. Lze jej použít pro účely přihlášení a registrace.
E-mail E-mailová adresa uživatele. Lze jej použít pro účely přihlášení a registrace.
Hašování hesla Hash hash hesla vygenerovaný příslušným algoritmem. Musíme se vyhnout ukládání jednoduchých nebo šifrovaných hesel.
Správce Příznak určující, zda je uživatel správcem. Není to vyžadováno, pokud jsou tabulky RBAC vytvořeny podle návrhu databáze RBAC.
Dodavatel Příznak pro identifikaci, zda uživatel může hostovat produkt v obchodě. Není to vyžadováno, pokud jsou tabulky RBAC vytvořeny podle návrhu databáze RBAC.
Registrováno na Tento sloupec lze použít k výpočtu životnosti uživatele s aplikací.
Poslední přihlášení Lze jej použít k identifikaci posledního přihlášení uživatele.
Úvod Krátké představení uživatele dodavatele, které se zobrazí na stránce produktu.
Profil Podrobnosti o dodavateli, které se mají zobrazit na stránce produktu.

Tabulka uživatelů s příslušnými omezeními je uvedena níže.

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

Tabulka produktů

V této části navrhneme Tabulku produktů pro uložení dat o produktu. Níže je uveden popis všech sloupců tabulky produktů.

ID Jedinečné ID k identifikaci produktu.
ID uživatele ID uživatele k identifikaci správce nebo dodavatele.
Název Název produktu, který se zobrazí na stránce obchodu a na stránce produktu.
Název metadat Název metadat, který se má použít pro název prohlížeče a SEO.
Slimák Slim tvořící adresu URL.
Shrnutí Souhrn, ve kterém jsou zmíněny hlavní body.
Typ Typ pro rozlišení mezi různými typy produktů.
SKU Skladová jednotka pro sledování inventáře produktů.
Cena Cena produktu.
Sleva Sleva na produkt.
Množství Dostupné množství produktu.
Obchod Lze jej použít k identifikaci, zda je produkt veřejně dostupný k nákupu.
Vytvořeno v Ukládá datum a čas, kdy byl produkt vytvořen.
Aktualizováno dne Ukládá datum a čas, kdy je produkt aktualizován.
Zveřejněno v Ukládá datum a čas, kdy je produkt publikován v Obchodě.
Začíná v Ukládá datum a čas zahájení prodeje produktu.
Končí v Ukládá datum a čas ukončení prodeje produktu.
Obsah Sloupec používaný k uložení dalších podrobností o produktu.

Používá množství sloupců ke sledování zásob dostupných v inventáři produktů, aby byl návrh jednoduchý. Pro pokrytí široké škály produktů může být nutné specifikovat množství v několika sloupcích. Možné sloupce mohou být sellQuantity, sellUnit, stockQuantity a stockUnit, kde lze sellQuantity a sellUnit použít k zobrazení v obchodě pro kupující a stockQuantity a stockUnit lze použít ke sledování inventáře. Může být také nutné převést sellUnit na stockUnit při aktualizaci inventáře při zadávání objednávky. Tabulka produktů s příslušnými omezeními je uvedena níže.

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

Meta produktu

Tabulku metadat produktu lze použít k uložení dalších informací o produktech včetně adresy URL banneru produktu atd. Níže je uveden popis všech sloupců tabulky metadat produktu.

ID Jedinečné ID k identifikaci meta produktu.
ID produktu ID produktu k identifikaci nadřazeného produktu.
Klíč Klíč identifikující meta.
Obsah Sloupec používaný k uložení metadat produktu.

Metatabulka produktu s příslušnými omezeními je uvedena níže.

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;

Tabulka recenzí produktů

V této části navrhneme Tabulku recenzí produktů pro uložení recenzí produktů. Níže je uveden popis všech sloupců tabulky recenzí produktu.

ID Jedinečné ID k identifikaci recenze produktu.
ID produktu ID produktu k identifikaci nadřazeného produktu.
ID rodiče ID rodiče k identifikaci nadřazené recenze.
Název Název recenze.
Hodnocení Hodnocení recenze.
Publikováno Lze použít ke zjištění, zda je recenze veřejně dostupná.
Vytvořeno v Ukládá datum a čas odeslání recenze.
Zveřejněno v Ukládá datum a čas, kdy je recenze publikována.
Obsah Sloupec používaný k uložení podrobností recenze.

Tabulka recenzí produktu s příslušnými omezeními je uvedena níže.

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;

Tabulka kategorií a tabulka kategorií produktů

V této části navrhneme Tabulku kategorií a Tabulka kategorií produktů k ukládání kategorií produktů a jejich mapování. Níže je uveden popis všech sloupců tabulky kategorií.

ID Jedinečné ID k identifikaci kategorie.
ID rodiče ID rodiče k identifikaci nadřazené kategorie.
Název Název kategorie.
Název metadat Název metadat, který se má použít pro název prohlížeče a SEO.
Slimák Slug kategorie tvořící adresu URL.
Obsah Sloupec používaný k uložení podrobností kategorie.

Tabulka kategorií s příslušnými omezeními je uvedena níže.

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;

Níže je uveden popis všech sloupců tabulky kategorií produktů.

ID produktu ID produktu k identifikaci produktu.
ID kategorie ID kategorie k identifikaci kategorie.

Tabulka kategorií produktů s příslušnými omezeními je uvedena níže.

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

Tabulka značek a tabulka značek produktu

Podobně jako u tabulek kategorií a kategorií produktů můžeme navrhnout Tabulku značek a Tabulka značek produktu . Hlavní rozdíly mezi kategorií a štítkem jsou uvedeny níže.

  • Sloupec parentId není v tabulce značek povinný.
  • Počet kategorií zůstává nízký, protože je lze použít k vytvoření hlavní nabídky pro navigační účely. Značek může být více než kategorie.
  • K propojení produktů lze použít kategorie i značky.
  • K produktu by se mělo přiřadit pouze několik kategorií, zatímco počet značek může být více.

Tabulka košíku a tabulka položek košíku

Tato sekce poskytuje tabulky pro správu virtuálních košíků pro uložení uživatelského výběru před vytvořením skutečné objednávky. Pokud uživatel zruší platbu nebo se platba nezdaří, může marketingový tým použít stejné vozíky jako opuštěný košík k dotazům na kupující. Ke košíku může být přidružen i přihlášený uživatel. Níže je uveden popis všech sloupců tabulky košíku.

Poznámky :Tabulka košíku a tabulka položek košíku může být volitelná, pokud se k ukládání dat košíku používá lokální data, relace nebo databáze v paměti, jako je Redis. Totéž lze použít k vytvoření objednávky při úspěšné platbě.

ID Jedinečné ID k identifikaci košíku.
ID uživatele ID uživatele k identifikaci uživatele nebo kupujícího spojeného s košíkem.
ID relace Jedinečné ID relace spojené s košíkem.
Token Jedinečný token spojený s košíkem k identifikaci košíku během několika relací. Stejný token lze v případě potřeby předat také platební bráně.
Stav Stav košíku může být Nový, Košík, Pokladna, Zaplaceno, Dokončeno a Opuštěno.
Křestní jméno Křestní jméno uživatele.
Prostřední jméno Prostřední jméno uživatele.
Příjmení Příjmení uživatele.
Mobil Číslo mobilního telefonu uživatele.
E-mail E-mail uživatele.
Řádek 1 První řádek pro uložení adresy.
Řádek 2 Druhý řádek pro uložení adresy.
Město Město adresy.
Provincie Provincie adresy.
Země Země adresy.
Vytvořeno v Ukládá datum a čas, kdy byl košík vytvořen.
Aktualizováno dne Ukládá datum a čas, kdy je košík aktualizován.
Obsah Sloupec používaný k uložení dalších podrobností o košíku.

Tabulka košíku s příslušnými omezeními je uvedena níže.

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

Níže je uveden popis všech sloupců tabulky položek košíku.

ID Jedinečné ID k identifikaci položky košíku.
ID produktu ID produktu k identifikaci produktu spojeného s položkou košíku.
ID košíku ID košíku k identifikaci košíku spojeného s položkou košíku.
SKU SKU produktu při jeho nákupu.
Cena Cena produktu při jeho nákupu.
Sleva Sleva na produkt při jeho nákupu.
Množství Množství produktu vybrané uživatelem.
Aktivní Příznak pro identifikaci, zda je produkt v košíku aktivní. Lze jej použít, aby se stejný produkt nepřidával do stejného košíku vícekrát.
Vytvořeno v Ukládá datum a čas, kdy byla položka košíku vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy je položka košíku aktualizována.
Obsah Sloupec používaný k uložení dalších podrobností o položce košíku.

Tabulka položek košíku s příslušnými omezeními je uvedena níže.

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;

Tabulka objednávek a tabulka položek objednávky

Tato část poskytuje tabulky pro správu objednávek obchodu. K objednávce může být přidružen i přihlášený uživatel. Níže je uveden popis všech sloupců tabulky objednávek.

ID Jedinečné ID k identifikaci objednávky.
ID uživatele ID uživatele k identifikaci uživatele nebo kupujícího spojeného s objednávkou.
ID relace Jedinečné ID relace spojené s objednávkou.
Token Jedinečný token spojený s objednávkou, který ji identifikuje během několika relací. Stejný token lze v případě potřeby předat také platební bráně.
Stav Stav objednávky může být Nová, Pokladna, Zaplaceno, Nezdařilo se, Odesláno, Doručeno, Vráceno a Dokončeno.
Dílčí součet Celková cena položek objednávky.
Sleva na položku Celková sleva položek objednávky.
Daně Daň z položek objednávky.
Doprava Poplatky za dopravu položek objednávky.
Celkem Celková cena objednávky včetně daně a dopravy. Nezahrnuje slevu na položky.
Propagace Propagační kód objednávky.
Sleva Celková sleva z Objednávky na základě propagačního kódu nebo slevy obchodu.
Celkový součet Celkový součet objednávky, který má kupující zaplatit.
Křestní jméno Křestní jméno uživatele.
Prostřední jméno Prostřední jméno uživatele.
Příjmení Příjmení uživatele.
Mobil Číslo mobilního telefonu uživatele.
E-mail E-mail uživatele.
Řádek 1 První řádek pro uložení adresy.
Řádek 2 Druhý řádek pro uložení adresy.
Město Město adresy.
Provincie Provincie adresy.
Země Země adresy.
Vytvořeno v Ukládá datum a čas, kdy byla objednávka vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy je objednávka aktualizována.
Obsah Sloupec používaný k uložení dalších podrobností objednávky.

Tabulka objednávek s příslušnými omezeními je uvedena níže.

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

Níže je uveden popis všech sloupců tabulky položek objednávky.

ID Jedinečné ID k identifikaci objednané položky.
ID produktu ID produktu k identifikaci produktu přidruženého k objednané položce.
ID objednávky ID objednávky k identifikaci objednávky spojené s objednanou položkou.
SKU SKU produktu při jeho nákupu.
Cena Cena produktu při jeho nákupu.
Sleva Sleva na produkt při jeho nákupu.
Množství Množství produktu vybrané uživatelem.
Vytvořeno v Ukládá datum a čas, kdy je objednaná položka vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy je objednaná položka aktualizována.
Obsah Sloupec používaný k uložení dalších podrobností o objednané položce.

Tabulka položek objednávky s příslušnými omezeními je uvedena níže.

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;

Tabulka transakcí

Potřebujeme také tabulku transakcí, abychom mohli sledovat platby za objednávky provedené kupujícím a pro vedení účetnictví. Stejnou tabulku můžeme také použít k zaznamenání částečného nebo úplného vrácení peněz za objednávku. Níže je uveden popis všech sloupců tabulky transakcí.

ID Jedinečné ID k identifikaci transakce.
ID uživatele ID uživatele k identifikaci uživatele spojeného s transakcí.
ID objednávky ID objednávky k identifikaci objednávky spojené s transakcí.
Kód ID platby poskytnuté platební bránou.
Typ Typ transakce objednávky může být Kreditní nebo Debetní.
Režim Režim transakce objednávky může být offline, na dobírku, šek, směnka, kabelové připojení a online.
Stav Stav transakce objednávky může být Nová, Zrušená, Neúspěšná, Nevyřízená, Odmítnutá, Odmítnutá a Úspěšná.
Vytvořeno v Ukládá datum a čas, kdy je transakce objednávky vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy je transakce objednávky aktualizována.
Obsah Sloupec používaný k uložení dalších podrobností o transakci.

Tabulka transakcí s příslušnými omezeními je uvedena níže.

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;

Tabulka adres

Aby se zabránilo nadbytečným sloupcům v tabulce Košík a Objednávka v závislosti na skutečné implementaci, lze použít tabulku adres. Lze jej přímo namapovat na tabulku košíku a tabulku objednávek pomocí příslušných cizích klíčů.

Shrnutí

V tomto tutoriálu jsme diskutovali o návrhu databáze online nákupního košíku pro ukládání uživatelů a správu inventáře produktů. Poskytla také návrh databáze pro správu košíku, ukládání položek košíku a správu objednávek v online obchodě. Zjednodušený vývojový diagram online nakupování lze použít k implementaci nákupního košíku.

Do diskuse můžete zasílat své komentáře. Možná vás bude zajímat i návrh databáze aplikací Blog a Poll &Survey. Kompletní schéma databáze je k dispozici také na GitHubu.


  1. SQLite nemůže otevřít soubor databáze (kód 14) při častém dotazu SELECT

  2. Jak mapovat více oddílů na jednu skupinu souborů v SQL Server (T-SQL)

  3. Omezení podmínky WHERE col IN (...).

  4. dynamický sql dotaz v postgresu