CREATE DATABASE IF NOT EXISTS wy_order DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE wy_order; -- ------------------------------ -- 1. 商品分类表 -- ------------------------------ CREATE TABLE `product_category` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(100) NOT NULL COMMENT '分类名称', `parent_id` INT COMMENT '父分类ID', `sort` INT DEFAULT 0 COMMENT '排序权重', `status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', FOREIGN KEY (`parent_id`) REFERENCES `product_category` (`id`) ON DELETE SET NULL, INDEX `idx_parent_id` (`parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表'; -- ------------------------------ -- 2. 商品表(关联artist服务的artist.id、content服务的album/song.id) -- ------------------------------ CREATE TABLE `product` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `category_id` INT NOT NULL COMMENT '关联本服务的product_category.id', `name` VARCHAR(255) NOT NULL COMMENT '商品名称', `cover_url` VARCHAR(500) COMMENT '商品封面URL', `description` TEXT COMMENT '商品描述', `price` DECIMAL(10,2) NOT NULL COMMENT '售价', `original_price` DECIMAL(10,2) COMMENT '原价', `stock` INT NOT NULL DEFAULT 0 COMMENT '库存(-1表示无限)', `product_type` TINYINT NOT NULL COMMENT '类型:1-数字商品,2-实体商品', `artist_id` INT COMMENT '关联artist服务的artist.id', `album_id` INT COMMENT '关联content服务的album.id', `song_id` INT COMMENT '关联content服务的song.id', `status` TINYINT DEFAULT 1 COMMENT '状态:0-下架,1-上架', `sales_count` INT DEFAULT 0 COMMENT '销量', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', FOREIGN KEY (`category_id`) REFERENCES `product_category` (`id`) ON DELETE CASCADE, INDEX `idx_product_name` (`name`), INDEX `idx_product_type` (`product_type`), INDEX `idx_status` (`status`), INDEX `idx_artist_id` (`artist_id`), -- 逻辑关联索引 INDEX `idx_album_id` (`album_id`), -- 逻辑关联索引 INDEX `idx_song_id` (`song_id`) -- 逻辑关联索引 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表'; -- ------------------------------ -- 3. 订单表(关联auth服务的user.id) -- ------------------------------ CREATE TABLE `order` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_no` VARCHAR(50) NOT NULL COMMENT '订单编号', `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额', `pay_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额', `discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额', `pay_type` TINYINT COMMENT '支付方式:1-微信,2-支付宝', `status` TINYINT NOT NULL COMMENT '状态:0-待支付,1-已支付,2-已取消,3-已退款,4-已完成', `pay_time` DATETIME COMMENT '支付时间', `cancel_time` DATETIME COMMENT '取消时间', `finish_time` DATETIME COMMENT '完成时间', `receive_name` VARCHAR(100) COMMENT '收货人姓名', `receive_phone` VARCHAR(20) COMMENT '收货人电话', `receive_address` TEXT COMMENT '收货地址', `note` TEXT COMMENT '订单备注', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_order_no` (`order_no`), INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引 INDEX `idx_status` (`status`), INDEX `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表'; -- ------------------------------ -- 4. 订单项表(关联本服务的order和product表) -- ------------------------------ CREATE TABLE `order_item` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id', `product_id` INT NULL COMMENT '关联本服务的product.id', `product_name` VARCHAR(255) NOT NULL COMMENT '商品名称快照', `product_cover` VARCHAR(500) COMMENT '商品封面快照', `product_price` DECIMAL(10,2) NOT NULL COMMENT '下单时单价', `quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量', `sub_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额', `digital_code` VARCHAR(100) COMMENT '数字商品兑换码', `digital_code_status` TINYINT DEFAULT 0 COMMENT '兑换码状态:0-未使用,1-已使用', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE, FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE SET NULL, INDEX `idx_order_id` (`order_id`), INDEX `idx_product_id` (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表';