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 '分类图标', `color` varchar(20) DEFAULT '#1890ff' COMMENT '分类颜色', `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='商品分类表'; ALTER TABLE `categories` ADD COLUMN IF NOT EXISTS `color` varchar(20) DEFAULT '#1890ff' COMMENT '分类颜色'; 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-禁用', `openid` varchar(100) DEFAULT NULL COMMENT '微信openid', `token` varchar(100) DEFAULT NULL COMMENT '登录token', `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `phone` (`phone`), KEY `openid` (`openid`) ) 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='订单表'; 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='订单商品明细表'; 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`) ) 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='采购单明细表'; 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='收货地址表'; 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`) ) 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`);