利用MySQL实现一个类似美团外卖的外卖订单的数据库管理系统 |
您所在的位置:网站首页 › 外卖省外订餐怎么定位店铺 › 利用MySQL实现一个类似美团外卖的外卖订单的数据库管理系统 |
利用MySQL实现一个类似美团外卖的外卖订单的数据库管理系统
本文的重点在于MySQL触发器的应用 1、数据库需求分析 1)数据库实体:客户、商家、商品、订单。 2)一个客户对应多个订单。 3)一个商家对应多种商品和多个订单。 4)一个订单对应一种商品。 2、系统功能分析 1)客户注册:客户通过添加必要的信息到数据库来完成注册。 2)客户信息修改:客户根据自己的编号来修改除编号外的其他信息。 3)商家注册:商家通过添加必要的信息到数据库来完成注册。 4)商家信息修改:商家根据自己的编号来修改除编号外的其他信息。 5)商品录入:商家通过添加商品必要的信息到数据库来完成商品录入。 6)商品信息修改:商家根据商品编号来修改商品除编号外的其他信息。 7)客户下单:客户通过添加订单信息到数据库来提交订单。 8)商家接单:商家通过修改订单状态来接受订单。 9)客户确认收货:客户通过修改订单状态来确认收货。 10)取消订单:客户通过修改订单状态来退款,但必须在商家接单之前退款。 11)订单状态:“0”表示已支付,“1”表示已接单,“2”表示已送达,“3”表示已退款。 3、关系模式 1)客户(客户编号,客户姓名,消费金额 ,客户电话,客户地址) 2)商家(商家编号,商户名称,营业额 ,商户电话,商户地址) 3)商品(商品编号,商品名称,商户编号,商品价格,限购数量) 4)订单(订单编号,订购时间,客户编号,商品编号,数量,总额,状态) 注:含下划线字段为主键或外键。 4、创建数据库及表 1)创建数据库 CREATE DATABASE takeout; 2)创建客户表 CREATE TABLE customers( id int NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(40) NOT NULL , consumption DOUBLE(16,2) NOT NULL DEFAULT 0, phone VARCHAR(16) NOT NULL , address VARCHAR(45) NOT NULL ); 3)创建商家表 CREATE TABLE businesses( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(40) NOT NULL , turnover DOUBLE(16,2) NOT NULL DEFAULT 0, phone VARCHAR(16) NOT NULL , address VARCHAR(45) NOT NULL ); 4)创建商品表 CREATE TABLE goods( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(40) NOT NULL , business_id INT NOT NULL , price DOUBLE(16,2) NOT NULL , limit_num INT , FOREIGN KEY (business_id) REFERENCES businesses(id) ); 5)创建订单表 CREATE TABLE orders( id INT NOT NULL AUTO_INCREMENT, order_time DATETIME NOT NULL , customer_id INT NOT NULL , goods_id INT NOT NULL , number INT NOT NULL , total_cost DOUBLE(16,2) NOT NULL , state INT NOT NULL DEFAULT 0 , PRIMARY KEY (id), FOREIGN KEY (customer_id) REFERENCES customers(id), FOREIGN KEY (goods_id) REFERENCES goods(id) ); 5、创建触发器 1)创建触发器前修改sql语句结束符为# DELIMITER # 2)限购以及计算订单总额 创建之后,在客户订购的商品数量超过限购数量时,自动将订购的数量改为限购数量,然后计算出订单总额。 CREATE TRIGGER limit_buy BEFORE INSERT ON orders FOR EACH ROW BEGIN DECLARE p DOUBLE(16,2); /*商品单价*/ DECLARE lim INT; /*限购数量*/ SET p=(SELECT price FROM goods WHERE goods.id=NEW.goods_id); SET lim=(SELECT limit_num FROM goods WHERE goods.id=NEW.goods_id); if (lim IS NOT NULL AND NEW.number>lim) THEN SET NEW.number=lim; END IF ; SET NEW.total_cost=NEW.number*p; END # 3)更新客户消费总额 在客户提交订单之后,自动将消费金额累加到客户总的消费金额里。 CREATE TRIGGER calculate_consumption AFTER INSERT ON orders FOR EACH ROW BEGIN UPDATE customers SET consumption=consumption+NEW.total_cost WHERE customers.id=NEW.customer_id; END # 4)更新商家总营业额以及退款 商家接单后,自动将订单金额累加到商家的营业额里;客户取消订单,自动将客户总消费减去本次订单金额。 CREATE TRIGGER calculate_turnover BEFORE UPDATE ON orders FOR EACH ROW BEGIN IF (NEW.state=1 AND OLD.state=0) THEN UPDATE businesses SET turnover=turnover+OLD.total_cost WHERE id=(SELECT business_id FROM goods WHERE goods.id=NEW.goods_id); ELSEIF (NEW.state=3 AND OLD.state=0) THEN UPDATE customers SET consumption=consumption-OLD.total_cost WHERE id=OLD.customer_id; ELSEIF (NEW.state |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |