今天我们来设计一个简单的数据库,类似于饿了啥,某团这样的点餐系统;
create database eletuan;
use eletuan;
商家tb_shop
shop_id | shop_name| shop_type| shop_address|shop_phone|start_work_time|end_work_time
商家类型表 tb_shop_type
shop_type_id | shop_type_name
商家评价表tb_shop_comment
comment_id | shop_id|comment_person|comment_detail|comment_time|level
菜品tb_dish
dish_id|dish_name|shop_id |price | dish_type |dish_detail
菜品分类(字典表)tb_dish_type
dish_type_id | dish_type_name
菜品评价表tb_dish_comment
dish_comment_id | dish_id |comment_person |comment_detail |comment_time |level
用户tb_user
user_id | user_name |phone |address|gender |birthday | pay_type
支付类型表(字典表)tb_pay_type
pay_type_id | pay_type_name |support_brand
用户vip等级(字典表)tb_user_vip_level
vip_id | user_id |charge_percent |vip_name |affect_time | deffect_time
订单(增量表)tb_bill_add
bill_id | bill_name | user_id | dish_id |dish_num | total_price|send_person |start_time |end_time | finish_time |expire_time |status |bill_detail
订单历史(全量表)tb_bill_history_all
bill_history_id|bill_id | bill_name | user_id | dish_id |dish_num | total_price|send_person |start_time |end_time | finish_time |expire_time |status |bill_detail (备注)
配送员tb_send_person
send_person_id | send_person_name |phone | gender
配送历史表 tb_send_history
send_history_id |send_person_id |bill_id |isSuccess |send_time | send_distance
配送评价 tb_send_comment
send_comment_id | send_person_id|comment_person | comment_detail | comment_time |level
CREATE TABLE tb_shop(
shop_id INT(11) AUTO_INCREMENT PRIMARY KEY,
shop_name VARCHAR(100),
shop_type INT(11),
shop_address VARCHAR(2000),
shop_phone VARCHAR(20),
start_work_time TIME,
end_work_time TIME
);
CREATE TABLE tb_shop_type(
shop_type_id INT(11) AUTO_INCREMENT PRIMARY KEY,
shop_type_name VARCHAR(30));
ALTER TABLE tb_shop ADD CONSTRAINT key_shop_type FOREIGN KEY(shop_type)
REFERENCES tb_shop_type(shop_type_id);
CREATE TABLE tb_shop_comment(
shop_comment_id INT(11) AUTO_INCREMENT PRIMARY KEY,
shop_id INT(11),
comment_person INT(11),
comment_detail VARCHAR(2000),
comment_time DATETIME ,
LEVEL INT(11)
);
CREATE TABLE tb_user(
user_id INT(11) AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(20) ,
phone VARCHAR(20),
address VARCHAR(2000),
gender VARCHAR(10),
birthday DATE,
pay_type INT(11)
);
ALTER TABLE tb_shop_comment ADD CONSTRAINT key_shop_user_comment
FOREIGN KEY(comment_person) REFERENCES tb_user(user_id);
CREATE TABLE tb_pay_type(
pay_type_id INT(11) AUTO_INCREMENT PRIMARY KEY,
pay_type_name VARCHAR(20),
support_brand VARCHAR(20)
);
ALTER TABLE tb_user ADD CONSTRAINT key_user_pay_type FOREIGN
KEY (pay_type) REFERENCES tb_pay_type(pay_type_id);
CREATE TABLE tb_dish_type(
dish_type_id INT(11) AUTO_INCREMENT PRIMARY KEY,
dish_type_name VARCHAR(20)
);
CREATE TABLE tb_dish(
dish_id INT(11) AUTO_INCREMENT PRIMARY KEY,
dish_name VARCHAR(50),
shop_id INT(11),
price DECIMAL(15,2),
dish_type INT(11),
dish_detail VARCHAR(2000),
CONSTRAINT key_dish_shop FOREIGN KEY (shop_id)
REFERENCES tb_shop(shop_id),
CONSTRAINT key_dish_type FOREIGN KEY (dish_type)
REFERENCES tb_dish_type(dish_type_id));
CREATE TABLE tb_dish_comment(
dish_comment_id INT(11) AUTO_INCREMENT PRIMARY KEY,
dish_id INT(11),
comment_person INT(11),
comment_detail VARCHAR(2000),
comment_time DATETIME,
LEVEL INT(11),
CONSTRAINT key_dish_comment FOREIGN KEY(dish_id)
REFERENCES tb_dish(dish_id),
CONSTRAINT key_dish_comment_user FOREIGN KEY (comment_person)
REFERENCES tb_user(user_id));
CREATE TABLE tb_user_vip_level(
vip_id INT(11) AUTO_INCREMENT PRIMARY KEY,
user_id INT(11),
charge_percent DOUBLE(4,2),
vip_name VARCHAR(20),
affect_time DATETIME,
deffect_time DATETIME,
CONSTRAINT key_user_vip FOREIGN KEY(user_id) REFERENCES tb_user( user_id));
CREATE TABLE tb_send_person(
send_person_id INT(11) AUTO_INCREMENT PRIMARY KEY,
send_person_name VARCHAR(30),
phone VARCHAR(20),
gender VARCHAR(10));
CREATE TABLE tb_send_comment(
send_comment_id INT(11) AUTO_INCREMENT PRIMARY KEY,
send_person_id INT(11),
comment_person INT(11),
comment_detail VARCHAR(2000),
comment_time DATETIME,
LEVEL INT(11),
CONSTRAINT key_send_comment FOREIGN KEY(send_person_id)
REFERENCES tb_send_person(send_person_id),
CONSTRAINT key_send_comment_user FOREIGN KEY(comment_person)
REFERENCES tb_user(user_id));
CREATE TABLE tb_send_history(
send_history_id INT(11) AUTO_INCREMENT PRIMARY KEY,
send_person_id INT(11),
bill_id INT(11),
isSuccess VARCHAR(10),
send_time DATETIME,
send_distince DECIMAL(9,2),
CONSTRAINT key_send_history FOREIGN KEY(send_person_id)
REFERENCES tb_send_person(send_person_id));
ALTER TABLE tb_send_history ADD CONSTRAINT key_send_bill
FOREIGN KEY(bill_id) REFERENCES tb_bill_add(bill_id);
#订单增量表
CREATE TABLE tb_bill_add(
bill_id INT(11) AUTO_INCREMENT PRIMARY KEY,
bill_name VARCHAR(30),
user_id INT(11),
dish_id INT(11),
dish_num INT(11),
total_price DECIMAL(9,2),
send_person INT(11),
start_time TIME,
end_time TIME,
finish_time TIME,
expire_time TIME,
STATUS VARCHAR(20),
bill_detail VARCHAR(2000)
);
ALTER TABLE tb_bill_add ADD CONSTRAINT key_bill_send
FOREIGN KEY(send_person) REFERENCES tb_send_person(send_person_id);
ALTER TABLE tb_bill_add ADD CONSTRAINT key_bill_user
FOREIGN KEY(user_id) REFERENCES tb_user(user_id);
ALTER TABLE tb_bill_add ADD CONSTRAINT key_bill_dish
FOREIGN KEY(dish_id) REFERENCES tb_dish(dish_id);
#订单历史表
CREATE TABLE tb_bill_history_all(
bill_history_id INT(11) AUTO_INCREMENT PRIMARY KEY,
bill_id INT(11),
bill_name VARCHAR(30),
user_id INT(11),
dish_id INT(11),
dish_num INT(11),
total_price DECIMAL(9,2),
send_person INT(11),
start_time TIME,
end_time TIME,
finish_time TIME,
expire_time TIME,
STATUS VARCHAR(20),
bill_detail VARCHAR(2000)
);
用事务操作对订单历史表的自动添加
SET autocommit=0;
START TRANSACTION;
CREATE TRIGGER trig AFTER INSERT ON tb_bill_add
FOR EACH ROW
INSERT INTO tb_bill_history_all(bill_id,user_id,dish_id,dish_num,total_price,send_person,STATUS,bill_detail)
VALUES(new.bill_id,new.user_id,new.dish_id,new.dish_num,new.total_price,new.send_person,new.status,new.bill_detail);
INSERT INTO tb_bill_add(user_id,dish_id,dish_num,total_price,send_person,STATUS,bill_detail)
VALUES(2,3,15,135,2,'完成','不充钱还想吃外卖?');
COMMIT;
SELECT * FROM tb_bill_history_all ;
SET autocommit=1;