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

Guide til design af database til restaurantordresystem i MySQL

Denne vejledning indeholder komplette trin til at designe et databaseskema for restaurantbestillingssystemet til at administrere brugerne, bordbestillinger, menuer, inventar, ordrer og betalinger. Det giver madordredatabasedesignet til at administrere madbestillingerne til restauranter. Det kan yderligere bruges til at udvikle lokale applikationer til restaurantordresystemer.

Sådanne bestillingssystemer er implementeret for at automatisere ordrebehandling og effektivt håndtere spidsbelastningstider og dermed forbedre kundetilfredsheden med mindre indsats – en win-win situation for restaurationsvirksomheder.

Entity Relationship Diagram eller visuelle databasedesign er vist nedenfor.

Restaurantbestillingssystem

Noter :Den kan bruges til online booking af bordene og forudbestilling inden man når restauranten. Sikkerheden kan også 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 i MySQL, online indkøbskurvdatabase og lær grundlæggende SQL-forespørgsler i MySQL.

Restaurantdatabase

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

CREATE SCHEMA `restaurant` 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, kokke, agenter og kunder. Det kan bruges til at relatere brugerne til menuer, varer, bordbestillinger og ordrer. Brugere kan spore deres egne borde og ordrer. 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 modtage lagerordrer. Det er ikke påkrævet, hvis RBAC-tabeller oprettes ved at følge RBAC-databasedesignet.
Kok Flaget til at identificere, om brugeren kan tilberede varerne. Det er ikke påkrævet, hvis RBAC-tabeller oprettes ved at følge RBAC-databasedesignet.
Agent Flaget til at identificere, om brugeren kan være vært for en tabel. 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 `restaurant`.`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,
`chef` TINYINT(1) NOT NULL DEFAULT 0,
`agent` 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) );

Ingrediens-, vare-, opskrifts- og menutabeller

I dette afsnit vil vi designe Ingrediens-, Vare-, Opskrifts- og Menutabellerne for at gemme menuer og emnedata.

Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Ingredienstabellen . Ingredienstabellen er også kortlagt for at identificere den leverandør, der kan levere ingrediensen for at genopfylde beholdningen. I et mere avanceret scenarie kan der være en separat tabel til at gemme ingrediens- og leverandørforholdet for at understøtte flere leverandører for den samme ingrediens.

Id Det unikke id til at identificere ingrediensen.
Bruger-id Bruger-id'et til at identificere administratoren.
Leverandør-id Sælger-id'et til at identificere leverandøren.
Titel Ingredienstitlen, der skal vises på vareopskriften.
Snegl Den unikke snegl, der skal bruges som GID for ingrediensen.
Oversigt Opsummeringen for at nævne de vigtigste højdepunkter.
Type Typen til at skelne mellem de forskellige ingredienstyper.
SKU Beholdningsenheden til at spore ingrediensbeholdningen.
Mængde Den tilgængelige mængde af ingrediensen.
Enhed De måleenheder, der er tildelt ingrediensen.
Oprettet på Den gemmer datoen og klokkeslættet, hvor ingrediensen er oprettet.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor ingrediensen opdateres.
Indhold Kolonnen, der bruges til at gemme de yderligere detaljer om ingrediensen.

Den bruger kolonnerne mængde og enhed til at spore det tilgængelige lager i ingrediensbeholdningen. Ingredienstabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `restaurant`.`ingredient` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`vendorId` BIGINT DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`sku` VARCHAR(100) NOT NULL,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_ingredient_user` (`userId` ASC),
CONSTRAINT `fk_ingredient_user`
FOREIGN KEY (`userId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`ingredient`
ADD INDEX `idx_ingredient_vendor` (`vendorId` ASC);
ALTER TABLE `restaurant`.`ingredient`
ADD CONSTRAINT `fk_ingredient_vendor`
FOREIGN KEY (`vendorId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Varetabellen . Varetabellen er også kortlagt for at identificere den leverandør, der kan levere den ikke-tilberedte vare for at genopfylde beholdningen. I et mere avanceret scenarie kan der være en separat tabel til at gemme varen og leverandørforholdet for at understøtte flere leverandører for den samme vare.

Noter :Vi kan også bruge samme tabel til at opbevare ingredienser og varer for at forenkle restaurant- og leverandørbestillingerne. I et sådant tilfælde kræves en selvforbindelse for at identificere varens ingredienser. Desuden er kolonnerne madlavning og pris ikke nyttige for ingrediensrækker.

Id Det unikke id til at identificere varen.
Bruger-id Bruger-id'et til at identificere administratoren.
Leverandør-id Sælger-id'et til at identificere leverandøren.
Titel Emnets titel, der skal vises i menuen.
Snegl Den unikke slug, der skal bruges som GID for varen.
Oversigt Opsummeringen for at nævne de vigtigste højdepunkter.
Type Typen til at skelne mellem de forskellige varetyper.
Madlavning Flaget til at identificere, om der kræves madlavning til varen.
SKU Beholdningsenheden til at spore varebeholdningen. Det er kun påkrævet, hvis varen ikke er forbundet med ingredienser.
Pris Salgsprisen for enten én enhed eller en enkelt portion.
Mængde Den tilgængelige mængde af varen. Det er kun påkrævet, hvis varen ikke er forbundet med ingredienser.
Enhed Måleenhederne, der er tildelt emnet. Det er kun påkrævet, hvis varen ikke er forbundet med ingredienser.
Opskrift Instruktionerne påkrævet for at tilberede varen.
Instruktioner Instruktionerne påkrævet for at betjene varen.
Oprettet på Den gemmer datoen og klokkeslættet, hvor elementet er oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor elementet opdateres.
Indhold Kolonnen, der bruges til at gemme de yderligere detaljer om elementet.

I lighed med ingredienstabel bruger den kolonnerne mængde og enhed til at spore den tilgængelige lagerbeholdning i varebeholdningen. Varetabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `restaurant`.`item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`vendorId` BIGINT DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`cooking` TINYINT(1) NOT NULL DEFAULT 0,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` SMALLINT(6) NOT NULL DEFAULT 0,
`recipe` TEXT NULL DEFAULT NULL,
`instructions` TEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_item_user` (`userId` ASC),
CONSTRAINT `fk_item_user`
FOREIGN KEY (`userId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`item`
ADD INDEX `idx_item_vendor` (`vendorId` ASC);
ALTER TABLE `restaurant`.`item`
ADD CONSTRAINT `fk_item_vendor`
FOREIGN KEY (`vendorId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Opskriftstabellen kan bruges til at spore mængden af ​​de ingredienser, der kræves til en vare til en enkelt portion. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i opskriftstabellen.

Id Det unikke id til at identificere opskriften.
Vare-id Vare-id'et til at identificere varen.
Ingrediens-id Ingrediens-id'et til at identificere ingrediensen.
Mængde Mængden af ​​ingrediensen, der kræves for at tilberede varen til en enkelt portion.
Enhed Måleenhederne til at identificere den ingrediensmængde, der kræves for varen.
Instruktioner Ingrediensinstruktionerne, der kræves for at tilberede varen.

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

CREATE TABLE `restaurant`.`recipe` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`itemId` BIGINT NOT NULL,
`ingredientId` BIGINT NOT NULL,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` SMALLINT(6) NOT NULL DEFAULT 0,
`instructions` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_recipe_item` (`itemId` ASC),
UNIQUE INDEX `uq_recipe_item_ingredient` (`itemId` ASC, `ingredientId` ASC),
CONSTRAINT `fk_recipe_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `restaurant`.`recipe`
ADD INDEX `idx_recipe_ingredient` (`ingredientId` ASC);
ALTER TABLE `restaurant`.`recipe`
ADD CONSTRAINT `fk_recipe_ingredient`
FOREIGN KEY (`ingredientId`)
REFERENCES `restaurant`.`ingredient` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION;

Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Menutabellen . Menutabellen kan bruges til at gemme flere menuer i den samme restaurant.

Id Det unikke id til at identificere menuen.
Bruger-id Bruger-id'et til at identificere administratoren.
Titel Menutitlen, der skal vises på menukortet.
Snegl Den unikke slug, der skal bruges som GID for menuen.
Oversigt Opsummeringen for at nævne de vigtigste højdepunkter på menukortet.
Type Typen til at skelne mellem de forskellige menutyper.
Oprettet på Den gemmer datoen og klokkeslættet, hvor elementet er oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor elementet opdateres.
Indhold Kolonnen, der bruges til at gemme de ekstra detaljer i menuen.

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

CREATE TABLE `restaurant`.`menu` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_menu_user` (`userId` ASC),
CONSTRAINT `fk_menu_user`
FOREIGN KEY (`userId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

Menupunkttabellen kan bruges til at spore de punkter, der er tilgængelige på menukortet. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i menupunktstabellen.

Id Det unikke id til at identificere menupunktet.
Menu-id Menu-id'et til at identificere menuen.
Vare-id Vare-id'et til at identificere varen.
Aktiv Flaget til at kontrollere, om elementet er tilgængeligt.

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

CREATE TABLE `restaurant`.`menu_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`menuId` BIGINT NOT NULL,
`itemId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
INDEX `idx_menu_item_menu` (`menuId` ASC),
UNIQUE INDEX `uq_menu_item` (`menuId` ASC, `itemId` ASC),
CONSTRAINT `fk_menu_item_menu`
FOREIGN KEY (`menuId`)
REFERENCES `restaurant`.`menu` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `restaurant`.`menu_item`
ADD INDEX `idx_menu_item_item` (`itemId` ASC);
ALTER TABLE `restaurant`.`menu_item`
ADD CONSTRAINT `fk_menu_item_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION;

Artikelchef-bordet kan bruges til at identificere den kok, der er tildelt til at lave mad. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Item Chef Table.

Id Det unikke id til at identificere menupunktet.
Vare-id Vare-id'et til at identificere varen.
Kok-id Kokken-id for at identificere brugeren.
Aktiv Flaget til at kontrollere, om kokken er tilgængelig til at tilberede varen.

Varechef-tabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `restaurant`.`item_chef` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`itemId` BIGINT NOT NULL,
`chefId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
INDEX `idx_item_chef_item` (`itemId` ASC),
UNIQUE INDEX `uq_item_chef` (`itemId` ASC, `chefId` ASC),
CONSTRAINT `fk_item_chef_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `restaurant`.`item_chef`
ADD INDEX `idx_item_chef_chef` (`chefId` ASC);
ALTER TABLE `restaurant`.`item_chef`
ADD CONSTRAINT `fk_item_chef_chef`
FOREIGN KEY (`chefId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION;

Bordplade og reservationsborde

I denne sektion vil vi designe bordpladen og reservationsbordene at gemme restaurantbordene og deres reservationsdetaljer.

TableTop Table kan bruges til at opbevare detaljerne på bordene i restauranten. Tabellens status kan være Gratis, Reserveret og Aktiv. Jeg har brugt TableTop i stedet for Table for at skelne det fra tabelnøgleordet i MySQL. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i TableTop-tabellen.

Id Det unikke id til at identificere tabellen.
Kode Tabelkoden.
Status Anmeldelsesvurderingen.
Kapacitet Bordets samlede siddekapacitet.
Oprettet på Den gemmer datoen og klokkeslættet, hvor tabellen er oprettet.
Opdateret kl. Det gemmer dato og klokkeslæt, hvor tabellen opdateres.
Indhold Kolonnen, der bruges til at gemme tabellens yderligere detaljer.

TableTop-tabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `restaurant`.`table_top` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`code` VARCHAR(100) NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`capacity` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`));

Booking bord kan bruges til at bestille restaurantbordene enten online eller på stedet. En logget ind eller eksisterende bruger kan også tilknyttes Booking. Det forudsætter også, at kun borde med status Gratis kan reserveres. Bordstatus kan ændres til Reserveret efter reservationen er bekræftet. Bordstatus kan også indstilles til Aktiv, så snart gæsterne indtager det. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i reservationstabellen.

Noter :Reservationsbordet dækker ikke de betalinger, der er involveret i booking af bordet. Den kan opdateres yderligere ved at tilføje yderligere kolonner for at håndtere de betalinger, der er involveret i booking af bordet.

Id Det unikke id til at identificere reservationen.
Tabel-id Tabel-id'et til at identificere bordet, der er knyttet til reservationen.
Bruger-id Bruger-id'et til at identificere den registrerede bruger, der er knyttet til reservationen.
Token Det unikke token, der er knyttet til reservationen.
Status Status for reservationen kan være Ny, Lounge, Aktiv og Fuldført.
Fornavn Gæstens fornavn.
Mellemnavn Gæstens 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 tidspunktet, hvor reservationen oprettes.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor reservationen opdateres.
Indhold Kolonnen, der bruges til at gemme de yderligere oplysninger om reservationen.

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

CREATE TABLE `restaurant`.`booking` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tableId` BIGINT NOT NULL,
`userId` BIGINT NULL DEFAULT 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_booking_table` (`tableId` ASC),
CONSTRAINT `fk_booking_table`
FOREIGN KEY (`tableId`)
REFERENCES `restaurant`.`table_top` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`booking`
ADD INDEX `idx_booking_user` (`userId` ASC);
ALTER TABLE `restaurant`.`booking`
ADD CONSTRAINT `fk_booking_user`
FOREIGN KEY (`userId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION;

Tabellen med reservationselementer er påkrævet for at spore de varer bestilt af gæsten. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Booking Item-tabellen.

Id Det unikke id til at identificere reservationselementet.
Booking-id Bestillings-id'et til at identificere den reservation, der er knyttet til reservationselementet.
Vare-id Vare-id'et til at identificere den vare, der er knyttet til bookingvaren.
SKU Varens SKU under bestilling.
Pris Salgsprisen for varen, mens du bestiller den.
Rabat Rabatten på varen, mens du bestiller den.
Mængde Mængden af ​​varen bestilt af brugeren. Det kan enten være multiplikatoren af ​​vareenheden eller enkelt servering.
Enhed Måleenhederne under bestilling af varen.
Status Status for at spore varens fremskridt. Det kan være nyt, køkken, madlavning, kogt, serveret.
Oprettet på Den gemmer datoen og klokkeslættet, hvor reservationselementet er oprettet.
Opdateret kl. Det gemmer datoen og klokkeslættet, hvor reservationselementet opdateres.
Indhold Kolonnen, der bruges til at gemme de yderligere oplysninger om reservationselementet.

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

CREATE TABLE `restaurant`.`booking_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`bookingId` BIGINT NOT NULL,
`itemId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` 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_booking_item_booking` (`bookingId` ASC),
CONSTRAINT `fk_booking_item_booking`
FOREIGN KEY (`bookingId`)
REFERENCES `restaurant`.`booking` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`booking_item`
ADD INDEX `idx_booking_item_item` (`itemId` ASC);
ALTER TABLE `restaurant`.`booking_item`
ADD CONSTRAINT `fk_booking_item_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION;

Ordretabel og Ordrevaretabel

Dette afsnit indeholder tabellerne til at administrere ordrerne. En logget ind bruger kan også tilknyttes ordren. Ordretabellen kan bruges til at gemme de gennemførte reservationer og leverandørordrer. Leverandørens ordrestatus kan indstilles til ny, mens ordren afgives, og den kan indstilles til at fuldføre efter modtagelse af varerne fra leverandøren. Vareprisen skal også udfyldes manuelt efter modtagelse af varerne fra leverandøren. 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 gæst, der er knyttet til ordren.
Leverandør-id Leverandør-id'et til at identificere den leverandør, der er knyttet til ordren.
Token Det unikke token, der er knyttet til ordren, for at relatere det til reservationen. 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. Statussen Sendt, Leveret og Returneret kan bruges til leverandørordrerne.
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 Samlet sum af ordren, som gæsten skal betale til restauranten eller restauranten til leverandøren.
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 `restaurant`.`order` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`vendorId` BIGINT NULL DEFAULT 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 `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`order`
ADD INDEX `idx_order_vendor` (`vendorId` ASC);
ALTER TABLE `restaurant`.`order`
ADD CONSTRAINT `fk_order_vendor`
FOREIGN KEY (`vendorId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION;

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

Id Det unikke id til at identificere den bestilte vare.
Vare-id Produkt-id'et til at identificere den vare, 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 Varens SKU under bestilling.
Pris Prisen på varen, mens du bestiller den.
Rabat Rabatten på varen, mens du bestiller den.
Mængde Mængden af ​​varen valgt af brugeren.
Enhed Måleenhederne under bestilling af varen.
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 `restaurant`.`order_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`orderId` BIGINT NOT NULL,
`itemId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` 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_order` (`orderId` ASC),
CONSTRAINT `fk_order_item_order`
FOREIGN KEY (`orderId`)
REFERENCES `restaurant`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`order_item`
ADD INDEX `idx_order_item_item` (`itemId` ASC);
ALTER TABLE `restaurant`.`order_item`
ADD CONSTRAINT `fk_order_item_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Transaktionstabel

Vi har også brug for en transaktionstabel til at spore ordrebetalinger foretaget af gæsterne til restauranten og restauranten til sælgerne til bogføring. Vi kan også bruge den samme tabel til at registrere kredit(gæster) og debet(leverandører) transaktioner. 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.
Leverandør-id Leverandør-id'et til at identificere den leverandør, 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 Tilstanden for ordretransaktionen kan være offline, kontant ved levering, 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.

The Transaction Table with the appropriate constraints is as shown below.

CREATE TABLE `restaurant`.`transaction` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`vendorId` 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 `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`transaction`
ADD INDEX `idx_transaction_vendor` (`vendorId` ASC),
ADD INDEX `idx_transaction_order` (`orderId` ASC);

ALTER TABLE `restaurant`.`transaction`
ADD CONSTRAINT `fk_transaction_vendor`
FOREIGN KEY (`vendorId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_transaction_order`
FOREIGN KEY (`orderId`)
REFERENCES `restaurant`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Address Table

An address table can be used to avoid the redundant columns in the Booking and Order table depending on the actual implementation. It can be directly mapped to the Booking Table and Order Table using the appropriate foreign keys.

Oversigt

In this tutorial, we have discussed the database design of a Restaurant Ordering System or Food Ordering System to store the users, book tables, automate kitchen, and manage product inventory. The same database schema can be used to accept online table booking and pre-orders. The database schema provided in this tutorial can be considered as the starting point and further optimized or updated based on the actual needs. The On-Premises Restaurant Ordering System Flowchart can be referred to implement the restaurant order system.

Du kan indsende dine kommentarer for at deltage i diskussionen. You may also be interested in designing the database of the Blog, Online Shopping Cart, and Poll &Survey applications. Det komplette databaseskema er også tilgængeligt på GitHub.


  1. Administration af brugerkonti, roller, tilladelser, godkendelse PHP og MySQL - Del 4

  2. SQL Server:Forespørgsel hurtig, men langsom fra procedure

  3. COSH() Funktion i Oracle

  4. Få opdateret række