Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hướng dẫn thiết kế cơ sở dữ liệu cho hệ thống đặt hàng nhà hàng trong MySQL

Hướng dẫn này cung cấp các bước hoàn chỉnh để thiết kế lược đồ cơ sở dữ liệu của hệ thống đặt hàng nhà hàng để quản lý người dùng, đặt bàn, thực đơn, khoảng không quảng cáo, đơn đặt hàng và thanh toán. Nó cung cấp thiết kế cơ sở dữ liệu đơn đặt hàng thực phẩm để quản lý các đơn đặt hàng thực phẩm cho các nhà hàng. Nó có thể được sử dụng nhiều hơn nữa để phát triển các ứng dụng hệ thống đặt hàng nhà hàng tại chỗ.

Các hệ thống đặt hàng như vậy được triển khai để tự động hóa quá trình xử lý đơn hàng và giải quyết hiệu quả thời gian đặt hàng cao điểm, do đó cải thiện sự hài lòng của khách hàng mà không cần nỗ lực nhiều hơn - một tình huống đôi bên cùng có lợi cho các doanh nghiệp nhà hàng.

Sơ đồ mối quan hệ thực thể hoặc thiết kế cơ sở dữ liệu trực quan được hiển thị bên dưới.

Hệ thống đặt hàng nhà hàng

Ghi chú :Nó có thể được sử dụng để đặt bàn trực tuyến và đặt hàng trước trước khi đến nhà hàng. Bảo mật cũng có thể được xử lý bằng cách làm theo Cơ sở dữ liệu RBAC trong MySQL.

Bạn cũng có thể xem các hướng dẫn phổ biến bao gồm Cách cài đặt MySQL 8 trên Ubuntu, Cách cài đặt MySQL 8 trên Windows, Cách cài đặt MySQL 8 với Workbench trên Windows 10, Cơ sở dữ liệu RBAC trong MySql, Cơ sở dữ liệu blog trong MySql, Cơ sở dữ liệu câu đố trong MySQL, Cơ sở dữ liệu thăm dò &khảo sát trong MySQL, Cơ sở dữ liệu giỏ hàng trực tuyến và Tìm hiểu các truy vấn SQL cơ bản trong MySQL.

Cơ sở dữ liệu nhà hàng

Bước đầu tiên là tạo Cơ sở dữ liệu nhà hàng. Nó có thể được tạo bằng cách sử dụng truy vấn như hình dưới đây.

 TẠO SCHEMA `nhà hàng` BỘ NHÂN VẬT ĐỊNH MỨC utf8mb4 COLLATE utf8mb4_unicode_ci; 

Tôi đã sử dụng bộ ký tự utf8mb4 để hỗ trợ nhiều loại ký tự.

Bảng Người dùng

Trong phần này, chúng tôi sẽ thiết kế Bảng người dùng để lưu trữ thông tin người dùng. Cùng một bảng có thể được sử dụng để quản lý các loại người dùng khác nhau bao gồm quản trị viên, đầu bếp, đại lý và khách hàng. Nó có thể được sử dụng để liên kết người dùng với Thực đơn, Vật phẩm, Đặt bàn và Đơn đặt hàng. Người dùng có thể theo dõi bảng và đơn đặt hàng của riêng mình. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Người dùng.

Id Id duy nhất để xác định người dùng.
Tên Tên của người dùng.
Tên đệm Tên đệm của người dùng.
Họ Họ của người dùng.
Di động Số điện thoại di động của người dùng. Nó có thể được sử dụng cho mục đích đăng nhập và đăng ký.
Email Email của người dùng. Nó có thể được sử dụng cho mục đích đăng nhập và đăng ký.
Băm mật khẩu Mật khẩu băm được tạo bởi thuật toán thích hợp. Chúng tôi phải tránh lưu trữ mật khẩu đơn giản hoặc mật khẩu được mã hóa.
Quản trị viên Cờ để xác định xem người dùng có phải là quản trị viên hay không. Không bắt buộc nếu bảng RBAC được tạo bằng cách tuân theo thiết kế cơ sở dữ liệu RBAC.
Nhà cung cấp Cờ để xác định liệu người dùng có thể nhận được đơn đặt hàng tồn kho hay không. Không bắt buộc nếu bảng RBAC được tạo bằng cách tuân theo thiết kế cơ sở dữ liệu RBAC.
Đầu bếp Cờ để xác định xem người dùng có thể nấu các món ăn hay không. Không bắt buộc nếu bảng RBAC được tạo bằng cách tuân theo thiết kế cơ sở dữ liệu RBAC.
Đại lý Cờ để xác định xem người dùng có thể lưu trữ một bảng hay không. Không bắt buộc nếu bảng RBAC được tạo bằng cách tuân theo thiết kế cơ sở dữ liệu RBAC.
Đã đăng ký tại Cột này có thể được sử dụng để tính toán tuổi thọ của người dùng với ứng dụng.
Lần Đăng nhập Cuối cùng Nó có thể được sử dụng để xác định thông tin đăng nhập cuối cùng của người dùng.
Giới thiệu Phần giới thiệu ngắn gọn về Người dùng của Nhà cung cấp sẽ được hiển thị trên Trang Sản phẩm.
Hồ sơ Chi tiết về nhà cung cấp sẽ được hiển thị trên Trang Sản phẩm.

Bảng Người dùng với các ràng buộc thích hợp được hiển thị bên dưới.

 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,
`mật khẩu (1) NOT NULL DEFAULT 0,
`agent` TINYINT (1) NOT NULL DEFAULT 0,
` registerAt` 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),
CHỈ SỐ DUY NHẤT `uq_email` (` email` ASC));

Bảng thành phần, mặt hàng, công thức và thực đơn

Trong phần này, chúng tôi sẽ thiết kế Bảng thành phần, mặt hàng, công thức và thực đơn để lưu trữ dữ liệu menu và mục.

Dưới đây được đề cập là mô tả của tất cả các cột của Bảng thành phần . Bảng Thành phần cũng được lập bản đồ để xác định nhà cung cấp có thể cung cấp thành phần để lấp đầy lại hàng tồn kho. Trong một kịch bản nâng cao hơn, có thể có một bảng riêng để lưu trữ thành phần và mối quan hệ với nhà cung cấp để hỗ trợ nhiều nhà cung cấp cho cùng một thành phần.

Id Id duy nhất để xác định thành phần.
Id Người dùng Id người dùng để xác định quản trị viên.
Id nhà cung cấp Id nhà cung cấp để xác định nhà cung cấp.
Tiêu đề Tên thành phần được hiển thị trên Công thức món.
Slug Sên duy nhất được sử dụng làm GID của thành phần.
Tóm tắt Bản tóm tắt để đề cập đến những điểm nổi bật chính.
Loại Loại để phân biệt giữa các loại thành phần khác nhau.
SKU Bộ phận Giữ hàng để theo dõi tồn kho thành phần.
Số lượng Số lượng thành phần có sẵn.
Đơn vị Đơn vị đo lường được chỉ định cho thành phần.
Được tạo lúc Nó lưu trữ ngày và giờ mà thành phần được tạo ra.
Cập nhật lúc Nó lưu trữ ngày và giờ tại đó thành phần được cập nhật.
Nội dung Cột được sử dụng để lưu trữ các chi tiết bổ sung của thành phần.

Nó sử dụng số lượng cột và đơn vị để theo dõi lượng hàng có sẵn trong kho thành phần. Bảng Thành phần với các ràng buộc thích hợp được hiển thị bên dưới.

 TẠO BẢNG `nhà hàng`.> `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,
` volume` 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`),
CHỈ SỐ DUY NHẤT `uq_slug` (`slug` ASC),
INDEX` idx_ingredient_user` (`userId` ASC),
CONSTRAINT` fk_ingredient_user`
NGOẠI KHÓA (`userId`)
TÀI LIỆU THAM KHẢO` nhà hàng`. `user` (` id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`ingredient`
ADD INDEX` idx_ingredient_vendor `(` providerId` ASC);
BẢNG ALTER `nhà hàng` .`ingredient`
ADD CONSTRAINT `fk_ingredient_vendor`
FOREIGN KEY (` nhà cung cấp`)
TÀI LIỆU THAM KHẢO `nhà hàng`.` người dùng` (` id`)
BẬT XÓA KHÔNG CÓ HÀNH ĐỘNG
KHÔNG CÓ HÀNH ĐỘNG CẬP NHẬT;

Dưới đây được đề cập là mô tả của tất cả các cột của Bảng mục . Bảng Mặt hàng cũng được lập bản đồ để xác định nhà cung cấp có thể cung cấp mặt hàng không nấu để lấp đầy lại hàng tồn kho. Trong một kịch bản nâng cao hơn, có thể có một bảng riêng để lưu trữ mặt hàng và mối quan hệ với nhà cung cấp để hỗ trợ nhiều nhà cung cấp cho cùng một mặt hàng.

Ghi chú :Chúng ta cũng có thể sử dụng cùng một chiếc bàn để lưu trữ các thành phần và mặt hàng để đơn giản hóa việc đặt hàng của nhà hàng và nhà cung cấp. Trong trường hợp này, cần phải có một bản tự tham gia để xác định các thành phần của mặt hàng. Ngoài ra, các cột nấu ăn và giá không hữu ích cho các hàng thành phần.

Id Id duy nhất để xác định mặt hàng.
Id Người dùng Id người dùng để xác định quản trị viên.
Id nhà cung cấp Id nhà cung cấp để xác định nhà cung cấp.
Tiêu đề Tiêu đề mục được hiển thị trên Menu.
Slug Sên duy nhất được sử dụng làm GID của mục.
Tóm tắt Bản tóm tắt để đề cập đến những điểm nổi bật chính.
Loại Loại để phân biệt giữa các loại mục khác nhau.
Nấu ăn Cờ để xác định xem món này có cần nấu hay không.
SKU Đơn vị Giữ hàng để theo dõi hàng tồn kho. Nó chỉ bắt buộc nếu mặt hàng không liên quan đến thành phần.
Giá Giá bán của một chiếc hoặc một khẩu phần.
Số lượng Số lượng có sẵn của mặt hàng. Nó chỉ bắt buộc nếu mặt hàng không liên quan đến thành phần.
Đơn vị Đơn vị đo được chỉ định cho mục. Nó chỉ bắt buộc nếu mặt hàng không liên quan đến thành phần.
Công thức Các hướng dẫn cần thiết để nấu món này.
Hướng dẫn Các hướng dẫn cần thiết để cung cấp mặt hàng.
Được tạo lúc Nó lưu trữ ngày và giờ tại đó mục được tạo ra.
Cập nhật lúc Nó lưu trữ ngày và giờ tại đó mặt hàng được cập nhật.
Nội dung Cột được sử dụng để lưu trữ các chi tiết bổ sung của mặt hàng.

Tương tự như Bảng thành phần, nó sử dụng số lượng cột và đơn vị để theo dõi lượng hàng có sẵn trong kho mặt hàng. Bảng Mục với các ràng buộc thích hợp được hiển thị bên dưới.

 TẠO BẢNG `nhà hàng`.> `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,
` số lượng `FLOAT NOT NULL DEFAULT 0,
` unit` SMALLINT (6) NOT NULL DEFAULT 0,
`công thức` TEXT NULL DEFAULT NULL,
` hướng dẫn` TEXT NULL DEFAULT NULL,
`đã tạo `uq_slug` (` slug` ASC),
INDEX `idx_item_user` (` userId` ASC),
CONSTRAINT `fk_item_user`
FOREIGN KEY (` userId`)
TÀI LIỆU THAM KHẢO ` nhà hàng`.` người dùng` (`id`)
BẬT HẠN CHẾ XÓA
ONDATE KHÔNG CÓ HÀNH ĐỘNG);

ALTER TABLE `restaurant`.`item`
ADD INDEX` idx_item_vendor` (`vendorId` ASC);
ALTER TABLE` restaurant`.` item`
ADD CONSTRAINT `fk_item_vendor`
FOREIGN KEY (` vendorId`)
TÀI LIỆU THAM KHẢO `nhà hàng`.` người dùng` (` id`)
BẬT XÓA KHÔNG CÓ HÀNH ĐỘNG
BẬT CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

Bảng công thức có thể được sử dụng để theo dõi số lượng của các thành phần cần thiết cho một mặt hàng cho một khẩu phần. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Công thức.

Id Id duy nhất để xác định công thức.
Id mặt hàng Id mặt hàng để xác định mặt hàng.
Id thành phần Id thành phần để xác định thành phần.
Số lượng Số lượng nguyên liệu cần thiết để nấu món ăn cho một khẩu phần.
Đơn vị Đơn vị đo lường để xác định số lượng thành phần cần thiết cho mặt hàng.
Hướng dẫn Các hướng dẫn thành phần cần thiết để nấu món này.

Bảng Công thức với các ràng buộc thích hợp được hiển thị bên dưới.

 CREATE TABLE `restaurant`.`recipe` (
` id` BIGINT NOT NULL AUTO_INCREMENT,
`itemId` BIGINT NOT NULL,
` componentId` BIGINT NOT NULL,
`số lượng` FLOAT NOT NULL DEFAULT 0,
` unit` SMALLINT (6) NOT NULL DEFAULT 0,
`hướng dẫn` TEXT NULL DEFAULT NULL,
PRIMARY KEY (` id`),
INDEX `idx_recipe_item` (` itemId` ASC),
CHỈ SỐ DUY NHẤT `uq_recipe_item_ingredient` (` itemId` ASC, `componentId` ASC),
CONSTRAINT` fk_recipe_item`
FOREIGN KEY (`itemId`)
TÀI LIỆU THAM KHẢO` nhà hàng`.`item` (`id`)
VỀ HẠN CHẾ XÓA
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG)
ENGINE =InnoDB;
BẢNG BÁO CÁO
`nhà hàng`. `
NGOẠI KHÓA (` componentId`)
TÀI LIỆU THAM KHẢO `nhà hàng`.`ingredient` (` id`)
VỀ HẠN CHẾ XÓA
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

Dưới đây được đề cập là mô tả của tất cả các cột của Bảng menu . Bảng Thực đơn có thể được sử dụng để lưu trữ nhiều thực đơn của cùng một nhà hàng.

Id Id duy nhất để xác định menu.
Id Người dùng Id người dùng để xác định quản trị viên.
Tiêu đề Tiêu đề menu được hiển thị trên Thẻ Menu.
Slug Sên duy nhất được sử dụng làm GID của menu.
Tóm tắt Bản tóm tắt đề cập đến những điểm nổi bật chính của thẻ menu.
Loại Loại để phân biệt giữa các loại menu khác nhau.
Được tạo lúc Nó lưu trữ ngày và giờ tại đó mục được tạo ra.
Cập nhật lúc Nó lưu trữ ngày và giờ tại đó mặt hàng được cập nhật.
Nội dung Cột được sử dụng để lưu trữ các chi tiết bổ sung của menu.

Bảng Menu với các ràng buộc thích hợp được hiển thị bên dưới.

 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`)
TÀI LIỆU THAM KHẢO `nhà hàng`.` người dùng` ( `id`)
BẬT HẠN CHẾ XÓA
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG);

Bảng mục menu có thể được sử dụng để theo dõi các mục có sẵn trong Thẻ Menu. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Mục trong Thực đơn.

Id Id duy nhất để xác định mục menu.
Id trình đơn Id menu để xác định menu.
Id mặt hàng Id mặt hàng để xác định mặt hàng.
Đang hoạt động Cờ để kiểm tra xem mặt hàng có sẵn hay không.

Bảng Menu Mục với các ràng buộc thích hợp được hiển thị bên dưới.

 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),
CHỈ SỐ DUY NHẤT `uq_menu_item` ( `menuId` ASC,` itemId` ASC),
CONSTRAINT `fk_menu_item_menu`
NGOẠI KHÓA (` menuId`)
TÀI LIỆU THAM KHẢO `nhà hàng`.`menu` (` id`)
HẠN CHẾ XÓA
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG)
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`)
TÀI LIỆU THAM KHẢO `nhà hàng`.`item` ( `id`)
BẬT HẠN CHẾ XÓA
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

Bảng đầu bếp món có thể được sử dụng để xác định Bếp trưởng được chỉ định nấu món đó. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Chef Item.

Id Id duy nhất để xác định mục menu.
Id mặt hàng Id mặt hàng để xác định mặt hàng.
Id đầu bếp Id đầu bếp để xác định người dùng.
Đang hoạt động Cờ để kiểm tra xem đầu bếp có sẵn sàng để nấu món đó hay không.

Bảng Chef hạng mục với các ràng buộc thích hợp được hiển thị bên dưới.

 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),
CHỈ SỐ DUY NHẤT `uq_item_chef` ( `itemId` ASC,` chefId` ASC),
CONSTRAINT `fk_item_chef_item`
FOREIGN KEY (` itemId`)
TÀI LIỆU THAM KHẢO `nhà hàng`.`item` (` id`)
BẬT XÓA CASCADE
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG)
ENGINE =InnoDB;

ALTER TABLE `restaurant`.`item_chef`
ADD INDEX` idx_item_chef_chef` (`chefId `ASC);
ALTER TABLE` restaurant`. `id`)
KHI XÓA CASCADE
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

TableTop và Booking Table

Trong phần này, chúng tôi sẽ thiết kế TableTop và Booking Table để lưu trữ các bảng của nhà hàng và chi tiết đặt chỗ của họ.

Bảng TableTop có thể được sử dụng để lưu trữ các thông tin chi tiết của các bảng tại nhà hàng. Trạng thái của bảng có thể là Rảnh, Dành riêng và Đang hoạt động. Tôi đã sử dụng TableTop thay vì Table để phân biệt nó với từ khóa table của MySQL. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng TableTop.

Id Id duy nhất để xác định bảng.
Mã bảng.
Trạng thái Xếp hạng đánh giá.
Dung lượng Tổng số chỗ ngồi của Bàn.
Được tạo lúc Nó lưu trữ ngày và giờ tại đó bảng được tạo.
Cập nhật lúc Nó lưu trữ ngày và giờ tại đó bảng được cập nhật.
Nội dung Cột được sử dụng để lưu trữ các chi tiết bổ sung của bảng.

Bảng TableTop với các ràng buộc thích hợp được hiển thị bên dưới.

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

Bàn đặt trước có thể được sử dụng để đặt bàn nhà hàng trực tuyến hoặc tại chỗ. Người dùng đã đăng nhập hoặc hiện có cũng có thể được liên kết với Đặt chỗ. Nó cũng giả định rằng chỉ những bảng có trạng thái Miễn phí mới có thể được Đặt trước. Trạng thái bàn có thể được thay đổi thành Đặt chỗ sau khi đặt chỗ được xác nhận. Ngoài ra, trạng thái bảng có thể được đặt thành Hoạt động ngay sau khi khách chiếm giữ nó. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng đặt chỗ.

Ghi chú :Bảng Đặt chỗ không bao gồm các khoản thanh toán liên quan đến việc đặt bàn. Nó có thể được cập nhật thêm bằng cách thêm các cột bổ sung để xử lý các khoản thanh toán liên quan đến việc đặt bàn.

Id Id duy nhất để xác định lượt đặt trước.
Id bảng Id bảng để xác định bảng được liên kết với đặt chỗ.
Id Người dùng Id người dùng để xác định người dùng đã đăng ký được liên kết với đặt chỗ.
Mã thông báo Mã thông báo duy nhất được liên kết với đặt chỗ.
Trạng thái Trạng thái đặt chỗ có thể là Mới, Phòng chờ, Đang hoạt động và Hoàn tất.
Tên Tên của khách.
Tên đệm Tên đệm của khách.
Họ Họ của người dùng.
Di động Số điện thoại di động của người dùng.
Email Email của người dùng.
Dòng 1 Dòng đầu tiên cho địa chỉ cửa hàng.
Dòng 2 Dòng thứ hai cho địa chỉ cửa hàng.
Thành phố Thành phố của địa chỉ.
Tỉnh Tỉnh của địa chỉ.
Quốc gia Quốc gia của địa chỉ.
Được tạo lúc Nó lưu trữ ngày và giờ mà đặt chỗ được tạo.
Cập nhật lúc Nó lưu trữ ngày và giờ mà đặt chỗ được cập nhật.
Nội dung Cột được sử dụng để lưu trữ các chi tiết bổ sung của đặt phòng.

Bảng Đặt chỗ với các ràng buộc thích hợp được hiển thị bên dưới.

 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,
` tỉnh `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`)
TÀI LIỆU THAM KHẢO` nhà hàng rant`. THÊM CHỈ SỐ `idx_booking_user` (` userId` ASC);
ALTER TABLE `restaurant`. `nhà hàng`.

Bảng mục đặt trước được yêu cầu để theo dõi các mặt hàng của khách đặt hàng. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Mục Đặt chỗ.

Id Id duy nhất để xác định mục đặt chỗ.
Id đặt chỗ Id đặt chỗ để xác định đặt chỗ được liên kết với mục đặt chỗ.
Id mặt hàng Id mặt hàng để xác định mặt hàng được liên kết với mặt hàng đặt trước.
SKU SKU của mặt hàng khi đặt hàng.
Giá Giá bán của mặt hàng khi đặt hàng.
Giảm giá Giảm giá của mặt hàng khi đặt hàng.
Số lượng Số lượng mặt hàng do người dùng đặt hàng. Nó có thể là số nhân của đơn vị mặt hàng hoặc khẩu phần đơn lẻ.
Đơn vị Đơn vị đo lường trong khi đặt hàng.
Trạng thái Trạng thái theo dõi tiến độ mặt hàng. Nó có thể là Mới, Nhà bếp, Nấu ăn, Nấu chín, Phục vụ.
Được tạo lúc Nó lưu trữ ngày và giờ tại đó mục đặt chỗ được tạo.
Cập nhật lúc Nó lưu trữ ngày và giờ tại đó mục đặt chỗ được cập nhật.
Nội dung Cột được sử dụng để lưu trữ các chi tiết bổ sung của mục đặt chỗ.

Bảng Mục Đặt trước với các ràng buộc thích hợp được hiển thị bên dưới.

 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,
`giảm ​​giá` FLOAT NOT NULL DEFAULT 0,
` số lượng` 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`
TỪ KHÓA NGOẠI LỆ (`bookingId`)
TÀI LIỆU THAM KHẢO` nhà hàng`.`booking` (`id`)
VỀ HẠN CHẾ XÓA
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG);

BẢNG BÁO CÁO `nhà hàng`. fk_boo king_item_item`
NGOẠI KHÓA (`itemId`)
TÀI LIỆU THAM KHẢO` nhà hàng`.`item` (`id`)
VỀ HẠN CHẾ XÓA
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

Bảng Đơn hàng và Bảng Mục Đơn hàng

Phần này cung cấp các bảng để quản lý các đơn đặt hàng. Một người dùng đã đăng nhập cũng có thể được liên kết với đơn đặt hàng. Bảng đơn đặt hàng có thể được sử dụng để lưu trữ các đơn đặt hàng đã hoàn thành và đơn đặt hàng của nhà cung cấp. Trạng thái đơn đặt hàng của nhà cung cấp có thể được đặt thành mới trong khi đặt hàng và nó có thể được đặt thành hoàn tất sau khi nhận được các mặt hàng từ nhà cung cấp. Ngoài ra, giá mặt hàng phải được điền theo cách thủ công sau khi nhận hàng từ nhà cung cấp. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Đơn hàng.

Id Id duy nhất để xác định đơn đặt hàng.
Id Người dùng Id người dùng để xác định khách được liên kết với đơn đặt hàng.
Id nhà cung cấp Id nhà cung cấp để xác định nhà cung cấp được liên kết với đơn đặt hàng.
Mã thông báo Mã thông báo duy nhất được liên kết với đơn đặt hàng để liên quan đến việc đặt vé. Mã thông báo tương tự cũng có thể được chuyển đến Cổng thanh toán nếu được yêu cầu.
Trạng thái Trạng thái của đơn đặt hàng có thể là Mới, Đã thanh toán, Đã thanh toán, Không thành công, Đã giao, Đã giao, Đã trả lại và Hoàn tất. Trạng thái Đã giao, Đã giao và Đã trả có thể được sử dụng cho các đơn đặt hàng của nhà cung cấp.
Tổng phụ Tổng giá của các Mục đặt hàng.
Giảm giá mặt hàng Tổng chiết khấu của các Mục đặt hàng.
Thuế Thuế đối với các Mục đặt hàng.
Vận chuyển Phí vận chuyển của các Mục đặt hàng.
Tổng số Tổng giá của Đơn đặt hàng bao gồm thuế và phí vận chuyển. Nó không bao gồm giảm giá các mặt hàng.
Quảng cáo Mã khuyến mãi của Đơn đặt hàng.
Giảm giá Tổng chiết khấu của Đơn hàng dựa trên mã khuyến mãi hoặc chiết khấu tại cửa hàng.
Tổng cộng Tổng số đơn đặt hàng mà khách đến nhà hàng hoặc nhà hàng phải trả cho nhà cung cấp.
Tên Tên của người dùng.
Tên đệm Tên đệm của người dùng.
Họ Họ của người dùng.
Di động Số điện thoại di động của người dùng.
Email Email của người dùng.
Dòng 1 Dòng đầu tiên cho địa chỉ cửa hàng.
Dòng 2 Dòng thứ hai cho địa chỉ cửa hàng.
Thành phố Thành phố của địa chỉ.
Tỉnh Tỉnh của địa chỉ.
Quốc gia Quốc gia của địa chỉ.
Được tạo lúc Nó lưu trữ ngày và giờ mà đơn đặt hàng được tạo.
Cập nhật lúc Nó lưu trữ ngày và giờ mà đơn đặt hàng được cập nhật.
Nội dung Cột được sử dụng để lưu trữ các chi tiết bổ sung của đơn đặt hàng.

Bảng Đơn hàng với các ràng buộc thích hợp được hiển thị bên dưới.

 CREATE TABLE `nhà hàng`. br /> `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,
` khuyến mãi `VARCHAR (50) NULL DEFAULT NULL,
` giảm giá` 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 ,
`tỉnh` VARCHAR (50) NULL DE FAULT 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;

Below mentioned is the description of all the columns of the Order Item Table.

Id The unique id to identify the ordered item.
Item Id The product id to identify the item associated with the ordered item.
Order Id The order id to identify the order associated with the ordered item.
SKU The SKU of the item while ordering it.
Price The price of the item while ordering it.
Discount The discount of the item while ordering it.
Quantity The quantity of the item selected by the user.
Unit The Units of Measure while ordering the Item.
Created At It stores the date and time at which the ordered item is created.
Updated At It stores the date and time at which the ordered item is updated.
Content The column used to store the additional details of the ordered item.

The Order Item Table with the appropriate constraints is as shown below.

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;

Transaction Table

We also need a transaction table to track the order payments made by the guests to the restaurant and restaurant to the vendors for bookkeeping. We can also use the same table to record the credit(guests) and debit(vendors) transactions. Below mentioned is the description of all the columns of the Transaction Table.

Id The unique id to identify the transaction.
User Id The user id to identify the user associated with the transaction.
Vendor Id The vendor id to identify the vendor associated with the transaction.
Order Id The order id to identify the order associated with the transaction.
Code The payment id provided by the payment gateway.
Type The type of order transaction can be either Credit or Debit.
Mode The mode of the order transaction can be Offline, Cash On Delivery, Cheque, Draft, Wired, and Online.
Status The status of the order transaction can be New, Cancelled, Failed, Pending, Declined, Rejected, and Success.
Created At It stores the date and time at which the order transaction is created.
Updated At It stores the date and time at which the order transaction is updated.
Content The column used to store the additional details of the transaction.

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.

Tóm tắt

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.

You may submit your comments to join the discussion. You may also be interested in designing the database of the Blog, Online Shopping Cart, and Poll &Survey applications. The complete database schema is also available on GitHub.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Những thách thức khi mở rộng quy mô cơ sở dữ liệu Moodle MySQL

  2. Biểu thức bảng phổ biến trong MySQL

  3. Cách sử dụng MySQL Rollup

  4. Gặp sự cố với các hàng khớp trong cơ sở dữ liệu bằng cách sử dụng PDO

  5. PDO MySQL:Chèn nhiều hàng trong một truy vấn