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

Guide til designdatabase til online indkøbskurv i MySQL

Denne vejledning indeholder komplette trin til at designe et databaseskema over onlinebutikker og indkøbskurve til at administrere brugere, produkter, anmeldelser, vogne, ordrer og betalinger. Det kan yderligere bruges til at udvikle en onlinebutik og indkøbskurvbaserede websteder eller applikationer.

Entity Relationship Diagram eller visuelle databasedesign er vist nedenfor.

Online indkøbskurv

Noter :Det giver gæsteordrer mulighed for at afgive ordren uden at logge ind. Sikkerheden kan håndteres ved at følge RBAC Database i MySql.

Du kan også besøge de populære tutorials, herunder Sådan installeres MySQL 8 på Ubuntu, Sådan installeres MySQL 8 på Windows, Sådan installeres MySQL 8 med Workbench på Windows 10, RBAC-database i MySql, Blogdatabase i MySql, Quiz-database i MySQL, Afstemnings- og undersøgelsesdatabase på MySQL, og lær grundlæggende SQL-forespørgsler i MySQL.

Butiksdatabase

Det allerførste trin er at oprette butiksdatabasen. Den kan oprettes ved hjælp af forespørgslen som vist nedenfor.

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

Jeg har brugt tegnsættet utf8mb4 for at understøtte en bred vifte af tegn.

Brugertabel

I dette afsnit vil vi designe Brugertabellen at gemme brugeroplysninger. Den samme tabel kan bruges til at administrere forskellige typer brugere, herunder administratorer og kunder. Det kan også bruges til at relatere produktskaberne (fra administratorpanelet) og kundeordrer placeret på webstedet. Brugere kan spore deres egne ordrer og spore status. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i brugertabellen.

Id Det unikke id til at identificere brugeren.
Fornavn Brugerens fornavn.
Mellemnavn Brugerens mellemnavn.
Efternavn Brugerens efternavn.
Mobil Brugerens mobilnummer. Det kan bruges til login og registreringsformål.
E-mail Brugerens e-mail. Det kan bruges til login og registreringsformål.
Password Hash Adgangskodehashen genereret af den passende algoritme. Vi skal undgå at gemme almindelige eller krypterede adgangskoder.
Admin Flaget til at identificere, om brugeren er en administrator. Det er ikke påkrævet, hvis RBAC-tabeller oprettes ved at følge RBAC-databasedesignet.
Leverandør Flaget til at identificere, om brugeren kan hoste et produkt i butikken. Det er ikke påkrævet, hvis RBAC-tabeller oprettes ved at følge RBAC-databasedesignet.
Registreret på Denne kolonne kan bruges til at beregne levetiden for brugeren med applikationen.
Sidste login Det kan bruges til at identificere brugerens sidste login.
Introduktion Den korte introduktion af leverandørbrugeren, der skal vises på produktsiden.
Profil Sælgeroplysningerne, der skal vises på produktsiden.

Brugertabellen med de relevante begrænsninger er som vist nedenfor.

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

Produkttabel

I dette afsnit vil vi designe Produkttabellen at gemme produktdata. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i produkttabellen.

Id Det unikke id til at identificere produktet.
Bruger-id Bruger-id'et til at identificere administratoren eller leverandøren.
Titel Produktets titel, der skal vises på butikssiden og produktsiden.
Metatitel Metatitlen, der skal bruges til browsertitel og SEO.
Snegl Sneglen til at danne URL'en.
Oversigt Opsummeringen for at nævne de vigtigste højdepunkter.
Type Typen til at skelne mellem de forskellige produkttyper.
SKU Beholdningsenheden til at spore produktbeholdningen.
Pris Prisen på produktet.
Rabat Rabatten på produktet.
Mængde Den tilgængelige mængde af produktet.
Køb Det kan bruges til at identificere, om produktet er offentligt tilgængeligt for shopping.
Oprettet på Det gemmer dato og klokkeslæt, hvor produktet er oprettet.
Opdateret kl. Den gemmer dato og klokkeslæt, hvor produktet opdateres.
Udgivet på Den gemmer datoen og klokkeslættet, hvor produktet udgives i butikken.
Starter ved Den gemmer datoen og tidspunktet, hvor produktsalget starter.
Ender kl. Den gemmer datoen og klokkeslættet, hvor produktsalget slutter.
Indhold Kolonnen, der bruges til at gemme de yderligere oplysninger om produktet.

Den bruger kolonnemængden til at spore den tilgængelige lagerbeholdning i produktbeholdningen for at holde designet enkelt. Det kan være nødvendigt at angive mængden i flere kolonner for at dække en bred vifte af produkter. De mulige kolonner kunne være sellQuantity, sellUnit, stockQuantity og stockUnit, hvor sellQuantity og sellUnit kan bruges til at blive vist i butikken for køberne, og stockQuantity og stockUnit kan bruges til at spore beholdningen. Det kan også være nødvendigt at konvertere sellUnit til stockUnit, mens du opdaterer beholdningen ved afgivelse af ordren. Produkttabellen med de relevante begrænsninger er som vist nedenfor.

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

Produktmetatabellen kan bruges til at gemme yderligere information om produkter, inklusive produktbanner-URL osv. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i produktmetatabellen.

Id Det unikke id til at identificere produktets meta.
Produkt-id Produkt-id'et til at identificere det overordnede produkt.
Nøgle Nøglen, der identificerer metaen.
Indhold Kolonnen, der bruges til at gemme produktets metadata.

Produktmetatabellen med de relevante begrænsninger er som vist nedenfor.

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;

Tabel for produktgennemgang

I denne sektion vil vi designe produktgennemgangstabellen at gemme produktanmeldelserne. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i produktgennemgangstabellen.

Id Det unikke id til at identificere produktanmeldelsen.
Produkt-id Produkt-id'et til at identificere det overordnede produkt.
Forældre-id Forælder-id'et til at identificere forældregennemgangen.
Titel Anmeldelsestitlen.
Bedømmelse Anmeldelsesvurderingen.
Udgivet Det kan bruges til at identificere, om anmeldelsen er offentligt tilgængelig.
Oprettet på Den gemmer datoen og klokkeslættet, hvor anmeldelsen er indsendt.
Udgivet på Den gemmer datoen og klokkeslættet, hvor anmeldelsen er offentliggjort.
Indhold Kolonnen, der bruges til at gemme anmeldelsesdetaljerne.

Produktgennemgangstabellen med de relevante begrænsninger er som vist nedenfor.

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;

Kategori- og produktkategoritabel

I dette afsnit vil vi designe Kategoritabellen og Produktkategoritabel at gemme produktkategorierne og deres kortlægninger. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i kategoritabellen.

Id Det unikke id til at identificere kategorien.
Forældre-id Det overordnede id til at identificere den overordnede kategori.
Titel Kategorititlen.
Metatitel Metatitlen, der skal bruges til browsertitel og SEO.
Snegl Kategoriesneglen til at danne URL'en.
Indhold Kolonnen, der bruges til at gemme kategoridetaljerne.

Kategoritabellen med de relevante begrænsninger er som vist nedenfor.

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;

Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i produktkategoritabellen.

Produkt-id Produkt-id'et til at identificere produktet.
Kategori-id Kategori-id'et til at identificere kategorien.

Produktkategoritabellen med de relevante begrænsninger er som vist nedenfor.

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-tabel og produkt-tag-tabel

I lighed med kategori- og produktkategoritabellerne kan vi designe Tag-tabellen og Produkttagtabel . De største forskelle mellem kategorien og tagget er angivet nedenfor.

  • Forældre-id-kolonnen er ikke påkrævet i tagtabellen.
  • Antallet af kategorier forbliver lavt, da disse kan bruges til at danne hovedmenuen til navigationsformål. Mærkerne kan være flere sammenlignet med kategorier.
  • Både kategorier og tags kan bruges til at relatere produkterne.
  • Man bør kun tildele nogle få kategorier til et produkt, hvorimod antallet af tags kan være mere.

Tabel med vogn og vogn

Dette afsnit indeholder tabellerne til at administrere de virtuelle vogne for at gemme brugervalget, før den faktiske ordre oprettes. Hvis brugeren annullerer betalingen, eller betalingen mislykkes, kan de samme vogne bruges som en forladt vogn af marketingteamet for at forespørge om køberne. En logget ind bruger kan også tilknyttes vognen. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i vognbordet.

Noter :Indkøbsvogns- og vognvaretabellen kan gøres valgfri, hvis den lokale data-, sessions- eller in-memory-database som Redis bruges til at gemme vognens data. Det samme kan henvises til at oprette ordren ved betaling succes.

Id Det unikke id til at identificere kurven.
Bruger-id Bruger-id'et til at identificere den bruger eller køber, der er knyttet til indkøbskurven.
Sessions-id Det unikke session-id, der er knyttet til indkøbskurven.
Token Det unikke token, der er knyttet til kurven, for at identificere kurven over flere sessioner. Det samme token kan også overføres til betalingsgatewayen, hvis det kræves.
Status Kurvens status kan være Ny, Indkøbskurv, Checkout, Betalt, Fuldført og Forladt.
Fornavn Brugerens fornavn.
Mellemnavn Brugerens mellemnavn.
Efternavn Brugerens efternavn.
Mobil Brugerens mobilnummer.
E-mail Brugerens e-mail.
Linje 1 Den første linje til at gemme adresse.
Linje 2 Den anden linje til at gemme adresse.
By Byen for adressen.
Provins Provins for adressen.
Land Adressens land.
Oprettet på Den gemmer datoen og klokkeslættet, hvor kurven er oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor kurven er opdateret.
Indhold Kolonnen, der bruges til at gemme de yderligere oplysninger om kurven.

Indkøbsvognstabellen med de relevante begrænsninger er som vist nedenfor.

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

Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i vognens varetabell.

Id Det unikke id til at identificere varen i kurven.
Produkt-id Produkt-id'et til at identificere det produkt, der er knyttet til varen i kurven.
vogn-id Kurv-id'et til at identificere den vogn, der er knyttet til vognens vare.
SKU Produktets SKU under køb af det.
Pris Prisen på produktet, mens du køber det.
Rabat Rabatten på produktet, mens du køber det.
Mængde Mængden af ​​produktet valgt af brugeren.
Aktiv Flaget til at identificere, om produktet er aktivt i indkøbskurven. Det kan bruges til at undgå, at det samme produkt lægges i den samme kurv flere gange.
Oprettet på Den gemmer datoen og klokkeslættet, hvor varen i kurven er oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor varen i kurven opdateres.
Indhold Kolonnen, der bruges til at gemme de yderligere oplysninger om kurven.

Indkøbsvognens varetabell med de relevante begrænsninger er som vist nedenfor.

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;

Ordretabel og Ordrevaretabel

Dette afsnit indeholder tabellerne til at administrere butiksordrerne. En logget ind bruger kan også tilknyttes ordren. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i rækkefølgetabellen.

Id Det unikke id til at identificere ordren.
Bruger-id Bruger-id'et til at identificere den bruger eller køber, der er knyttet til ordren.
Sessions-id Det unikke session-id, der er knyttet til ordren.
Token Det unikke token, der er knyttet til ordren til at identificere det over flere sessioner. Det samme token kan også overføres til betalingsgatewayen, hvis det kræves.
Status Ordens status kan være Ny, Checkout, Betalt, Mislykket, Sendt, Leveret, Returneret og Fuldført.
Subtotal Den samlede pris for ordrevarerne.
Varerabat Den samlede rabat på ordrevarerne.
Moms Afgiften på ordrevarerne.
Forsendelse Forsendelsesomkostningerne for ordrevarerne.
I alt Den samlede pris for Ordren inklusive moms og forsendelse. Det udelukker varerabatten.
Promovering Kampagnekoden for Ordren.
Rabat Den samlede rabat på ordren baseret på kampagnekoden eller butiksrabatten.
Stor i alt Den samlede ordre, der skal betales af køberen.
Fornavn Brugerens fornavn.
Mellemnavn Brugerens mellemnavn.
Efternavn Brugerens efternavn.
Mobil Brugerens mobilnummer.
E-mail Brugerens e-mail.
Linje 1 Den første linje til at gemme adresse.
Linje 2 Den anden linje til at gemme adresse.
By Byen for adressen.
Provins Provins for adressen.
Land Adressens land.
Oprettet på Den gemmer datoen og klokkeslættet, hvor ordren er oprettet.
Opdateret kl. Den gemmer dato og klokkeslæt, hvor ordren opdateres.
Indhold Kolonnen, der bruges til at gemme de yderligere oplysninger om ordren.

Bestillingstabellen med de relevante begrænsninger er som vist nedenfor.

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

Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Ordrevaretabellen.

Id Det unikke id til at identificere den bestilte vare.
Produkt-id Produkt-id'et til at identificere det produkt, der er knyttet til den bestilte vare.
Ordre-id Ordre-id'et til at identificere den ordre, der er knyttet til den bestilte vare.
SKU Produktets SKU under køb af det.
Pris Prisen på produktet, mens du køber det.
Rabat Rabatten på produktet, mens du køber det.
Mængde Mængden af ​​produktet valgt af brugeren.
Oprettet på Den gemmer datoen og tidspunktet, hvor den bestilte vare er oprettet.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor den bestilte vare opdateres.
Indhold Kolonnen, der bruges til at gemme de yderligere detaljer for den bestilte vare.

Ordrevaretabellen med de relevante begrænsninger er som vist nedenfor.

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;

Transaktionstabel

Vi har også brug for en transaktionstabel til at spore ordrebetalinger foretaget af køber og til bogføring. Vi kan også bruge den samme tabel til at registrere den delvise eller fulde tilbagebetaling af ordren. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i transaktionstabellen.

Id Det unikke id til at identificere transaktionen.
Bruger-id Bruger-id'et til at identificere den bruger, der er knyttet til transaktionen.
Ordre-id Ordre-id'et til at identificere den ordre, der er knyttet til transaktionen.
Kode Betalings-id'et leveret af betalingsgatewayen.
Type Ordretransaktionstypen kan være enten Kredit eller Debet.
Tilstand Ordretransaktionstilstanden kan være offline, efterkrav, check, træk, kablet og online.
Status Ordretransaktionens status kan være Ny, Annulleret, Mislykket, Afventer, Afvist, Afvist og Succes.
Oprettet på Den gemmer datoen og tidspunktet, hvor ordretransaktionen oprettes.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor ordretransaktionen opdateres.
Indhold Kolonnen, der bruges til at gemme de yderligere detaljer om transaktionen.

Transaktionstabellen med de relevante begrænsninger er som vist nedenfor.

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;

Adressetabel

En adressetabel kan bruges til at undgå de overflødige kolonner i kurven og ordretabellen afhængigt af den faktiske implementering. Den kan tilknyttes vogn- og bestillingstabellen direkte ved hjælp af de relevante fremmednøgler.

Oversigt

I denne vejledning har vi diskuteret databasedesignet af en online indkøbskurv til at gemme brugerne og administrere produktbeholdning. Det gav også databasedesignet til at administrere vognen, opbevare vognens varer og administrere ordrerne i en onlinebutik. Det forenklede online indkøbsflowdiagram kan henvises til at implementere en indkøbskurv.

Du kan indsende dine kommentarer for at deltage i diskussionen. Du kan også være interesseret i at designe databasen med Blog- og Poll &Survey-applikationerne. Det komplette databaseskema er også tilgængeligt på GitHub.


  1. SQL Server Stored Procedures fra Oracle®

  2. give fjernadgang til MySQL-database fra enhver IP-adresse

  3. Omdøb sikkert tabeller ved hjælp af serielle primærnøglekolonner

  4. Sådan ændres baggrundsfarven for en formular i Access 2016