Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przewodnik po projektowaniu bazy danych dla koszyka zakupów online w MySQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzystanie z paszportu z Sequelize i MySQL

  2. Jak sprawdzić rozmiar bazy danych w MySQL?

  3. MySQL:Nie można utworzyć tabeli (errno:150)

  4. MySQL 'user_id', w którym klauzula jest niejednoznacznym problemem

  5. Używanie SQL do określania statystyk liczby słów w polu tekstowym