2026-05-23 14:15:45 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS `categories` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`name` varchar(100) NOT NULL COMMENT '分类名称',
|
|
|
|
|
|
`icon` varchar(50) DEFAULT NULL COMMENT '分类图标',
|
2026-05-26 13:37:55 +08:00
|
|
|
|
`color` varchar(20) DEFAULT '#1890ff' COMMENT '分类颜色',
|
2026-05-23 14:15:45 +08:00
|
|
|
|
`is_show` tinyint(1) DEFAULT 1 COMMENT '是否显示',
|
|
|
|
|
|
`sort_order` int(11) DEFAULT 0 COMMENT '排序顺序',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品分类表';
|
|
|
|
|
|
|
2026-05-26 13:37:55 +08:00
|
|
|
|
ALTER TABLE `categories` ADD COLUMN IF NOT EXISTS `color` varchar(20) DEFAULT '#1890ff' COMMENT '分类颜色';
|
|
|
|
|
|
|
2026-05-23 14:15:45 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS `goods` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`name` varchar(200) NOT NULL COMMENT '商品名称',
|
|
|
|
|
|
`price` decimal(10,2) NOT NULL COMMENT '售价',
|
|
|
|
|
|
`original_price` decimal(10,2) DEFAULT NULL COMMENT '原价',
|
|
|
|
|
|
`unit` varchar(20) DEFAULT '件' COMMENT '单位',
|
|
|
|
|
|
`category_id` int(11) DEFAULT NULL COMMENT '分类ID',
|
|
|
|
|
|
`images` text COMMENT '图片JSON',
|
|
|
|
|
|
`stock` int(11) DEFAULT 0 COMMENT '库存',
|
|
|
|
|
|
`sales` int(11) DEFAULT 0 COMMENT '销量',
|
|
|
|
|
|
`is_hot` tinyint(1) DEFAULT 0 COMMENT '是否热销',
|
|
|
|
|
|
`is_new` tinyint(1) DEFAULT 0 COMMENT '是否新品',
|
|
|
|
|
|
`pricing_type` tinyint(1) DEFAULT 1 COMMENT '定价类型 1-按件 2-按重量',
|
|
|
|
|
|
`description` text COMMENT '商品描述',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
KEY `category_id` (`category_id`),
|
|
|
|
|
|
CONSTRAINT `goods_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品表';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `users` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`phone` varchar(20) NOT NULL COMMENT '手机号',
|
|
|
|
|
|
`password` varchar(64) NOT NULL COMMENT '密码(MD5)',
|
|
|
|
|
|
`name` varchar(100) DEFAULT NULL COMMENT '用户名',
|
|
|
|
|
|
`avatar` varchar(255) DEFAULT NULL COMMENT '头像',
|
|
|
|
|
|
`points` int(11) DEFAULT 0 COMMENT '积分',
|
|
|
|
|
|
`role` tinyint(1) DEFAULT 0 COMMENT '角色 0-普通用户 1-店员',
|
|
|
|
|
|
`status` tinyint(1) DEFAULT 1 COMMENT '状态 1-正常 0-禁用',
|
2026-05-26 13:37:55 +08:00
|
|
|
|
`openid` varchar(100) DEFAULT NULL COMMENT '微信openid',
|
|
|
|
|
|
`token` varchar(100) DEFAULT NULL COMMENT '登录token',
|
2026-05-23 14:15:45 +08:00
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
2026-05-26 13:37:55 +08:00
|
|
|
|
UNIQUE KEY `phone` (`phone`),
|
|
|
|
|
|
KEY `openid` (`openid`)
|
2026-05-23 14:15:45 +08:00
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `orders` (
|
|
|
|
|
|
`id` varchar(50) NOT NULL COMMENT '订单号',
|
|
|
|
|
|
`user_id` int(11) DEFAULT NULL COMMENT '用户ID',
|
|
|
|
|
|
`status` varchar(20) DEFAULT 'pending' COMMENT '状态 pending-待支付 paid-已支付 completed-已完成 cancelled-已取消',
|
|
|
|
|
|
`total_price` decimal(10,2) NOT NULL COMMENT '总价',
|
|
|
|
|
|
`cart` text COMMENT '购物车数据JSON',
|
|
|
|
|
|
`user_info` text COMMENT '用户信息JSON',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
KEY `user_id` (`user_id`),
|
|
|
|
|
|
CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
|
|
|
|
|
|
|
2026-05-26 13:37:55 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS `order_items` (
|
|
|
|
|
|
`id` int NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`order_id` varchar(64) NOT NULL COMMENT '订单ID',
|
|
|
|
|
|
`goods_id` int NOT NULL COMMENT '商品ID',
|
|
|
|
|
|
`goods_name` varchar(255) NOT NULL COMMENT '商品名称',
|
|
|
|
|
|
`price` decimal(10,2) NOT NULL COMMENT '单价',
|
|
|
|
|
|
`quantity` int NOT NULL DEFAULT 1 COMMENT '数量',
|
|
|
|
|
|
`weight` decimal(10,2) DEFAULT NULL COMMENT '称重(kg)',
|
|
|
|
|
|
`subtotal` decimal(10,2) NOT NULL COMMENT '小计',
|
|
|
|
|
|
`unit` varchar(20) DEFAULT '' COMMENT '单位',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
KEY `order_id` (`order_id`),
|
|
|
|
|
|
KEY `goods_id` (`goods_id`),
|
|
|
|
|
|
CONSTRAINT `order_items_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单商品明细表';
|
|
|
|
|
|
|
2026-05-23 14:15:45 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS `points_logs` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`user_id` int(11) NOT NULL COMMENT '用户ID',
|
|
|
|
|
|
`type` varchar(20) COMMENT '类型 earn-获得 spend-消费',
|
|
|
|
|
|
`amount` int(11) NOT NULL COMMENT '积分数量',
|
|
|
|
|
|
`description` varchar(200) DEFAULT NULL COMMENT '描述',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
KEY `user_id` (`user_id`),
|
|
|
|
|
|
CONSTRAINT `points_logs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='积分记录表';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `stock` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`goods_id` int(11) NOT NULL COMMENT '商品ID',
|
|
|
|
|
|
`quantity` int(11) DEFAULT 0 COMMENT '库存数量',
|
|
|
|
|
|
`warehouse` varchar(50) DEFAULT '默认仓库' COMMENT '仓库',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
UNIQUE KEY `goods_id` (`goods_id`),
|
|
|
|
|
|
CONSTRAINT `stock_ibfk_1` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`id`)
|
2026-05-26 09:18:48 +08:00
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='库存表';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `suppliers` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`name` varchar(200) NOT NULL COMMENT '供应商名称',
|
|
|
|
|
|
`contact` varchar(100) DEFAULT '' COMMENT '联系人',
|
|
|
|
|
|
`phone` varchar(20) DEFAULT '' COMMENT '联系电话',
|
|
|
|
|
|
`address` varchar(500) DEFAULT '' COMMENT '地址',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='供应商表';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `purchases` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`supplier_id` int(11) DEFAULT NULL COMMENT '供应商ID',
|
|
|
|
|
|
`supplier_name` varchar(200) DEFAULT '' COMMENT '供应商名称(冗余)',
|
|
|
|
|
|
`total` decimal(10,2) DEFAULT 0.00 COMMENT '采购总金额',
|
|
|
|
|
|
`status` tinyint(4) DEFAULT 0 COMMENT '状态 0-待入库 1-已入库',
|
|
|
|
|
|
`remarks` text COMMENT '备注',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
KEY `supplier_id` (`supplier_id`),
|
|
|
|
|
|
CONSTRAINT `purchases_ibfk_1` FOREIGN KEY (`supplier_id`) REFERENCES `suppliers` (`id`)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单表';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `purchase_items` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`purchase_id` int(11) NOT NULL COMMENT '采购单ID',
|
|
|
|
|
|
`goods_id` int(11) NOT NULL COMMENT '商品ID',
|
|
|
|
|
|
`goods_name` varchar(200) DEFAULT '' COMMENT '商品名称(冗余)',
|
|
|
|
|
|
`quantity` int(11) DEFAULT 0 COMMENT '采购数量',
|
|
|
|
|
|
`purchase_price` decimal(10,2) DEFAULT 0.00 COMMENT '采购单价',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
KEY `purchase_id` (`purchase_id`),
|
|
|
|
|
|
KEY `goods_id` (`goods_id`),
|
|
|
|
|
|
CONSTRAINT `purchase_items_ibfk_1` FOREIGN KEY (`purchase_id`) REFERENCES `purchases` (`id`) ON DELETE CASCADE,
|
|
|
|
|
|
CONSTRAINT `purchase_items_ibfk_2` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`id`)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单明细表';
|
|
|
|
|
|
|
2026-05-26 13:37:55 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS `goods_specs` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`goods_id` int(11) NOT NULL COMMENT '商品ID',
|
|
|
|
|
|
`spec_name` varchar(100) NOT NULL COMMENT '规格名称(如 330ml/500ml/1L)',
|
|
|
|
|
|
`price` decimal(10,2) NOT NULL COMMENT '规格售价',
|
|
|
|
|
|
`stock` int(11) DEFAULT 0 COMMENT '规格库存',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
KEY `goods_id` (`goods_id`),
|
|
|
|
|
|
CONSTRAINT `goods_specs_ibfk_1` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`id`) ON DELETE CASCADE
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品规格表';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `addresses` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`user_id` int(11) NOT NULL COMMENT '用户ID',
|
|
|
|
|
|
`name` varchar(100) NOT NULL COMMENT '收货人姓名',
|
|
|
|
|
|
`phone` varchar(20) NOT NULL COMMENT '联系电话',
|
|
|
|
|
|
`region` varchar(200) DEFAULT '' COMMENT '地区',
|
|
|
|
|
|
`detail` varchar(500) NOT NULL COMMENT '详细地址',
|
|
|
|
|
|
`is_default` tinyint(1) DEFAULT 0 COMMENT '是否默认',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
|
KEY `user_id` (`user_id`),
|
|
|
|
|
|
CONSTRAINT `addresses_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收货地址表';
|
|
|
|
|
|
|
2026-05-26 09:18:48 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS `points_goods` (
|
|
|
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
`name` varchar(200) NOT NULL COMMENT '商品名称',
|
|
|
|
|
|
`points` int(11) DEFAULT 0 COMMENT '所需积分',
|
|
|
|
|
|
`stock` int(11) DEFAULT 0 COMMENT '库存',
|
|
|
|
|
|
`image` varchar(500) DEFAULT '' COMMENT '图片',
|
|
|
|
|
|
`description` text COMMENT '描述',
|
|
|
|
|
|
`is_show` tinyint(4) DEFAULT 1 COMMENT '是否显示',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`)
|
2026-05-26 13:37:55 +08:00
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='积分商品表';
|
|
|
|
|
|
|
|
|
|
|
|
-- 订单表索引:按状态筛选、按时间排序
|
|
|
|
|
|
ALTER TABLE `orders` ADD INDEX IF NOT EXISTS `idx_orders_status` (`status`);
|
|
|
|
|
|
ALTER TABLE `orders` ADD INDEX IF NOT EXISTS `idx_orders_created_at` (`created_at`);
|
|
|
|
|
|
|
|
|
|
|
|
-- 商品表索引:热销/新品筛选、名称搜索
|
|
|
|
|
|
ALTER TABLE `goods` ADD INDEX IF NOT EXISTS `idx_goods_is_hot` (`is_hot`);
|
|
|
|
|
|
ALTER TABLE `goods` ADD INDEX IF NOT EXISTS `idx_goods_is_new` (`is_new`);
|
|
|
|
|
|
ALTER TABLE `goods` ADD INDEX IF NOT EXISTS `idx_goods_name` (`name`(100));
|
|
|
|
|
|
|
|
|
|
|
|
-- 分类表索引:按排序字段排序
|
|
|
|
|
|
ALTER TABLE `categories` ADD INDEX IF NOT EXISTS `idx_categories_sort_order` (`sort_order`);
|
|
|
|
|
|
|
|
|
|
|
|
-- 积分记录表索引:按类型筛选
|
|
|
|
|
|
ALTER TABLE `points_logs` ADD INDEX IF NOT EXISTS `idx_points_logs_type` (`type`);
|
|
|
|
|
|
|
|
|
|
|
|
-- 采购单表索引:按状态筛选、按时间排序
|
|
|
|
|
|
ALTER TABLE `purchases` ADD INDEX IF NOT EXISTS `idx_purchases_status` (`status`);
|
|
|
|
|
|
ALTER TABLE `purchases` ADD INDEX IF NOT EXISTS `idx_purchases_created_at` (`created_at`);
|