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