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