Ten samouczek zawiera kompletne kroki, aby zaprojektować schemat bazy danych sklepów internetowych i koszyków w celu zarządzania użytkownikami, produktami, recenzjami, koszykami, zamówieniami i płatnościami. Może być dalej wykorzystywany do tworzenia sklepów internetowych i witryn lub aplikacji opartych na koszyku na zakupy.
Diagram relacji encji lub wizualny projekt bazy danych pokazano poniżej.
Koszyk zakupów online
Notatki :Pozwala gościom składać zamówienia bez logowania. Z bezpieczeństwem można się uporać, korzystając z bazy danych RBAC w MySql.
Możesz także odwiedzić popularne samouczki, w tym Jak zainstalować MySQL 8 w systemie Ubuntu, Jak zainstalować MySQL 8 w systemie Windows, Jak zainstalować MySQL 8 z Workbench w systemie Windows 10, Baza danych RBAC w MySql, Baza danych blogów w MySql, Baza danych quizu w MySQL, Baza danych ankiet i ankiet dotyczących MySQL oraz nauka podstawowych zapytań SQL w MySQL.
Baza danych sklepu
Pierwszym krokiem jest stworzenie Bazy Sklepu. Można go utworzyć za pomocą zapytania, jak pokazano poniżej.
CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Użyłem zestawu znaków utf8mb4 do obsługi szerokiej gamy znaków.
Tabela użytkowników
W tej sekcji zaprojektujemy Tabelę użytkowników do przechowywania informacji o użytkowniku. Ta sama tabela może służyć do zarządzania różnymi typami użytkowników, w tym administratorami i klientami. Może być również wykorzystany do powiązania twórców produktów (z panelu administracyjnego) oraz zamówień klientów składanych na stronie. Użytkownicy mogą śledzić własne zamówienia i śledzić status. Poniżej znajduje się opis wszystkich kolumn tabeli użytkowników.
Identyfikator | Unikalny identyfikator do identyfikacji użytkownika. |
Imię | Imię użytkownika. |
Drugie imię | Drugie imię użytkownika. |
Nazwisko | Nazwisko użytkownika. |
Komórka | Numer telefonu komórkowego użytkownika. Może być używany do celów logowania i rejestracji. |
Poczta e-mail | E-mail użytkownika. Może być używany do celów logowania i rejestracji. |
Hash hasła | Skrót hasła wygenerowany przez odpowiedni algorytm. Musimy unikać przechowywania zwykłych lub zaszyfrowanych haseł. |
Administrator | Flaga określająca, czy użytkownik jest administratorem. Nie jest to wymagane, jeśli tabele RBAC są tworzone zgodnie z projektem bazy danych RBAC. |
Dostawca | Flaga określająca, czy użytkownik może przechowywać produkt w sklepie. Nie jest to wymagane, jeśli tabele RBAC są tworzone zgodnie z projektem bazy danych RBAC. |
Zarejestrowano w | Ta kolumna może być użyta do obliczenia życia użytkownika z aplikacją. |
Ostatnie logowanie | Może być używany do identyfikacji ostatniego logowania użytkownika. |
Wprowadzenie | Krótkie wprowadzenie użytkownika dostawcy, który ma być wyświetlany na stronie produktu. |
Profil | Szczegóły dostawcy, które mają być wyświetlane na stronie produktu. |
Tabela użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.
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) );
Tabela produktów
W tej sekcji zaprojektujemy Tabelę produktów do przechowywania danych produktu. Poniżej znajduje się opis wszystkich kolumn tabeli produktów.
Identyfikator | Unikalny identyfikator do identyfikacji produktu. |
Identyfikator użytkownika | Identyfikator użytkownika do identyfikacji administratora lub dostawcy. |
Tytuł | Tytuł produktu, który ma być wyświetlany na stronie sklepu i stronie produktu. |
Metatytuł | Metatytuł używany do tytułu przeglądarki i SEO. |
Ślimak | Śruba do utworzenia adresu URL. |
Podsumowanie | Podsumowanie zawierające najważniejsze informacje. |
Wpisz | Typ do rozróżniania różnych typów produktów. |
SKU | Jednostka przechowywania zapasów do śledzenia zapasów produktów. |
Cena | Cena produktu. |
Rabat | Zniżka na produkt. |
Ilość | Dostępna ilość produktu. |
Sklep | Może być używany do określenia, czy produkt jest publicznie dostępny do zakupów. |
Utworzono w | Przechowuje datę i godzinę utworzenia produktu. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji produktu. |
Opublikowano w | Przechowuje datę i godzinę publikacji produktu w Sklepie. |
Zaczyna się o | Przechowuje datę i godzinę rozpoczęcia sprzedaży produktu. |
Kończy się o | Przechowuje datę i godzinę zakończenia sprzedaży produktu. |
Treść | Kolumna używana do przechowywania dodatkowych szczegółów produktu. |
Wykorzystuje ilość w kolumnie do śledzenia zapasów dostępnych w magazynie produktów, aby projekt był prosty. Może być wymagane określenie ilości w kilku kolumnach, aby objąć szeroką gamę produktów. Możliwe kolumny to sellQuantity, sellUnit, stockQuantity i stockUnit, gdzie można użyć wartości sellQuantity i sellUnit do wyświetlania w Sklepie dla kupujących, a do śledzenia zapasów można użyć wartości stockQuantity i stockUnit. Może być również wymagane przekonwertowanie sellUnit na stockUnit podczas aktualizacji zapasów podczas składania zamówienia. Tabela produktów z odpowiednimi ograniczeniami jest pokazana poniżej.
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
Metatabela produktu może być używana do przechowywania dodatkowych informacji o produktach, w tym adresu URL banera produktu itp. Poniżej znajduje się opis wszystkich kolumn Metatabeli produktu.
Identyfikator | Unikalny identyfikator do identyfikacji meta produktu. |
Identyfikator produktu | Identyfikator produktu do identyfikacji produktu nadrzędnego. |
Klucz | Klucz identyfikujący meta. |
Treść | Kolumna używana do przechowywania metadanych produktu. |
Metatabela produktu z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Tabela recenzji produktów
W tej sekcji zaprojektujemy Tabelę recenzji produktów do przechowywania recenzji produktów. Poniżej wymieniono opis wszystkich kolumn tabeli recenzji produktów.
Identyfikator | Unikalny identyfikator do identyfikacji recenzji produktu. |
Identyfikator produktu | Identyfikator produktu do identyfikacji produktu nadrzędnego. |
Identyfikator rodzica | Identyfikator nadrzędny do identyfikacji recenzji nadrzędnej. |
Tytuł | Tytuł recenzji. |
Ocena | Ocena recenzji. |
Opublikowane | Może być użyty do określenia, czy opinia jest publicznie dostępna. |
Utworzono w | Przechowuje datę i godzinę przesłania recenzji. |
Opublikowano w | Przechowuje datę i godzinę publikacji recenzji. |
Treść | Kolumna używana do przechowywania szczegółów recenzji. |
Tabela przeglądu produktów z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Tabela kategorii i tabela kategorii produktów
W tej sekcji zaprojektujemy Tabelę kategorii i Tabela kategorii produktów do przechowywania kategorii produktów i ich mapowań. Poniżej znajduje się opis wszystkich kolumn tabeli kategorii.
Identyfikator | Unikalny identyfikator do identyfikacji kategorii. |
Identyfikator rodzica | Identyfikator nadrzędny do identyfikacji kategorii nadrzędnej. |
Tytuł | Tytuł kategorii. |
Metatytuł | Metatytuł używany do tytułu przeglądarki i SEO. |
Ślimak | Narzędzie kategorii do utworzenia adresu URL. |
Treść | Kolumna używana do przechowywania szczegółów kategorii. |
Tabela kategorii z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Poniżej znajduje się opis wszystkich kolumn tabeli kategorii produktów.
Identyfikator produktu | Identyfikator produktu do identyfikacji produktu. |
Identyfikator kategorii | Identyfikator kategorii do identyfikacji kategorii. |
Tabela kategorii produktów z odpowiednimi ograniczeniami jest pokazana poniżej.
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);
Tabela tagów i tabela tagów produktu
Podobnie jak w przypadku tabel kategorii i produktów, możemy zaprojektować Tabelę tagów i Tabela tagów produktów . Poniżej wymieniono główne różnice między kategorią a tagiem.
- Kolumna parentId nie jest wymagana w tabeli tagów.
- Liczba kategorii pozostaje niska, ponieważ można ich użyć do utworzenia menu głównego do celów nawigacyjnych. Tagi mogą być większe w porównaniu z kategoriami.
- Do powiązania produktów można użyć zarówno kategorii, jak i tagów.
- Do produktu należy przypisać tylko kilka kategorii, podczas gdy liczba tagów może być większa.
Tabela koszyka i tabela elementów koszyka
Ta sekcja zawiera tabele do zarządzania wirtualnymi wózkami w celu przechowywania wyboru użytkownika przed utworzeniem rzeczywistego zamówienia. Jeśli użytkownik anuluje płatność lub płatność się nie powiedzie, te same koszyki mogą zostać użyte jako porzucony koszyk przez zespół marketingowy, aby zapytać o kupujących. Zalogowanego użytkownika można również powiązać z koszykiem. Poniżej znajduje się opis wszystkich kolumn tabeli koszyka.
Notatki :Tabela koszyka i Tabela pozycji koszyka mogą być opcjonalne, jeśli do przechowywania danych koszyka używana jest baza danych lokalnych, sesji lub w pamięci, taka jak Redis. To samo można odnieść do utworzenia zamówienia po pomyślnej płatności.
Identyfikator | Unikalny identyfikator do identyfikacji koszyka. |
Identyfikator użytkownika | Identyfikator użytkownika do identyfikacji użytkownika lub kupującego powiązanego z koszykiem. |
Identyfikator sesji | Unikalny identyfikator sesji powiązany z koszykiem. |
Token | Unikalny token powiązany z koszykiem, który identyfikuje koszyk w wielu sesjach. Ten sam token można również przekazać do bramki płatności, jeśli jest to wymagane. |
Stan | Stan koszyka może być Nowy, Koszyk, Do kasy, Zapłacony, Zakończony i Porzucony. |
Imię | Imię użytkownika. |
Drugie imię | Drugie imię użytkownika. |
Nazwisko | Nazwisko użytkownika. |
Komórka | Numer telefonu komórkowego użytkownika. |
Poczta e-mail | E-mail użytkownika. |
Wiersz 1 | Pierwszy wiersz do przechowywania adresu. |
Wiersz 2 | Druga linia do przechowywania adresu. |
Miasto | Miasto adresu. |
Prowincja | Prowincja adresu. |
Kraj | Kraj adresu. |
Utworzono w | Przechowuje datę i godzinę utworzenia koszyka. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji koszyka. |
Treść | Kolumna używana do przechowywania dodatkowych szczegółów koszyka. |
Tabela koszyka z odpowiednimi ograniczeniami jest pokazana poniżej.
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);
Poniżej wymieniono opis wszystkich kolumn tabeli pozycji koszyka.
Identyfikator | Unikalny identyfikator do identyfikacji pozycji koszyka. |
Identyfikator produktu | Identyfikator produktu identyfikujący produkt powiązany z pozycją koszyka. |
Identyfikator koszyka | Identyfikator koszyka identyfikujący koszyk powiązany z pozycją koszyka. |
SKU | SKU produktu podczas jego zakupu. |
Cena | Cena produktu przy zakupie. |
Rabat | Rabat produktu podczas jego zakupu. |
Ilość | Ilość produktu wybrana przez użytkownika. |
Aktywny | Flaga określająca, czy produkt jest aktywny w koszyku. Można go użyć, aby uniknąć wielokrotnego dodawania tego samego produktu do tego samego koszyka. |
Utworzono w | Przechowuje datę i godzinę utworzenia elementu koszyka. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji pozycji koszyka. |
Treść | Kolumna używana do przechowywania dodatkowych szczegółów pozycji koszyka. |
Tabela pozycji koszyka z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Tabela zamówień i tabela pozycji zamówienia
Ta sekcja zawiera tabele do zarządzania zamówieniami w sklepie. Z zamówieniem można również powiązać zalogowanego użytkownika. Poniżej znajduje się opis wszystkich kolumn tabeli zamówień.
Identyfikator | Unikalny identyfikator do identyfikacji zamówienia. |
Identyfikator użytkownika | Identyfikator użytkownika do identyfikacji użytkownika lub kupującego powiązanego z zamówieniem. |
Identyfikator sesji | Unikalny identyfikator sesji powiązany z zamówieniem. |
Token | Unikalny token powiązany z zamówieniem, który identyfikuje go w wielu sesjach. Ten sam token można również przekazać do bramki płatności, jeśli jest to wymagane. |
Stan | Status zamówienia może być:Nowe, Do kasy, Zapłacone, Nieudane, Wysłane, Dostarczone, Zwrócone i Ukończone. |
Suma częściowa | Całkowita cena pozycji zamówienia. |
Zniżka na przedmiot | Całkowity rabat na pozycje zamówienia. |
Podatek | Podatek od pozycji zamówienia. |
Wysyłka | Opłaty za wysyłkę pozycji zamówienia. |
Łącznie | Całkowita cena Zamówienia wraz z podatkiem i kosztami wysyłki. Nie obejmuje zniżek na przedmioty. |
Promocja | Kod promocyjny Zamówienia. |
Rabat | Całkowity rabat Zamówienia na podstawie kodu promocyjnego lub rabatu w sklepie. |
Całkowita suma | Całkowita suma zamówienia do zapłaty przez kupującego. |
Imię | Imię użytkownika. |
Drugie imię | Drugie imię użytkownika. |
Nazwisko | Nazwisko użytkownika. |
Komórka | Numer telefonu komórkowego użytkownika. |
Poczta e-mail | E-mail użytkownika. |
Wiersz 1 | Pierwszy wiersz do przechowywania adresu. |
Wiersz 2 | Druga linia do przechowywania adresu. |
Miasto | Miasto adresu. |
Prowincja | Prowincja adresu. |
Kraj | Kraj adresu. |
Utworzono w | Przechowuje datę i godzinę utworzenia zamówienia. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji zamówienia. |
Treść | Kolumna używana do przechowywania dodatkowych szczegółów zamówienia. |
Tabela kolejności z odpowiednimi ograniczeniami jest pokazana poniżej.
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);
Poniżej wymieniono opis wszystkich kolumn tabeli pozycji zamówienia.
Identyfikator | Unikalny identyfikator do identyfikacji zamówionego produktu. |
Identyfikator produktu | Identyfikator produktu identyfikujący produkt powiązany z zamówioną pozycją. |
Identyfikator zamówienia | Identyfikator zamówienia identyfikujący zamówienie powiązane z zamówionym produktem. |
SKU | SKU produktu podczas jego zakupu. |
Cena | Cena produktu przy zakupie. |
Rabat | Rabat produktu podczas jego zakupu. |
Ilość | Ilość produktu wybrana przez użytkownika. |
Utworzono w | Przechowuje datę i godzinę utworzenia zamówionego elementu. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji zamówionego elementu. |
Treść | Kolumna używana do przechowywania dodatkowych szczegółów zamówionego przedmiotu. |
Tabela pozycji zamówienia z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Tabela transakcji
Potrzebujemy również tabeli transakcji do śledzenia płatności za zamówienie dokonywanych przez kupującego oraz do prowadzenia ksiąg rachunkowych. Możemy również użyć tej samej tabeli do zarejestrowania częściowego lub pełnego zwrotu zamówienia. Poniżej wymieniono opis wszystkich kolumn tabeli transakcji.
Identyfikator | Unikalny identyfikator do identyfikacji transakcji. |
Identyfikator użytkownika | Identyfikator użytkownika do identyfikacji użytkownika powiązanego z transakcją. |
Identyfikator zamówienia | Identyfikator zamówienia identyfikujący zamówienie związane z transakcją. |
Kod | Identyfikator płatności dostarczony przez bramkę płatności. |
Wpisz | Typem transakcji zamówienia może być kredyt lub debet. |
Tryb | Trybem realizacji zamówienia może być Offline, Płatność przy odbiorze, Czek, Draft, Przewodowy i Online. |
Stan | Statusem transakcji zamówienia może być Nowa, Anulowana, Nieudana, Oczekująca, Odrzucona, Odrzucona i Powodzenie. |
Utworzono w | Przechowuje datę i godzinę utworzenia transakcji zamówienia. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji transakcji zamówienia. |
Treść | Kolumna używana do przechowywania dodatkowych szczegółów transakcji. |
Tabela transakcji z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Tabela adresowa
Tabeli adresów można użyć, aby uniknąć zbędnych kolumn w tabeli Koszyk i Zamówienie, w zależności od rzeczywistej implementacji. Można go bezpośrednio zmapować do tabeli koszyka i tabeli zamówień za pomocą odpowiednich kluczy obcych.
Podsumowanie
W tym samouczku omówiliśmy projekt bazy danych koszyka zakupów online do przechowywania użytkowników i zarządzania zapasami produktów. Zapewnił również projekt bazy danych do zarządzania koszykiem, przechowywania pozycji koszyka i zarządzania zamówieniami w sklepie internetowym. Uproszczony schemat blokowy zakupów online można odnieść do wdrożenia koszyka na zakupy.
Możesz przesłać swoje uwagi, aby dołączyć do dyskusji. Możesz być również zainteresowany zaprojektowaniem bazy danych aplikacji Blog oraz Poll &Survey. Pełny schemat bazy danych jest również dostępny na GitHub.