Mysql
 sql >> Database >  >> RDS >> Mysql

Guida alla progettazione di database per il carrello degli acquisti online in MySQL

Questo tutorial fornisce passaggi completi per progettare uno schema di database di negozi online e carrelli della spesa per gestire utenti, prodotti, recensioni, carrelli, ordini e pagamenti. Può essere ulteriormente utilizzato per sviluppare un negozio online e siti Web o applicazioni basati su carrello.

Il diagramma della relazione tra entità o il design del database visivo è mostrato di seguito.

Carrello della spesa in linea

Note :consente agli ordini degli ospiti di effettuare l'ordine senza effettuare il login. La sicurezza può essere gestita seguendo il database RBAC in MySql.

Puoi anche visitare i tutorial popolari tra cui Come installare MySQL 8 su Ubuntu, Come installare MySQL 8 su Windows, Come installare MySQL 8 con Workbench su Windows 10, Database RBAC in MySql, Database del blog in MySql, Database dei quiz in MySQL, Sondare e sondare il database su MySQL e apprendere le query SQL di base in MySQL.

Banca dati negozio

Il primo passo è creare il database del negozio. Può essere creato utilizzando la query come mostrato di seguito.

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

Ho usato il set di caratteri utf8mb4 per supportare un'ampia gamma di caratteri.

Tabella utenti

In questa sezione, progetteremo la Tabella utente per memorizzare le informazioni sull'utente. La stessa tabella può essere utilizzata per gestire diversi tipi di utenti inclusi amministratori e clienti. Può anche essere utilizzato per mettere in relazione i creatori del prodotto (dal pannello di amministrazione) e gli ordini dei clienti effettuati sul sito Web. Gli utenti possono tracciare i propri ordini e monitorare lo stato. Di seguito è riportata la descrizione di tutte le colonne della Tabella Utente.

ID L'ID univoco per identificare l'utente.
Nome Il nome dell'utente.
Secondo nome Il secondo nome dell'utente.
Cognome Il cognome dell'utente.
Cellulare Il numero di cellulare dell'utente. Può essere utilizzato per scopi di accesso e registrazione.
E-mail L'e-mail dell'utente. Può essere utilizzato per scopi di accesso e registrazione.
Hash password L'hash della password generato dall'algoritmo appropriato. Dobbiamo evitare di memorizzare password semplici o crittografate.
Amministratore Il flag per identificare se l'utente è un amministratore. Non è necessario se le tabelle RBAC vengono create seguendo la progettazione del database RBAC.
Fornitore Il flag per identificare se l'utente può ospitare un prodotto nel negozio. Non è necessario se le tabelle RBAC vengono create seguendo la progettazione del database RBAC.
Registrato presso Questa colonna può essere utilizzata per calcolare la vita dell'utente con l'applicazione.
Ultimo accesso Può essere utilizzato per identificare l'ultimo accesso dell'utente.
Introduzione La breve introduzione del Vendor User da visualizzare nella Pagina del Prodotto.
Profilo I dettagli del fornitore da visualizzare nella pagina del prodotto.

La tabella utente con i vincoli appropriati è quella mostrata di seguito.

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

Tabella dei prodotti

In questa sezione, progetteremo la Tabella dei prodotti per memorizzare i dati del prodotto. Di seguito è riportata la descrizione di tutte le colonne della Tabella Prodotto.

ID L'ID univoco per identificare il prodotto.
ID utente L'ID utente per identificare l'amministratore o il fornitore.
Titolo Il titolo del prodotto da visualizzare nella Pagina del negozio e nella Pagina del prodotto.
Metatitolo Il meta titolo da utilizzare per il titolo del browser e SEO.
Slug Lo slug per formare l'URL.
Riepilogo Il riepilogo per citare i punti salienti.
Tipo Il tipo per distinguere tra i diversi tipi di prodotto.
SKU L'unità Stock Keeping per monitorare l'inventario dei prodotti.
Prezzo Il prezzo del prodotto.
Sconto Lo sconto sul prodotto.
Quantità La quantità disponibile del prodotto.
Acquista Può essere utilizzato per identificare se il prodotto è disponibile pubblicamente per lo shopping.
Creato a Memorizza la data e l'ora di creazione del prodotto.
Aggiornato a Memorizza la data e l'ora in cui il prodotto viene aggiornato.
Pubblicato su Memorizza la data e l'ora in cui il prodotto viene pubblicato sullo Shop.
Inizia alle Memorizza la data e l'ora in cui inizia la vendita del prodotto.
Termina alle Memorizza la data e l'ora in cui termina la vendita del prodotto.
Contenuto La colonna utilizzata per memorizzare i dettagli aggiuntivi del prodotto.

Utilizza la quantità della colonna per tenere traccia delle scorte disponibili nell'inventario dei prodotti per mantenere il design semplice. Potrebbe essere necessario specificare la quantità in più colonne per coprire un'ampia gamma di prodotti. Le possibili colonne potrebbero essere sellQuantity, sellUnit, stockQuantity e stockUnit dove sellQuantity e sellUnit possono essere utilizzate per essere visualizzate nello Shop per gli acquirenti e stockQuantity e stockUnit possono essere utilizzate per tracciare l'inventario. Potrebbe anche essere necessario convertire sellUnit in stockUnit durante l'aggiornamento dell'inventario al momento dell'ordine. La tabella dei prodotti con i vincoli appropriati è quella mostrata di seguito.

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 prodotto

La Meta Table del prodotto può essere utilizzata per memorizzare informazioni aggiuntive sui prodotti, incluso l'URL del banner del prodotto, ecc. Di seguito è menzionata la descrizione di tutte le colonne della Meta Table del prodotto.

ID L'ID univoco per identificare il meta del prodotto.
ID prodotto L'ID prodotto per identificare il prodotto principale.
Chiave La chiave che identifica il meta.
Contenuto La colonna utilizzata per memorizzare i metadati del prodotto.

La tabella Meta del prodotto con i vincoli appropriati è quella mostrata di seguito.

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;

Tabella di revisione del prodotto

In questa sezione, progetteremo la Tabella di revisione del prodotto per memorizzare le recensioni dei prodotti. Di seguito è riportata la descrizione di tutte le colonne della tabella di revisione del prodotto.

ID L'ID univoco per identificare la recensione del prodotto.
ID prodotto L'ID prodotto per identificare il prodotto principale.
ID genitore L'ID genitore per identificare la recensione genitore.
Titolo Il titolo della recensione.
Valutazione La valutazione della recensione.
Pubblicato Può essere utilizzato per identificare se la recensione è disponibile pubblicamente.
Creato a Memorizza la data e l'ora in cui viene inviata la recensione.
Pubblicato su Memorizza la data e l'ora di pubblicazione della recensione.
Contenuto La colonna utilizzata per memorizzare i dettagli della recensione.

La tabella di revisione del prodotto con i vincoli appropriati è quella mostrata di seguito.

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;

Tabella delle categorie e Tabella delle categorie dei prodotti

In questa sezione, progetteremo la Tabella delle categorie e Tabella delle categorie di prodotti per memorizzare le categorie di prodotti e le relative mappature. Di seguito è riportata la descrizione di tutte le colonne della Tabella delle Categorie.

ID L'ID univoco per identificare la categoria.
ID genitore L'ID genitore per identificare la categoria genitore.
Titolo Il titolo della categoria.
Metatitolo Il meta titolo da utilizzare per il titolo del browser e SEO.
Slug La categoria slug per formare l'URL.
Contenuto La colonna utilizzata per memorizzare i dettagli della categoria.

La tabella delle categorie con i vincoli appropriati è quella mostrata di seguito.

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;

Di seguito è riportata la descrizione di tutte le colonne della Tabella delle categorie di prodotti.

ID prodotto L'ID prodotto per identificare il prodotto.
ID categoria L'ID categoria per identificare la categoria.

La tabella delle categorie di prodotti con i vincoli appropriati è quella mostrata di seguito.

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

Tabella Tag e Tabella Tag Prodotto

In modo simile alle tabelle delle categorie e dei prodotti, possiamo progettare la Tag Table e Tabella dei tag prodotto . Le principali differenze tra Categoria e Tag sono elencate di seguito.

  • La colonna parentId non è richiesta nella tabella dei tag.
  • Il conteggio delle categorie rimane basso poiché queste possono essere utilizzate per formare il menu principale per scopi di navigazione. I tag possono essere maggiori rispetto alle categorie.
  • Sia le categorie che i tag possono essere utilizzati per mettere in relazione i prodotti.
  • Si dovrebbero assegnare solo poche categorie a un prodotto, mentre i tag contano di più.

Tabella Carrello e Tabella Articoli Carrello

In questa sezione vengono fornite le tabelle per gestire i carrelli virtuali per memorizzare la selezione dell'utente prima della creazione dell'ordine vero e proprio. Se l'utente annulla il pagamento o il pagamento non riesce, gli stessi carrelli possono essere utilizzati come carrello abbandonato dal team di marketing per richiedere informazioni sugli acquirenti. Un utente loggato può anche essere associato al carrello. Di seguito è riportata la descrizione di tutte le colonne della Tabella Carrello.

Note :La tabella del carrello e la tabella degli articoli del carrello possono essere rese opzionali se per archiviare i dati del carrello vengono utilizzati i dati locali, la sessione o il database in memoria come Redis. Lo stesso può essere fatto riferimento per creare l'ordine a pagamento andato a buon fine.

ID L'ID univoco per identificare il carrello.
ID utente L'ID utente per identificare l'utente o l'acquirente associato al carrello.
ID sessione L'ID sessione univoco associato al carrello.
Segnale Il token univoco associato al carrello per identificare il carrello su più sessioni. Lo stesso token può anche essere passato al Payment Gateway, se richiesto.
Stato Lo stato del carrello può essere Nuovo, Carrello, Checkout, Pagato, Completo e Abbandonato.
Nome Il nome dell'utente.
Secondo nome Il secondo nome dell'utente.
Cognome Il cognome dell'utente.
Cellulare Il numero di cellulare dell'utente.
E-mail L'e-mail dell'utente.
Riga 1 La prima riga per memorizzare l'indirizzo.
Riga 2 La seconda riga per memorizzare l'indirizzo.
Città La città dell'indirizzo.
Provincia La provincia dell'indirizzo.
Paese Il paese dell'indirizzo.
Creato a Memorizza la data e l'ora di creazione del carrello.
Aggiornato a Memorizza la data e l'ora di aggiornamento del carrello.
Contenuto La colonna utilizzata per memorizzare i dettagli aggiuntivi del carrello.

La tabella del carrello con i vincoli appropriati è quella mostrata di seguito.

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

Di seguito è riportata la descrizione di tutte le colonne della Tabella Articoli Carrello.

ID L'ID univoco per identificare l'articolo del carrello.
ID prodotto L'ID prodotto per identificare il prodotto associato all'articolo del carrello.
ID carrello L'ID carrello per identificare il carrello associato all'articolo del carrello.
SKU La SKU del prodotto al momento dell'acquisto.
Prezzo Il prezzo del prodotto al momento dell'acquisto.
Sconto Lo sconto del prodotto al momento dell'acquisto.
Quantità La quantità del prodotto selezionato dall'utente.
Attivo Il flag per identificare se il prodotto è attivo nel carrello. Può essere utilizzato per evitare che lo stesso prodotto venga aggiunto più volte allo stesso carrello.
Creato a Memorizza la data e l'ora di creazione dell'articolo nel carrello.
Aggiornato a Memorizza la data e l'ora in cui l'articolo del carrello viene aggiornato.
Contenuto La colonna utilizzata per memorizzare i dettagli aggiuntivi dell'articolo del carrello.

La tabella degli articoli del carrello con i vincoli appropriati è quella mostrata di seguito.

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;

Tabella dell'ordine e tabella dell'articolo dell'ordine

In questa sezione vengono fornite le tabelle per la gestione degli ordini in negozio. È possibile associare all'ordine anche un utente registrato. Di seguito è riportata la descrizione di tutte le colonne della Tabella degli Ordini.

ID L'ID univoco per identificare l'ordine.
ID utente L'ID utente per identificare l'utente o l'acquirente associato all'ordine.
ID sessione L'ID sessione univoco associato all'ordine.
Segnale Il token univoco associato all'ordine per identificarlo su più sessioni. Lo stesso token può anche essere passato al Payment Gateway, se richiesto.
Stato Lo stato dell'ordine può essere Nuovo, Checkout, Pagato, Non riuscito, Spedito, Consegnato, Reso e Completato.
Sub Totale Il prezzo totale degli articoli dell'ordine.
Sconto articolo Lo sconto totale degli articoli dell'ordine.
Tasse La tassa sugli articoli dell'ordine.
Spedizione Le spese di spedizione degli Articoli dell'ordine.
Totale Il prezzo totale dell'Ordine comprensivo di tasse e spedizione. Escluso lo sconto articoli.
Promozione Il codice promozionale dell'Ordine.
Sconto Lo sconto totale dell'Ordine in base al codice promozionale o allo sconto del negozio.
Totale generale Il totale generale dell'ordine a carico dell'acquirente.
Nome Il nome dell'utente.
Secondo nome Il secondo nome dell'utente.
Cognome Il cognome dell'utente.
Cellulare Il numero di cellulare dell'utente.
E-mail L'e-mail dell'utente.
Riga 1 La prima riga per memorizzare l'indirizzo.
Riga 2 La seconda riga per memorizzare l'indirizzo.
Città La città dell'indirizzo.
Provincia La provincia dell'indirizzo.
Paese Il paese dell'indirizzo.
Creato a Memorizza la data e l'ora in cui viene creato l'ordine.
Aggiornato a Memorizza la data e l'ora in cui l'ordine viene aggiornato.
Contenuto La colonna utilizzata per memorizzare i dettagli aggiuntivi dell'ordine.

La tabella degli ordini con i vincoli appropriati è quella mostrata di seguito.

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

Di seguito è riportata la descrizione di tutte le colonne della Tabella degli articoli dell'ordine.

ID L'ID univoco per identificare l'articolo ordinato.
ID prodotto L'ID prodotto per identificare il prodotto associato all'articolo ordinato.
ID ordine L'ID ordine per identificare l'ordine associato all'articolo ordinato.
SKU La SKU del prodotto al momento dell'acquisto.
Prezzo Il prezzo del prodotto al momento dell'acquisto.
Sconto Lo sconto del prodotto al momento dell'acquisto.
Quantità La quantità del prodotto selezionato dall'utente.
Creato a Memorizza la data e l'ora in cui viene creato l'articolo ordinato.
Aggiornato a Memorizza la data e l'ora in cui l'articolo ordinato viene aggiornato.
Contenuto La colonna utilizzata per memorizzare i dettagli aggiuntivi dell'articolo ordinato.

La tabella degli articoli dell'ordine con i vincoli appropriati è quella mostrata di seguito.

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;

Tabella delle transazioni

Abbiamo anche bisogno di una tabella delle transazioni per tenere traccia dei pagamenti degli ordini effettuati dall'acquirente e per la contabilità. Possiamo anche utilizzare la stessa tabella per registrare il rimborso parziale o totale dell'ordine. Di seguito è riportata la descrizione di tutte le colonne della Tabella delle Transazioni.

ID L'ID univoco per identificare la transazione.
ID utente L'ID utente per identificare l'utente associato alla transazione.
ID ordine L'ID ordine per identificare l'ordine associato alla transazione.
Codice L'ID pagamento fornito dal gateway di pagamento.
Tipo Il tipo di transazione dell'ordine può essere di credito o di debito.
Modalità La modalità di transazione dell'ordine può essere Offline, Contrassegno, Assegno, Bozza, Bonifico e Online.
Stato Lo stato della transazione dell'ordine può essere Nuovo, Annullato, Non riuscito, In attesa, Rifiutato, Rifiutato e Riuscito.
Creato a Memorizza la data e l'ora in cui viene creata la transazione dell'ordine.
Aggiornato a Memorizza la data e l'ora in cui viene aggiornata la transazione dell'ordine.
Contenuto La colonna utilizzata per memorizzare i dettagli aggiuntivi della transazione.

La tabella delle transazioni con i vincoli appropriati è quella mostrata di seguito.

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;

Tabella degli indirizzi

È possibile utilizzare una tabella di indirizzi per evitare le colonne ridondanti nella tabella Carrello e Ordine a seconda dell'effettiva implementazione. Può essere mappato direttamente alla tabella del carrello e alla tabella degli ordini utilizzando le chiavi esterne appropriate.

Riepilogo

In questo tutorial, abbiamo discusso la progettazione del database di un carrello degli acquisti online per archiviare gli utenti e gestire l'inventario dei prodotti. Ha inoltre fornito la progettazione del database per gestire il carrello, archiviare gli articoli del carrello e gestire gli ordini su un negozio online. È possibile fare riferimento al diagramma di flusso dello shopping online semplificato per implementare un carrello degli acquisti.

Puoi inviare i tuoi commenti per partecipare alla discussione. Potresti anche essere interessato a progettare il database delle applicazioni Blog e Poll &Survey. Lo schema completo del database è disponibile anche su GitHub.