Files
wb-java-nc-shop/src/main/resources/db/schema.sql
2026-01-11 18:14:42 +08:00

249 lines
12 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 奶茶店管理系统数据库表结构
-- 用户表
CREATE TABLE IF NOT EXISTS `user` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名',
`password` VARCHAR(255) NOT NULL COMMENT '密码(加密)',
`name` VARCHAR(50) COMMENT '姓名',
`gender` TINYINT COMMENT '性别0-女1-男',
`phone` VARCHAR(20) COMMENT '手机号',
`email` VARCHAR(100) COMMENT '邮箱',
`avatar` VARCHAR(255) COMMENT '头像路径',
`address` VARCHAR(255) COMMENT '默认地址',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- 用户地址表
CREATE TABLE IF NOT EXISTS `user_address` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`address` VARCHAR(255) NOT NULL COMMENT '详细地址',
`contact_name` VARCHAR(50) COMMENT '联系人姓名',
`contact_phone` VARCHAR(20) COMMENT '联系人电话',
`is_default` TINYINT DEFAULT 0 COMMENT '是否默认0-否1-是',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户地址表';
-- 商家表
CREATE TABLE IF NOT EXISTS `merchant` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名',
`password` VARCHAR(255) NOT NULL COMMENT '密码(加密)',
`store_name` VARCHAR(100) NOT NULL COMMENT '门店名称',
`address` VARCHAR(255) COMMENT '门店地址',
`phone` VARCHAR(20) COMMENT '联系电话',
`email` VARCHAR(100) COMMENT '邮箱',
`manager_name` VARCHAR(50) COMMENT '负责人姓名',
`avatar` VARCHAR(255) COMMENT '头像路径',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商家表';
-- 商品表
CREATE TABLE IF NOT EXISTS `product` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`merchant_id` BIGINT NOT NULL COMMENT '商家ID',
`name` VARCHAR(100) NOT NULL COMMENT '商品名称',
`category` VARCHAR(50) COMMENT '分类',
`description` TEXT COMMENT '商品描述',
`base_price` DECIMAL(10,2) NOT NULL COMMENT '基础价格',
`image` VARCHAR(255) COMMENT '商品图片',
`status` TINYINT DEFAULT 1 COMMENT '状态0-下架1-上架',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`merchant_id`) REFERENCES `merchant`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
-- 商品规格表
CREATE TABLE IF NOT EXISTS `product_spec` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`product_id` BIGINT NOT NULL COMMENT '商品ID',
`spec_name` VARCHAR(50) NOT NULL COMMENT '规格名称(大杯/中杯/小杯)',
`price_adjust` DECIMAL(10,2) DEFAULT 0 COMMENT '价格调整(相对于基础价格)',
FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品规格表';
-- 配料表
CREATE TABLE IF NOT EXISTS `product_topping` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`product_id` BIGINT NOT NULL COMMENT '商品ID',
`topping_name` VARCHAR(50) NOT NULL COMMENT '配料名称',
`price` DECIMAL(10,2) DEFAULT 0 COMMENT '配料价格',
FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配料表';
-- 商品定制选项表
CREATE TABLE IF NOT EXISTS `product_custom` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`product_id` BIGINT NOT NULL COMMENT '商品ID',
`option_type` VARCHAR(20) NOT NULL COMMENT '选项类型sweetness-甜度ice-冰度',
`option_value` VARCHAR(50) NOT NULL COMMENT '选项值',
`price_adjust` DECIMAL(10,2) DEFAULT 0 COMMENT '价格调整',
FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品定制选项表';
-- 购物车表
CREATE TABLE IF NOT EXISTS `cart` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`product_id` BIGINT NOT NULL COMMENT '商品ID',
`spec_id` BIGINT COMMENT '规格ID',
`quantity` INT DEFAULT 1 COMMENT '数量',
`custom_sweetness` VARCHAR(20) COMMENT '甜度定制',
`custom_ice` VARCHAR(20) COMMENT '冰度定制',
`toppings` TEXT COMMENT '配料JSON',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车表';
-- 订单表
CREATE TABLE IF NOT EXISTS `order` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`order_no` VARCHAR(50) UNIQUE NOT NULL COMMENT '订单号',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`merchant_id` BIGINT NOT NULL COMMENT '商家ID',
`total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
`payment_method` VARCHAR(20) COMMENT '支付方式wechat/alipay',
`payment_status` TINYINT DEFAULT 0 COMMENT '支付状态0-未支付1-已支付',
`order_status` VARCHAR(20) DEFAULT 'PENDING_PAY' COMMENT '订单状态PENDING_PAY-待支付MAKING-制作中READY-待取餐COMPLETED-已完成CANCELLED-已取消',
`address` VARCHAR(255) NOT NULL COMMENT '收货地址',
`contact_phone` VARCHAR(20) NOT NULL COMMENT '联系电话',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`pay_time` DATETIME COMMENT '支付时间',
`complete_time` DATETIME COMMENT '完成时间',
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`),
FOREIGN KEY (`merchant_id`) REFERENCES `merchant`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
-- 订单明细表
CREATE TABLE IF NOT EXISTS `order_item` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`order_id` BIGINT NOT NULL COMMENT '订单ID',
`product_id` BIGINT NOT NULL COMMENT '商品ID',
`product_name` VARCHAR(100) NOT NULL COMMENT '商品名称',
`spec_name` VARCHAR(50) COMMENT '规格名称',
`quantity` INT NOT NULL COMMENT '数量',
`price` DECIMAL(10,2) NOT NULL COMMENT '单价',
`custom_sweetness` VARCHAR(20) COMMENT '甜度',
`custom_ice` VARCHAR(20) COMMENT '冰度',
`toppings` TEXT COMMENT '配料JSON',
`subtotal` DECIMAL(10,2) NOT NULL COMMENT '小计',
FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`product_id`) REFERENCES `product`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表';
-- 订单跟踪表
CREATE TABLE IF NOT EXISTS `order_track` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`order_id` BIGINT NOT NULL COMMENT '订单ID',
`status` VARCHAR(20) NOT NULL COMMENT '状态',
`description` VARCHAR(255) COMMENT '描述',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单跟踪表';
-- 公告表
CREATE TABLE IF NOT EXISTS `announcement` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`merchant_id` BIGINT NOT NULL COMMENT '商家ID',
`title` VARCHAR(200) NOT NULL COMMENT '标题',
`content` TEXT COMMENT '内容',
`type` VARCHAR(20) DEFAULT 'NOTICE' COMMENT '类型ACTIVITY-活动NOTICE-通知',
`status` TINYINT DEFAULT 1 COMMENT '状态0-下架1-发布',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`merchant_id`) REFERENCES `merchant`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公告表';
-- 留言反馈表
CREATE TABLE IF NOT EXISTS `message` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`merchant_id` BIGINT NOT NULL COMMENT '商家ID',
`order_id` BIGINT COMMENT '订单ID',
`content` TEXT NOT NULL COMMENT '留言内容',
`reply` TEXT COMMENT '回复内容',
`status` TINYINT DEFAULT 0 COMMENT '状态0-未回复1-已回复',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`reply_time` DATETIME COMMENT '回复时间',
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`),
FOREIGN KEY (`merchant_id`) REFERENCES `merchant`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='留言反馈表';
-- 评价表
CREATE TABLE IF NOT EXISTS `review` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`order_id` BIGINT NOT NULL COMMENT '订单ID',
`product_id` BIGINT NOT NULL COMMENT '商品ID',
`rating` TINYINT NOT NULL COMMENT '评分1-5',
`content` TEXT COMMENT '评价内容',
`reply` TEXT COMMENT '商家回复',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`),
FOREIGN KEY (`order_id`) REFERENCES `order`(`id`),
FOREIGN KEY (`product_id`) REFERENCES `product`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评价表';
-- 库存表
CREATE TABLE IF NOT EXISTS `inventory` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`merchant_id` BIGINT NOT NULL COMMENT '商家ID',
`material_name` VARCHAR(100) NOT NULL COMMENT '原料名称',
`quantity` DECIMAL(10,2) NOT NULL COMMENT '数量',
`unit` VARCHAR(20) COMMENT '单位',
`min_threshold` DECIMAL(10,2) DEFAULT 0 COMMENT '最低库存阈值',
`last_in_time` DATETIME COMMENT '最后入库时间',
`last_out_time` DATETIME COMMENT '最后出库时间',
FOREIGN KEY (`merchant_id`) REFERENCES `merchant`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存表';
-- 库存操作日志表
CREATE TABLE IF NOT EXISTS `inventory_log` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`inventory_id` BIGINT NOT NULL COMMENT '库存ID',
`operation_type` VARCHAR(20) NOT NULL COMMENT '操作类型IN-入库OUT-出库',
`quantity` DECIMAL(10,2) NOT NULL COMMENT '操作数量',
`operator` VARCHAR(50) COMMENT '操作人',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`inventory_id`) REFERENCES `inventory`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存操作日志表';
-- 用户行为表(用于协同过滤)
CREATE TABLE IF NOT EXISTS `user_behavior` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`product_id` BIGINT NOT NULL COMMENT '商品ID',
`behavior_type` VARCHAR(20) NOT NULL COMMENT '行为类型VIEW-浏览PURCHASE-购买RATING-评分',
`score` DECIMAL(5,2) DEFAULT 0 COMMENT '评分0-5',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户行为表';
-- 用户相似度缓存表(可选)
CREATE TABLE IF NOT EXISTS `user_similarity` (
`user1_id` BIGINT NOT NULL COMMENT '用户1ID',
`user2_id` BIGINT NOT NULL COMMENT '用户2ID',
`similarity_score` DECIMAL(10,6) NOT NULL COMMENT '相似度分数',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user1_id`, `user2_id`),
FOREIGN KEY (`user1_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`user2_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户相似度缓存表';
-- 创建索引
CREATE INDEX idx_user_username ON `user`(`username`);
CREATE INDEX idx_merchant_username ON `merchant`(`username`);
CREATE INDEX idx_product_merchant ON `product`(`merchant_id`);
CREATE INDEX idx_product_status ON `product`(`status`);
CREATE INDEX idx_cart_user ON `cart`(`user_id`);
CREATE INDEX idx_order_user ON `order`(`user_id`);
CREATE INDEX idx_order_merchant ON `order`(`merchant_id`);
CREATE INDEX idx_order_status ON `order`(`order_status`);
CREATE INDEX idx_order_no ON `order`(`order_no`);
CREATE INDEX idx_user_behavior_user ON `user_behavior`(`user_id`);
CREATE INDEX idx_user_behavior_product ON `user_behavior`(`product_id`);