数据库设计:吃货联盟

数据库设计:吃货联盟

  • 一.简介
  • 二.设计需求
    • 1.建库并且使用库
    • 2.建表需求
  • 三.建表语句
  • 四.简单需求

一.简介

今天我们来设计一个简单的数据库,类似于饿了啥,某团这样的点餐系统;

二.设计需求

1.建库并且使用库

create database eletuan;
use eletuan;

2.建表需求

商家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;

你可能感兴趣的:(数据库,mysql)