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