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