Dieses Tutorial enthält vollständige Schritte zum Entwerfen eines Datenbankschemas von Online-Shops und Warenkörben, um die Benutzer, Produkte, Bewertungen, Warenkörbe, Bestellungen und Zahlungen zu verwalten. Es kann weiter verwendet werden, um einen Online-Shop und Warenkorb-basierte Websites oder Anwendungen zu entwickeln.
Das Entity-Relationship-Diagramm oder visuelle Datenbankdesign ist unten dargestellt.
Online-Warenkorb
Notizen :Es ermöglicht Gastbestellungen, die Bestellung aufzugeben, ohne sich anzumelden. Die Sicherheit kann gehandhabt werden, indem der RBAC-Datenbank in MySql gefolgt wird.
Sie können auch die beliebten Tutorials besuchen, darunter How To Install MySQL 8 on Ubuntu, How To Install MySQL 8 on Windows, How To Install MySQL 8 With Workbench On Windows 10, RBAC Database in MySql, Blog Database in MySql, Quiz Database In MySQL, Umfrage- und Umfragedatenbank zu MySQL und grundlegende SQL-Abfragen in MySQL lernen.
Shop-Datenbank
Der allererste Schritt ist die Erstellung der Shop-Datenbank. Es kann mit der unten gezeigten Abfrage erstellt werden.
CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ich habe den Zeichensatz utf8mb4 verwendet um eine Vielzahl von Zeichen zu unterstützen.
Benutzertabelle
In diesem Abschnitt entwerfen wir die Benutzertabelle Benutzerinformationen zu speichern. Dieselbe Tabelle kann verwendet werden, um verschiedene Arten von Benutzern zu verwalten, einschließlich Administratoren und Kunden. Es kann auch verwendet werden, um die Produktersteller (aus dem Admin-Panel) und die auf der Website aufgegebenen Kundenbestellungen in Beziehung zu setzen. Benutzer können ihre eigenen Bestellungen verfolgen und den Status verfolgen. Nachfolgend finden Sie die Beschreibung aller Spalten der Benutzertabelle.
ID | Die eindeutige ID zur Identifizierung des Benutzers. |
Vorname | Der Vorname des Benutzers. |
Zweiter Vorname | Der zweite Vorname des Benutzers. |
Nachname | Der Nachname des Benutzers. |
Mobil | Die Mobiltelefonnummer des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden. |
Die E-Mail des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden. | |
Passwort-Hash | Der vom entsprechenden Algorithmus generierte Passwort-Hash. Wir müssen vermeiden, einfache oder verschlüsselte Passwörter zu speichern. |
Administrator | Das Flag zur Identifizierung, ob der Benutzer ein Administrator ist. Es ist nicht erforderlich, wenn RBAC-Tabellen gemäß dem RBAC-Datenbankdesign erstellt werden. |
Anbieter | Das Flag, um zu identifizieren, ob der Benutzer ein Produkt im Shop hosten kann. Es ist nicht erforderlich, wenn RBAC-Tabellen gemäß dem RBAC-Datenbankdesign erstellt werden. |
Registriert unter | Diese Spalte kann verwendet werden, um die Lebensdauer des Benutzers mit der Anwendung zu berechnen. |
Letzte Anmeldung | Es kann verwendet werden, um die letzte Anmeldung des Benutzers zu identifizieren. |
Einführung | Die kurze Einführung des Anbieterbenutzers, die auf der Produktseite angezeigt wird. |
Profil | Die auf der Produktseite anzuzeigenden Anbieterdetails. |
Die Benutzertabelle mit den entsprechenden Einschränkungen sieht unten aus.
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) );
Produkttabelle
In diesem Abschnitt entwerfen wir die Produkttabelle um die Produktdaten zu speichern. Nachfolgend finden Sie die Beschreibung aller Spalten der Produkttabelle.
ID | Die eindeutige ID zur Identifizierung des Produkts. |
Benutzer-ID | Die Benutzer-ID zur Identifizierung des Administrators oder Anbieters. |
Titel | Der Produkttitel, der auf der Shop-Seite und der Produktseite angezeigt werden soll. |
Metatitel | Der Metatitel, der für Browsertitel und SEO verwendet werden soll. |
Schnecke | Der Slug zur Bildung der URL. |
Zusammenfassung | Die Zusammenfassung, um die wichtigsten Highlights zu erwähnen. |
Typ | Der Typ, um zwischen den verschiedenen Produkttypen zu unterscheiden. |
SKU | Die Stock Keeping Unit zur Verfolgung des Produktbestands. |
Preis | Der Preis des Produkts. |
Rabatt | Der Rabatt auf das Produkt. |
Menge | Die verfügbare Menge des Produkts. |
Einkaufen | Es kann verwendet werden, um festzustellen, ob das Produkt öffentlich zum Einkaufen verfügbar ist. |
Erstellt am | Es speichert das Datum und die Uhrzeit, zu der das Produkt erstellt wurde. |
Aktualisiert um | Datum und Uhrzeit der Produktaktualisierung werden gespeichert. |
Veröffentlicht unter | Es speichert Datum und Uhrzeit der Veröffentlichung des Produkts im Shop. |
Beginnt bei | Es speichert das Datum und die Uhrzeit, zu der der Produktverkauf beginnt. |
Endet bei | Datum und Uhrzeit des Endes des Produktverkaufs werden gespeichert. |
Inhalt | Die Spalte, in der die zusätzlichen Details des Produkts gespeichert werden. |
Es verwendet die Spaltenmenge, um den im Produktinventar verfügbaren Bestand zu verfolgen, um das Design einfach zu halten. Es kann erforderlich sein, die Menge in mehreren Spalten anzugeben, um ein breites Produktspektrum abzudecken. Die möglichen Spalten könnten sellQuantity, sellUnit, stockQuantity und stockUnit sein, wobei sellQuantity und sellUnit verwendet werden können, um im Shop für die Käufer angezeigt zu werden, und stockQuantity und stockUnit verwendet werden können, um den Bestand zu verfolgen. Es kann auch erforderlich sein, sellUnit in stockUnit umzuwandeln, während das Inventar bei der Bestellung aktualisiert wird. Die Produkttabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
CREATE TABLE `shop`.`product` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`shop` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`startsAt` DATETIME NULL DEFAULT NULL,
`endsAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_product_user` (`userId` ASC),
CONSTRAINT `fk_product_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Produktmeta
Die Produkt-Metatabelle kann verwendet werden, um zusätzliche Informationen über Produkte zu speichern, einschließlich der URL des Produktbanners usw. Unten aufgeführt finden Sie die Beschreibung aller Spalten der Produkt-Metatabelle.
ID | Die eindeutige ID zur Identifizierung des Produktmeta. |
Produkt-ID | Die Produkt-ID zur Identifizierung des übergeordneten Produkts. |
Schlüssel | Der Schlüssel, der das Meta identifiziert. |
Inhalt | Die Spalte zum Speichern der Produktmetadaten. |
Die Produkt-Meta-Tabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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;
Produktbewertungstabelle
In diesem Abschnitt entwerfen wir die Produktbewertungstabelle um die Produktbewertungen zu speichern. Nachfolgend finden Sie die Beschreibung aller Spalten der Produktbewertungstabelle.
ID | Die eindeutige ID zur Identifizierung der Produktbewertung. |
Produkt-ID | Die Produkt-ID zur Identifizierung des übergeordneten Produkts. |
Eltern-ID | Die übergeordnete ID zur Identifizierung der übergeordneten Bewertung. |
Titel | Der Bewertungstitel. |
Bewertung | Die Rezensionsbewertung. |
Veröffentlicht | Es kann verwendet werden, um festzustellen, ob die Bewertung öffentlich verfügbar ist. |
Erstellt am | Datum und Uhrzeit der Abgabe der Bewertung werden gespeichert. |
Veröffentlicht unter | Datum und Uhrzeit der Veröffentlichung der Bewertung werden gespeichert. |
Inhalt | Die Spalte, in der die Bewertungsdetails gespeichert werden. |
Die Produktbewertungstabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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;
Kategorietabelle und Produktkategorietabelle
In diesem Abschnitt entwerfen wir die Kategorietabelle und Produktkategorietabelle um die Produktkategorien und deren Zuordnungen zu speichern. Unten erwähnt ist die Beschreibung aller Spalten der Kategorietabelle.
ID | Die eindeutige ID zur Identifizierung der Kategorie. |
Eltern-ID | Die übergeordnete ID zur Identifizierung der übergeordneten Kategorie. |
Titel | Der Kategorietitel. |
Metatitel | Der Metatitel, der für Browsertitel und SEO verwendet werden soll. |
Schnecke | Der Kategorie-Slug zur Bildung der URL. |
Inhalt | Die Spalte zum Speichern der Kategoriedetails. |
Die Kategorietabelle mit den entsprechenden Einschränkungen sieht unten aus.
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;
Nachfolgend finden Sie die Beschreibung aller Spalten der Produktkategorietabelle.
Produkt-ID | Die Produkt-ID zur Identifizierung des Produkts. |
Kategorie-ID | Die Kategorie-ID zur Identifizierung der Kategorie. |
Die Produktkategorietabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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);
Tag-Tabelle und Produkt-Tag-Tabelle
Ähnlich wie die Kategorie- und Produktkategorietabellen können wir die Tag-Tabelle gestalten und Produkt-Tag-Tabelle . Die Hauptunterschiede zwischen der Kategorie und dem Tag sind unten aufgeführt.
- Die parentId-Spalte ist in der Tag-Tabelle nicht erforderlich.
- Die Anzahl der Kategorien bleibt niedrig, da diese verwendet werden können, um das Hauptmenü für Navigationszwecke zu bilden. Die Tags können mehr sein als Kategorien.
- Sowohl Kategorien als auch Tags können verwendet werden, um die Produkte in Beziehung zu setzen.
- Man sollte einem Produkt nur wenige Kategorien zuweisen, wobei die Anzahl der Tags höher sein kann.
Warenkorbtabelle und Warenkorbartikeltabelle
Dieser Abschnitt enthält die Tabellen zum Verwalten der virtuellen Warenkörbe, um die Benutzerauswahl zu speichern, bevor die eigentliche Bestellung erstellt wird. Wenn der Benutzer die Zahlung storniert oder die Zahlung fehlschlägt, können dieselben Warenkörbe vom Marketingteam als verlassene Warenkörbe verwendet werden, um sich nach den Käufern zu erkundigen. Dem Warenkorb kann auch ein eingeloggter Benutzer zugeordnet werden. Nachfolgend finden Sie die Beschreibung aller Spalten der Warenkorbtabelle.
Notizen :Die Warenkorbtabelle und die Warenkorbartikeltabelle können optional gemacht werden, wenn die lokalen Daten, Sitzungen oder In-Memory-Datenbanken wie Redis zum Speichern der Warenkorbdaten verwendet werden. Gleiches gilt für die Erstellung der Bestellung bei Zahlungserfolg.
ID | Die eindeutige ID zur Identifizierung des Einkaufswagens. |
Benutzer-ID | Die Benutzer-ID zur Identifizierung des mit dem Warenkorb verknüpften Benutzers oder Käufers. |
Sitzungs-ID | Die eindeutige Sitzungs-ID, die dem Einkaufswagen zugeordnet ist. |
Token | Das eindeutige Token, das dem Einkaufswagen zugeordnet ist, um den Einkaufswagen über mehrere Sitzungen hinweg zu identifizieren. Derselbe Token kann bei Bedarf auch an das Payment Gateway übergeben werden. |
Status | Der Status des Einkaufswagens kann „Neu“, „Einkaufswagen“, „Zur Kasse“, „Bezahlt“, „Abgeschlossen“ und „Verlassen“ sein. |
Vorname | Der Vorname des Benutzers. |
Zweiter Vorname | Der zweite Vorname des Benutzers. |
Nachname | Der Nachname des Benutzers. |
Mobil | Die Handynummer des Benutzers. |
Die E-Mail des Benutzers. | |
Zeile 1 | Die erste Zeile zum Speichern der Adresse. |
Zeile 2 | Die zweite Zeile zum Speichern der Adresse. |
Stadt | Die Stadt der Adresse. |
Provinz | Die Provinz der Adresse. |
Land | Das Land der Adresse. |
Erstellt am | Es speichert das Datum und die Uhrzeit, zu der der Warenkorb erstellt wurde. |
Aktualisiert um | Es speichert das Datum und die Uhrzeit, zu der der Warenkorb aktualisiert wird. |
Inhalt | Die Spalte, in der die zusätzlichen Details des Warenkorbs gespeichert werden. |
Die Warenkorb-Tabelle mit den entsprechenden Beschränkungen ist wie unten gezeigt.
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);
Nachfolgend finden Sie die Beschreibung aller Spalten der Warenkorb-Artikeltabelle.
ID | Die eindeutige ID zur Identifizierung des Artikels im Einkaufswagen. |
Produkt-ID | Die Produkt-ID zur Identifizierung des Produkts, das mit dem Artikel im Einkaufswagen verknüpft ist. |
Warenkorb-ID | Die Einkaufswagen-ID zur Identifizierung des Einkaufswagens, der mit dem Einkaufswagenartikel verknüpft ist. |
SKU | Die SKU des Produkts beim Kauf. |
Preis | Der Preis des Produkts beim Kauf. |
Rabatt | Der Rabatt des Produkts beim Kauf. |
Menge | Die Menge des vom Benutzer ausgewählten Produkts. |
Aktiv | Das Flag, um zu identifizieren, ob das Produkt im Einkaufswagen aktiv ist. Es kann verwendet werden, um zu vermeiden, dass dasselbe Produkt mehrmals in denselben Einkaufswagen gelegt wird. |
Erstellt am | Es speichert das Datum und die Uhrzeit, zu der der Warenkorbartikel erstellt wurde. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung des Warenkorbartikels werden gespeichert. |
Inhalt | Die Spalte, in der die zusätzlichen Details des Warenkorbartikels gespeichert werden. |
Die Warenkorbartikeltabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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;
Bestelltabelle und Bestellartikeltabelle
Dieser Abschnitt enthält die Tabellen zur Verwaltung der Filialbestellungen. Der Bestellung kann auch ein eingeloggter Benutzer zugeordnet werden. Unten erwähnt ist die Beschreibung aller Spalten der Auftragstabelle.
ID | Die eindeutige ID zur Identifizierung der Bestellung. |
Benutzer-ID | Die Benutzer-ID zur Identifizierung des mit der Bestellung verbundenen Benutzers oder Käufers. |
Sitzungs-ID | Die der Bestellung zugeordnete eindeutige Sitzungs-ID. |
Token | Das eindeutige Token, das der Bestellung zugeordnet ist, um sie über mehrere Sitzungen hinweg zu identifizieren. Derselbe Token kann bei Bedarf auch an das Payment Gateway übergeben werden. |
Status | Der Status der Bestellung kann Neu, Zur Kasse, Bezahlt, Fehlgeschlagen, Versendet, Geliefert, Retourniert und Abgeschlossen sein. |
Zwischensumme | Der Gesamtpreis der Bestellartikel. |
Artikelrabatt | Der Gesamtrabatt der Bestellartikel. |
Steuer | Die Steuer auf die Bestellartikel. |
Versand | Die Versandkosten der Bestellartikel. |
Gesamt | Der Gesamtpreis der Bestellung einschließlich Steuern und Versand. Es schließt den Artikelrabatt aus. |
Promo | Der Promo-Code der Bestellung. |
Rabatt | Der Gesamtrabatt der Bestellung basierend auf dem Promo-Code oder Shop-Rabatt. |
Gesamtsumme | Die vom Käufer zu zahlende Gesamtsumme der Bestellung. |
Vorname | Der Vorname des Benutzers. |
Zweiter Vorname | Der zweite Vorname des Benutzers. |
Nachname | Der Nachname des Benutzers. |
Mobil | Die Handynummer des Benutzers. |
Die E-Mail des Benutzers. | |
Zeile 1 | Die erste Zeile zum Speichern der Adresse. |
Zeile 2 | Die zweite Zeile zum Speichern der Adresse. |
Stadt | Die Stadt der Adresse. |
Provinz | Die Provinz der Adresse. |
Land | Das Land der Adresse. |
Erstellt am | Datum und Uhrzeit der Auftragserstellung werden gespeichert. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Bestellung werden gespeichert. |
Inhalt | Die Spalte, in der die zusätzlichen Details der Bestellung gespeichert werden. |
Die Bestelltabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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);
Nachfolgend finden Sie die Beschreibung aller Spalten der Bestellartikeltabelle.
ID | Die eindeutige ID zur Identifizierung des bestellten Artikels. |
Produkt-ID | Die Produkt-ID zur Identifizierung des Produkts, das dem bestellten Artikel zugeordnet ist. |
Bestell-ID | Die Bestell-ID zur Identifizierung der mit dem bestellten Artikel verknüpften Bestellung. |
SKU | Die SKU des Produkts beim Kauf. |
Preis | Der Preis des Produkts beim Kauf. |
Rabatt | Der Rabatt des Produkts beim Kauf. |
Menge | Die Menge des vom Benutzer ausgewählten Produkts. |
Erstellt am | Es speichert Datum und Uhrzeit der Erstellung des bestellten Artikels. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung des bestellten Artikels werden gespeichert. |
Inhalt | Die Spalte, in der die zusätzlichen Details des bestellten Artikels gespeichert werden. |
Die Bestellpostentabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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;
Transaktionstabelle
Wir benötigen auch eine Transaktionstabelle, um die vom Käufer getätigten Bestellzahlungen zu verfolgen und für die Buchhaltung. Wir können dieselbe Tabelle auch verwenden, um die teilweise oder vollständige Rückerstattung der Bestellung zu erfassen. Unten erwähnt ist die Beschreibung aller Spalten der Transaktionstabelle.
ID | Die eindeutige ID zur Identifizierung der Transaktion. |
Benutzer-ID | Die Benutzer-ID zur Identifizierung des mit der Transaktion verknüpften Benutzers. |
Bestell-ID | Die Bestell-ID zur Identifizierung der mit der Transaktion verknüpften Bestellung. |
Code | Die vom Zahlungsgateway bereitgestellte Zahlungs-ID. |
Typ | Die Art der Bestelltransaktion kann entweder Gutschrift oder Lastschrift sein. |
Modus | Der Modus der Bestelltransaktion kann Offline, Nachnahme, Scheck, Wechsel, Kabelgebunden und Online sein. |
Status | Der Status der Bestelltransaktion kann Neu, Storniert, Fehlgeschlagen, Ausstehend, Abgelehnt, Abgelehnt und Erfolg sein. |
Erstellt am | Datum und Uhrzeit der Erstellung des Bestellvorgangs werden gespeichert. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Bestelltransaktion werden gespeichert. |
Inhalt | Die Spalte, in der die zusätzlichen Details der Transaktion gespeichert werden. |
Die Transaktionstabelle mit den entsprechenden Einschränkungen ist wie unten gezeigt.
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;
Adresstabelle
Abhängig von der tatsächlichen Implementierung kann eine Adresstabelle verwendet werden, um die redundanten Spalten in der Cart- und Order-Tabelle zu vermeiden. Es kann mit den entsprechenden Fremdschlüsseln direkt der Warenkorbtabelle und der Bestelltabelle zugeordnet werden.
Zusammenfassung
In diesem Tutorial haben wir das Datenbankdesign eines Online-Einkaufswagens besprochen, um die Benutzer zu speichern und den Produktbestand zu verwalten. Es lieferte auch das Datenbankdesign, um den Einkaufswagen zu verwalten, die Einkaufswagenartikel zu speichern und die Bestellungen in einem Online-Shop zu verwalten. Das Flussdiagramm für vereinfachtes Online-Shopping kann verwendet werden, um einen Einkaufswagen zu implementieren.
Sie können Ihre Kommentare einreichen, um an der Diskussion teilzunehmen. Sie könnten auch daran interessiert sein, die Datenbank der Anwendungen Blog und Umfrage &Umfrage zu entwerfen. Das vollständige Datenbankschema ist auch auf GitHub verfügbar.