LLM-test/test/sql/2-sql测试-1/minimax-2.1-api.md

682 lines
33 KiB
Markdown
Raw Permalink Normal View History

# TestECommerceDB 数据库完整建表SQL
以下是完整的MySQL数据库建表脚本包含表结构、约束、索引和测试数据。
```sql
-- =====================================================
-- 数据库创建脚本
-- 数据库名称TestECommerceDB
-- 用途测试大语言模型的SQL编写能力
-- 设计特点:复杂关联关系、一对多、多对多、自关联
-- 迷惑项:相似字段名、相近表名、含义相近的字段
-- =====================================================
-- 创建数据库
DROP DATABASE IF EXISTS TestECommerceDB;
CREATE DATABASE TestECommerceDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE TestECommerceDB;
-- =====================================================
-- 1. 用户表 (Users)
-- 存储用户基本信息
-- 迷惑项user_id、user_email、user_status 字段名相似
-- =====================================================
CREATE TABLE Users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
user_email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
full_name VARCHAR(100),
phone VARCHAR(20),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
user_status TINYINT DEFAULT 1 COMMENT '1=活跃, 0=禁用',
last_login DATETIME,
INDEX idx_username (username),
INDEX idx_user_email (user_email),
INDEX idx_user_status (user_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 2. 分类表 (Categories)
-- 存储产品分类信息
-- 迷惑项自关联关系category_id、category_name、parent_id
-- 特点:树形结构,支持多级分类
-- =====================================================
CREATE TABLE Categories (
category_id INT AUTO_INCREMENT PRIMARY KEY,
category_name VARCHAR(50) NOT NULL,
category_desc VARCHAR(200),
parent_id INT DEFAULT NULL,
category_order INT DEFAULT 0,
is_active TINYINT DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (parent_id) REFERENCES Categories(category_id) ON DELETE SET NULL,
INDEX idx_parent_id (parent_id),
INDEX idx_category_name (category_name),
INDEX idx_is_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 3. 产品表 (Products)
-- 存储产品信息
-- 迷惑项product_id、product_name、product_desc、product_status
-- 含义相近字段price vs cost_price
-- =====================================================
CREATE TABLE Products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
product_desc TEXT,
product_specs VARCHAR(255) COMMENT '产品规格JSON字符串',
price DECIMAL(10,2) NOT NULL COMMENT '销售价格',
cost_price DECIMAL(10,2) COMMENT '成本价格',
stock_quantity INT DEFAULT 0,
stock_alert_level INT DEFAULT 10,
category_id INT,
brand VARCHAR(50),
product_status TINYINT DEFAULT 1 COMMENT '1=上架, 0=下架, 2=缺货',
view_count INT DEFAULT 0,
sales_count INT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES Categories(category_id) ON DELETE SET NULL,
INDEX idx_product_name (product_name),
INDEX idx_price (price),
INDEX idx_category_id (category_id),
INDEX idx_product_status (product_status),
INDEX idx_brand (brand),
INDEX idx_sales_count (sales_count)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 4. 产品-分类关联表 (ProductCategories)
-- 实现产品和分类的多对多关系
-- 迷惑项表名与Products、Categories相似
-- 特点:支持产品属于多个分类,设置主分类
-- =====================================================
CREATE TABLE ProductCategories (
product_id INT NOT NULL,
category_id INT NOT NULL,
is_primary TINYINT DEFAULT 0 COMMENT '1=主分类, 0=副分类',
added_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (product_id, category_id),
FOREIGN KEY (product_id) REFERENCES Products(product_id) ON DELETE CASCADE,
FOREIGN KEY (category_id) REFERENCES Categories(category_id) ON DELETE CASCADE,
INDEX idx_category_id (category_id),
INDEX idx_is_primary (is_primary)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 5. 订单表 (Orders)
-- 存储订单信息
-- 迷惑项order_id、order_date、order_status
-- 含义相近字段total_amount
-- =====================================================
CREATE TABLE Orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_number VARCHAR(30) NOT NULL UNIQUE COMMENT '订单编号',
user_id INT NOT NULL,
order_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
total_amount DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
discount_amount DECIMAL(10,2) DEFAULT 0 COMMENT '折扣金额',
shipping_fee DECIMAL(10,2) DEFAULT 0 COMMENT '运费',
payment_method VARCHAR(30) COMMENT '支付方式',
payment_status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/paid/failed/refunded',
order_status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/confirmshipped/delivered/cancelled/completed',
shipping_addr_id INT,
billing_addr_id INT,
shipping_addr VARCHAR(500) COMMENT '收货地址快照',
billing_addr VARCHAR(500) COMMENT '账单地址快照',
customer_remark VARCHAR(500),
internal_remark VARCHAR(500),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE RESTRICT,
INDEX idx_order_number (order_number),
INDEX idx_user_id (user_id),
INDEX idx_order_date (order_date),
INDEX idx_order_status (order_status),
INDEX idx_payment_status (payment_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 6. 订单详情表 (OrderItems)
-- 存储订单中每个产品的详细信息
-- 迷惑项order_item_id、order_id
-- 含义相近字段item_price vs priceitem_total vs total_amount
-- =====================================================
CREATE TABLE OrderItems (
order_item_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
item_price DECIMAL(10,2) NOT NULL COMMENT '下单时的产品单价',
item_cost DECIMAL(10,2) COMMENT '成本单价',
item_discount DECIMAL(10,2) DEFAULT 0 COMMENT '该项折扣',
item_total DECIMAL(10,2) NOT NULL COMMENT '该项总金额',
item_status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/shipped/delivered/returned',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES Orders(order_id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES Products(product_id) ON DELETE RESTRICT,
INDEX idx_order_id (order_id),
INDEX idx_product_id (product_id),
INDEX idx_item_status (item_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 7. 地址表 (Addresses)
-- 存储用户的多个地址
-- 迷惑项address_id、address_line1、address_line2
-- 一对多关系:一个用户有多个地址
-- =====================================================
CREATE TABLE Addresses (
address_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
address_label VARCHAR(50) COMMENT '地址标签,如:家、公司',
recipient_name VARCHAR(100) NOT NULL,
recipient_phone VARCHAR(20) NOT NULL,
country VARCHAR(50) DEFAULT '中国',
province VARCHAR(50),
city VARCHAR(50) NOT NULL,
district VARCHAR(50),
address_line1 VARCHAR(200) NOT NULL,
address_line2 VARCHAR(200),
postal_code VARCHAR(20),
address_type VARCHAR(20) DEFAULT 'shipping' COMMENT 'shipping/billing/both',
is_default TINYINT DEFAULT 0,
is_active TINYINT DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_address_type (address_type),
INDEX idx_is_default (is_default),
INDEX idx_city (city)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 8. 评论表 (Reviews)
-- 存储用户对产品的评论
-- 迷惑项review_id、review_text、review_date
-- 多对一关系:评论关联用户和产品
-- =====================================================
CREATE TABLE Reviews (
review_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
order_id INT COMMENT '订单ID可选',
rating TINYINT NOT NULL CHECK (rating >= 1 AND rating <= 5),
review_title VARCHAR(100),
review_text TEXT,
is_anonymous TINYINT DEFAULT 0,
is_verified TINYINT DEFAULT 0 COMMENT '是否购买后评论',
helpful_count INT DEFAULT 0,
reply_count INT DEFAULT 0,
review_status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/approved/rejected',
review_date DATETIME DEFAULT CURRENT_TIMESTAMP,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES Products(product_id) ON DELETE CASCADE,
FOREIGN KEY (order_id) REFERENCES Orders(order_id) ON DELETE SET NULL,
INDEX idx_user_id (user_id),
INDEX idx_product_id (product_id),
INDEX idx_rating (rating),
INDEX idx_review_status (review_status),
INDEX idx_review_date (review_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 9. 购物车表 (CartItems)
-- 存储用户当前购物车中的商品
-- 迷惑项cart_id、product_id、quantity
-- =====================================================
CREATE TABLE CartItems (
cart_item_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL DEFAULT 1,
added_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES Products(product_id) ON DELETE CASCADE,
UNIQUE KEY uk_user_product (user_id, product_id),
INDEX idx_user_id (user_id),
INDEX idx_product_id (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 10. 产品浏览历史表 (ProductViews)
-- 存储用户的浏览历史
-- 迷惑项view_id、product_id、view_date
-- =====================================================
CREATE TABLE ProductViews (
view_id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
product_id INT NOT NULL,
view_date DATETIME DEFAULT CURRENT_TIMESTAMP,
session_id VARCHAR(100),
view_duration INT DEFAULT 0 COMMENT '浏览时长(秒)',
source_type VARCHAR(30) COMMENT '来源search/category/recommend/direct',
FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE SET NULL,
FOREIGN KEY (product_id) REFERENCES Products(product_id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_product_id (product_id),
INDEX idx_view_date (view_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 11. 优惠券表 (Coupons)
-- 存储优惠券信息
-- 迷惑项coupon_id、coupon_code、coupon_type
-- =====================================================
CREATE TABLE Coupons (
coupon_id INT AUTO_INCREMENT PRIMARY KEY,
coupon_code VARCHAR(30) NOT NULL UNIQUE,
coupon_name VARCHAR(100) NOT NULL,
coupon_desc VARCHAR(255),
coupon_type VARCHAR(20) DEFAULT 'percentage' COMMENT 'percentage/fixed',
discount_value DECIMAL(10,2) NOT NULL COMMENT '折扣值(百分比或固定金额)',
min_order_amount DECIMAL(10,2) DEFAULT 0,
max_discount_amount DECIMAL(10,2) COMMENT '最大折扣金额',
usage_limit INT COMMENT '总使用次数限制',
usage_limit_per_user INT DEFAULT 1,
usage_count INT DEFAULT 0,
valid_from DATETIME NOT NULL,
valid_until DATETIME NOT NULL,
is_active TINYINT DEFAULT 1,
applicable_product_ids TEXT COMMENT '适用的产品ID列表JSON格式',
applicable_category_ids TEXT COMMENT '适用的分类ID列表JSON格式',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_coupon_code (coupon_code),
INDEX idx_valid_dates (valid_from, valid_until),
INDEX idx_is_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 12. 用户优惠券关联表 (UserCoupons)
-- 存储用户领取的优惠券
-- 迷惑项user_coupon_id、user_id、coupon_id
-- =====================================================
CREATE TABLE UserCoupons (
user_coupon_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
coupon_id INT NOT NULL,
status VARCHAR(20) DEFAULT 'available' COMMENT 'available/used/expired',
received_at DATETIME DEFAULT CURRENT_TIMESTAMP,
used_at DATETIME,
order_id INT,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
FOREIGN KEY (coupon_id) REFERENCES Coupons(coupon_id) ON DELETE CASCADE,
FOREIGN KEY (order_id) REFERENCES Orders(order_id) ON DELETE SET NULL,
INDEX idx_user_id (user_id),
INDEX idx_coupon_id (coupon_id),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 13. 产品收藏表 (Wishlists)
-- 存储用户收藏的产品
-- 迷惑项wishlist_id、product_id、user_id
-- =====================================================
CREATE TABLE Wishlists (
wishlist_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
added_at DATETIME DEFAULT CURRENT_TIMESTAMP,
note VARCHAR(255),
priority INT DEFAULT 0 COMMENT '优先级排序',
FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES Products(product_id) ON DELETE CASCADE,
UNIQUE KEY uk_user_product (user_id, product_id),
INDEX idx_user_id (user_id),
INDEX idx_product_id (product_id),
INDEX idx_added_at (added_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 14. 支付记录表 (Payments)
-- 存储订单支付信息
-- 迷惑项payment_id、order_id、payment_amount
-- =====================================================
CREATE TABLE Payments (
payment_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
payment_method VARCHAR(30) NOT NULL,
payment_amount DECIMAL(10,2) NOT NULL,
transaction_id VARCHAR(100) UNIQUE,
payment_status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/success/failed/refunded',
payment_date DATETIME,
refund_amount DECIMAL(10,2) DEFAULT 0,
refund_reason VARCHAR(255),
gateway_response TEXT COMMENT '支付网关响应',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES Orders(order_id) ON DELETE RESTRICT,
INDEX idx_order_id (order_id),
INDEX idx_transaction_id (transaction_id),
INDEX idx_payment_status (payment_status),
INDEX idx_payment_date (payment_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 15. 管理员表 (Admins)
-- 存储管理员信息
-- 迷惑项admin_id、admin_email、admin_role
-- =====================================================
CREATE TABLE Admins (
admin_id INT AUTO_INCREMENT PRIMARY KEY,
admin_email VARCHAR(100) NOT NULL UNIQUE,
admin_name VARCHAR(50) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
admin_role VARCHAR(30) DEFAULT 'staff' COMMENT 'super_admin/admin/staff',
is_active TINYINT DEFAULT 1,
last_login DATETIME,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_admin_email (admin_email),
INDEX idx_admin_role (admin_role)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- =====================================================
-- 添加外键约束到Orders表的shipping_addr_id和billing_addr_id
-- =====================================================
ALTER TABLE Orders
ADD CONSTRAINT fk_orders_shipping_addr
FOREIGN KEY (shipping_addr_id) REFERENCES Addresses(address_id) ON DELETE SET NULL;
ALTER TABLE Orders
ADD CONSTRAINT fk_orders_billing_addr
FOREIGN KEY (billing_addr_id) REFERENCES Addresses(address_id) ON DELETE SET NULL;
-- =====================================================
-- 插入测试数据
-- =====================================================
-- 插入分类数据(树形结构)
INSERT INTO Categories (category_id, category_name, category_desc, parent_id, category_order) VALUES
(1, '电子产品', '手机、电脑、相机等电子设备', NULL, 1),
(2, '服装', '男装、女装、童装等', NULL, 2),
(3, '家居用品', '家具、厨具、床上用品等', NULL, 3),
(4, '食品', '零食、饮料、生鲜等', NULL, 4),
(5, '手机', '智能手机', 1, 1),
(6, '笔记本电脑', '笔记本、台式机', 1, 2),
(7, '相机', '数码相机、摄像机', 1, 3),
(8, '男装', '男性服装', 2, 1),
(9, '女装', '女性服装', 2, 2),
(10, '智能手机', '高端智能手机', 5, 1),
(11, '功能手机', '老年机、备用机', 5, 2);
-- 插入用户数据
INSERT INTO Users (user_id, username, user_email, password_hash, full_name, phone, user_status) VALUES
(1, 'zhangsan', 'zhangsan@example.com', 'hash_abc123', '张三', '13800138001', 1),
(2, 'lisi', 'lisi@example.com', 'hash_def456', '李四', '13800138002', 1),
(3, 'wangwu', 'wangwu@example.com', 'hash_ghi789', '王五', '13800138003', 1),
(4, 'zhaoliu', 'zhaoliu@example.com', 'hash_jkl012', '赵六', '13800138004', 0),
(5, 'qianqi', 'qianqi@example.com', 'hash_mno345', '钱七', '13800138005', 1),
(6, 'sunba', 'sunba@example.com', 'hash_pqr678', '孙八', '13800138006', 1),
(7, 'zhoujiu', 'zhoujiu@example.com', 'hash_stu901', '周九', '13800138007', 1),
(8, 'wushiyi', 'wushiyi@example.com', 'hash_vwx234', '吴十', '13800138008', 1),
(9, 'zhengshier', 'zhengshier@example.com', 'hash_yza567', '郑十二', '13800138009', 1),
(10, 'xushisan', 'xushisan@example.com', 'hash_bcd890', '徐十三', '13800138010', 1);
-- 插入产品数据
INSERT INTO Products (product_id, product_name, product_desc, price, cost_price, stock_quantity, category_id, brand, product_status) VALUES
(1, 'iPhone 15 Pro Max', '苹果最新旗舰手机A17 Pro芯片钛金属机身', 9999.00, 6500.00, 100, 10, 'Apple', 1),
(2, 'Samsung Galaxy S24 Ultra', '三星Galaxy S24 Ultra钛金属机身AI功能', 8999.00, 5800.00, 80, 10, 'Samsung', 1),
(3, 'MacBook Pro 16', '苹果MacBook Pro 16英寸M3 Max芯片', 24999.00, 18000.00, 50, 6, 'Apple', 1),
(4, 'Dell XPS 15', '戴尔XPS 15笔记本电脑英特尔酷睿i7', 12999.00, 9500.00, 60, 6, 'Dell', 1),
(5, 'Sony A7 IV', '索尼A7 IV全画幅微单相机3300万像素', 16999.00, 12000.00, 30, 7, 'Sony', 1),
(6, 'Canon R6 Mark II', '佳能R6 Mark II全画幅微单相机', 15999.00, 11500.00, 25, 7, 'Canon', 1),
(7, 'Nike Air Jordan 1', '耐克Air Jordan 1经典篮球鞋', 1299.00, 650.00, 200, 8, 'Nike', 1),
(8, 'Adidas Ultraboost', '阿迪达斯Ultraboost跑鞋', 1099.00, 550.00, 150, 8, 'Adidas', 1),
(9, 'Zara女士连衣裙', 'Zara时尚女士连衣裙2024新款', 599.00, 200.00, 300, 9, 'Zara', 1),
(10, 'H&M半身裙', 'H&M时尚半身裙百搭款', 299.00, 100.00, 400, 9, 'H&M', 1),
(11, 'IKEA双人床', '宜家马尔姆双人床,简约风格', 2999.00, 1800.00, 20, 3, 'IKEA', 1),
(12, '美的微波炉', '美的M1-L213B微波炉21L容量', 499.00, 280.00, 100, 3, '美的', 1),
(13, '三只松鼠坚果大礼包', '三只松鼠坚果礼盒2103g', 128.00, 55.00, 500, 4, '三只松鼠', 1),
(14, '可口可乐330ml*24罐', '可口可乐经典装24罐装', 59.90, 35.00, 1000, 4, '可口可乐', 1),
(15, '老干妈辣椒酱', '老干妈风味豆豉油辣椒酱280g', 12.90, 5.00, 2000, 4, '老干妈', 1);
-- 插入产品-分类关联数据
INSERT INTO ProductCategories (product_id, category_id, is_primary) VALUES
(1, 5, 1), (1, 10, 1),
(2, 5, 1), (2, 10, 1),
(3, 6, 1),
(4, 6, 1),
(5, 7, 1),
(6, 7, 1),
(7, 8, 1),
(8, 8, 1),
(9, 9, 1),
(10, 9, 1),
(11, 3, 1),
(12, 3, 1),
(13, 4, 1),
(14, 4, 1),
(15, 4, 1);
-- 插入地址数据
INSERT INTO Addresses (address_id, user_id, address_label, recipient_name, recipient_phone, province, city, district, address_line1, postal_code, address_type, is_default) VALUES
(1, 1, '家', '张三', '13800138001', '北京', '北京市', '朝阳区', '建国路100号', '100000', 'shipping', 1),
(2, 1, '公司', '张三', '13800138001', '北京', '北京市', '海淀区', '中关村大街1号', '100080', 'shipping', 0),
(3, 2, '默认地址', '李四', '13800138002', '上海', '上海市', '浦东新区', '陆家嘴环路1000号', '200120', 'both', 1),
(4, 3, '家', '王五', '13800138003', '广东', '深圳市', '南山区', '科技园路100号', '518000', 'shipping', 1),
(5, 4, '地址1', '赵六', '13800138004', '浙江', '杭州市', '西湖区', '文三路100号', '310000', 'shipping', 1),
(6, 5, '家', '钱七', '13800138005', '江苏', '南京市', '鼓楼区', '中山北路100号', '210000', 'shipping', 1);
-- 插入订单数据
INSERT INTO Orders (order_id, order_number, user_id, total_amount, discount_amount, shipping_fee, payment_status, order_status, shipping_addr_id, billing_addr_id, shipping_addr, customer_remark) VALUES
(1, 'ORD202401010001', 1, 10998.00, 0.00, 0.00, 'paid', 'delivered', 1, 1, '北京市朝阳区建国路100号', '请尽快发货'),
(2, 'ORD202401020001', 1, 25998.00, 500.00, 0.00, 'paid', 'shipped', 2, 2, '北京市海淀区中关村大街1号', '工作日收货'),
(3, 'ORD202401030001', 2, 17998.00, 0.00, 15.00, 'paid', 'pending', 3, 3, '上海市浦东新区陆家嘴环路1000号', ''),
(4, 'ORD202401040001', 3, 32998.00, 1000.00, 0.00, 'paid', 'completed', 4, 4, '广东省深圳市南山区科技园路100号', '包装仔细一些'),
(5, 'ORD202401050001', 5, 258.90, 20.00, 0.00, 'paid', 'pending', 6, 6, '江苏省南京市鼓楼区中山北路100号', ''),
(6, 'ORD202401060001', 2, 1398.00, 0.00, 10.00, 'pending', 'pending', 3, 3, '上海市浦东新区陆家嘴环路1000号', ''),
(7, 'ORD202401070001', 7, 8999.00, 899.00, 0.00, 'paid', 'shipped', NULL, NULL, '四川省成都市武侯区天府大道100号', '生日礼物'),
(8, 'ORD202401080001', 1, 541.80, 0.00, 8.00, 'paid', 'delivered', 1, 1, '北京市朝阳区建国路100号', ''),
(9, 'ORD202401090001', 8, 16999.00, 0.00, 0.00, 'paid', 'delivered', NULL, NULL, '湖北省武汉市洪山区珞珈山路100号', ''),
(10, 'ORD202401100001', 9, 128.00, 10.00, 0.00, 'paid', 'pending', NULL, NULL, '湖南省长沙市岳麓区麓山南路100号', '');
-- 插入订单详情数据
INSERT INTO OrderItems (order_item_id, order_id, product_id, quantity, item_price, item_cost, item_total, item_status) VALUES
(1, 1, 1, 1, 9999.00, 6500.00, 9999.00, 'delivered'),
(2, 1, 14, 24, 59.90, 35.00, 1437.60, 'delivered'),
(3, 2, 3, 1, 24999.00, 18000.00, 24999.00, 'shipped'),
(4, 2, 15, 7, 12.90, 5.00, 90.30, 'shipped'),
(5, 3, 2, 2, 8999.00, 5800.00, 17998.00, 'pending'),
(6, 4, 5, 1, 16999.00, 12000.00, 16999.00, 'delivered'),
(7, 4, 6, 1, 15999.00, 11500.00, 15999.00, 'delivered'),
(8, 5, 9, 1, 599.00, 200.00, 599.00, 'pending'),
(9, 5, 10, 2, 299.00, 100.00, 598.00, 'pending'),
(10, 6, 7, 1, 1299.00, 650.00, 1299.00, 'pending'),
(11, 7, 2, 1, 8999.00, 5800.00, 8999.00, 'shipped'),
(12, 8, 11, 1, 2999.00, 1800.00, 2999.00, 'delivered'),
(13, 8, 12, 1, 499.00, 280.00, 499.00, 'delivered'),
(14, 8, 13, 1, 128.00, 55.00, 128.00, 'delivered'),
(15, 9, 6, 1, 15999.00, 11500.00, 15999.00, 'delivered'),
(16, 10, 13, 1, 128.00, 55.00, 128.00, 'pending');
-- 插入评论数据
INSERT INTO Reviews (review_id, user_id, product_id, order_id, rating, review_title, review_text, is_verified, review_status) VALUES
(1, 1, 1, 1, 5, '非常满意', '手机质感很好,拍照效果出色,电池续航也比之前的手机好很多。', 1, 'approved'),
(2, 2, 2, 3, 4, '不错', '系统流畅,屏幕显示效果好,但是价格有点贵。', 1, 'approved'),
(3, 3, 5, 4, 5, '专业级相机', '对焦速度快,高感光度表现优秀,非常适合专业摄影。', 1, 'approved'),
(4, 1, 3, 2, 5, '性能怪兽', 'M3 Max芯片性能太强了编译代码速度飞快。', 1, 'approved'),
(5, 4, 7, NULL, 3, '一般', '鞋子样式不错,但是鞋底偏硬,走路久了脚疼。', 0, 'approved'),
(6, 5, 9, 5, 4, '好看', '穿上身效果很好,面料也很舒服,推荐购买。', 1, 'approved'),
(7, 6, 11, NULL, 5, '安装方便', '床很结实,安装也很简单,一个人就能搞定。', 0, 'approved'),
(8, 7, 14, 7, 5, '全家喜欢', '家里常备的可乐,味道正宗,价格实惠。', 1, 'approved'),
(9, 8, 6, 9, 4, '功能强大', '相机很好用,但是菜单操作有点复杂,需要时间学习。', 1, 'approved'),
(10, 9, 13, 10, 5, '坚果新鲜', '坚果很新鲜,种类多,口感好,已经复购好几次了。', 1, 'approved'),
(11, 2, 15, NULL, 4, '下饭神器', '辣椒酱味道很好,用来拌饭很香。', 0, 'approved'),
(12, 1, 14, 1, 5, '实惠', '比超市便宜很多,一箱能喝很久。', 1, 'approved');
-- 插入购物车数据
INSERT INTO CartItems (user_id, product_id, quantity, added_at) VALUES
(1, 2, 1, '2024-01-10 10:00:00'),
(1, 5, 1, '2024-01-10 10:05:00'),
(2, 3, 1, '2024-01-10 11:00:00'),
(2, 7, 2, '2024-01-10 11:10:00'),
(3, 1, 1, '2024-01-10 12:00:00'),
(4, 8, 1, '2024-01-10 13:00:00'),
(5, 9, 2, '2024-01-10 14:00:00'),
(6, 10, 1, '2024-01-10 15:00:00'),
(7, 11, 1, '2024-01-10 16:00:00'),
(8, 12, 2, '2024-01-10 17:00:00');
-- 插入优惠券数据
INSERT INTO Coupons (coupon_id, coupon_code, coupon_name, coupon_desc, coupon_type, discount_value, min_order_amount, max_discount_amount, usage_limit, valid_from, valid_until, is_active) VALUES
(1, 'NEWUSER10', '新用户专享10%off', '新用户首单立享10%折扣', 'percentage', 10.00, 100.00, 500.00, 10000, '2024-01-01', '2024-12-31', 1),
(2, 'SAVE50', '满500减50', '订单满500元减50元', 'fixed', 50.00, 500.00, NULL, NULL, '2024-01-01', '2024-12-31', 1),
(3, 'VIP20', 'VIP会员20%off', 'VIP会员享20%折扣', 'percentage', 20.00, 200.00, 1000.00, 5000, '2024-01-01', '2024-12-31', 1),
(4, 'FREESHIP', '免运费券', '订单免运费', 'fixed', 0.00, 0.00, NULL, NULL, '2024-01-01', '2024-12-31', 1),
(5, 'SUPER100', '超级满减100', '满1000减100', 'fixed', 100.00, 1000.00, NULL, 1000, '2024-01-01', '2024-06-30', 1),
(6, 'EXPIRED50', '已过期优惠券', '测试用过期优惠券', 'fixed', 50.00, 200.00, NULL, NULL, '2023-01-01', '2023-12-31', 1);
-- 插入用户优惠券数据
INSERT INTO UserCoupons (user_id, coupon_id, status, used_at, order_id) VALUES
(1, 1, 'used', '2024-01-01 10:00:00', 1),
(1, 2, 'available', NULL, NULL),
(1, 3, 'available', NULL, NULL),
(2, 1, 'used', '2024-01-03 10:00:00', 3),
(2, 4, 'available', NULL, NULL),
(3, 2, 'available', NULL, NULL),
(4, 1, 'available', NULL, NULL),
(5, 5, 'used', '2024-01-05 10:00:00', 5),
(6, 3, 'available', NULL, NULL),
(7, 4, 'used', '2024-01-07 10:00:00', 7);
-- 插入收藏数据
INSERT INTO Wishlists (user_id, product_id, added_at, note, priority) VALUES
(1, 6, '2024-01-05 10:00:00', '等降价再买', 1),
(1, 8, '2024-01-06 10:00:00', NULL, 2),
(2, 3, '2024-01-05 11:00:00', '想要', 1),
(2, 4, '2024-01-06 11:00:00', '备选', 2),
(3, 1, '2024-01-05 12:00:00', '送给女朋友', 1),
(4, 9, '2024-01-05 13:00:00', NULL, 1),
(5, 11, '2024-01-05 14:00:00', '搬家时买', 1),
(6, 13, '2024-01-05 15:00:00', NULL, 1);
-- 插入支付记录数据
INSERT INTO Payments (order_id, payment_method, payment_amount, transaction_id, payment_status, payment_date) VALUES
(1, 'alipay', 10998.00, 'TXN202401010001', 'success', '2024-01-01 10:05:00'),
(2, 'wechat', 25998.00, 'TXN202401020001', 'success', '2024-01-02 10:05:00'),
(3, 'alipay', 17998.00, 'TXN202401030001', 'success', '2024-01-03 10:05:00'),
(4, 'credit_card', 32998.00, 'TXN202401040001', 'success', '2024-01-04 10:05:00'),
(5, 'wechat', 258.90, 'TXN202401050001', 'success', '2024-01-05 10:05:00'),
(7, 'alipay', 8999.00, 'TXN202401070001', 'success', '2024-01-07 10:05:00'),
(8, 'wechat', 541.80, 'TXN202401080001', 'success', '2024-01-08 10:05:00'),
(9, 'credit_card', 16999.00, 'TXN202401090001', 'success', '2024-01-09 10:05:00'),
(10, 'alipay', 128.00, 'TXN202401100001', 'success', '2024-01-10 10:05:00');
-- 插入管理员数据
INSERT INTO Admins (admin_id, admin_email, admin_name, password_hash, admin_role) VALUES
(1, 'admin@example.com', '超级管理员', 'hash_superadmin', 'super_admin'),
(2, 'manager@example.com', '运营经理', 'hash_manager', 'admin'),
(3, 'staff@example.com', '客服人员', 'hash_staff', 'staff'),
(4, 'finance@example.com', '财务人员', 'hash_finance', 'admin');
-- 插入产品浏览历史数据
INSERT INTO ProductViews (user_id, product_id, view_date, session_id, view_duration, source_type) VALUES
(1, 1, '2024-01-01 09:00:00', 'SES001', 120, 'search'),
(1, 2, '2024-01-01 09:05:00', 'SES001', 90, 'category'),
(1, 3, '2024-01-02 10:00:00', 'SES002', 180, 'recommend'),
(2, 1, '2024-01-03 11:00:00', 'SES003', 60, 'search'),
(2, 5, '2024-01-03 11:10:00', 'SES003', 240, 'direct'),
(3, 6, '2024-01-04 12:00:00', 'SES004', 300, 'search'),
(4, 7, '2024-01-05 13:00:00', 'SES005', 45, 'category'),
(5, 9, '2024-01-06 14:00:00', 'SES006', 120, 'search'),
(6, 11, '2024-01-07 15:00:00', 'SES007', 90, 'recommend'),
(7, 13, '2024-01-08 16:00:00', 'SES008', 30, 'direct');
-- =====================================================
-- 验证数据完整性
-- =====================================================
-- 查看所有表
SHOW TABLES;
-- 查看表结构示例
-- DESCRIBE Users;
-- DESCRIBE Orders;
-- DESCRIBE OrderItems;
-- 测试查询示例
-- SELECT u.username, COUNT(o.order_id) as order_count
-- FROM Users u LEFT JOIN Orders o ON u.user_id = o.user_id
-- GROUP BY u.user_id;
-- SELECT p.product_name, AVG(r.rating) as avg_rating
-- FROM Products p LEFT JOIN Reviews r ON p.product_id = r.product_id
-- GROUP BY p.product_id;
-- SELECT c.category_name, COUNT(p.product_id) as product_count
-- FROM Categories c LEFT JOIN ProductCategories pc ON c.category_id = pc.category_id
-- LEFT JOIN Products p ON pc.product_id = p.product_id
-- GROUP BY c.category_id;
```
## SQL文件说明
### 包含内容
| 组成部分 | 说明 |
|---------|------|
| **15张表** | Users、Categories、Products、ProductCategories、Orders、OrderItems、Addresses、Reviews、CartItems、ProductViews、Coupons、UserCoupons、Wishlists、Payments、Admins |
| **复杂关联** | 一对多、多对多、自关联 |
| **约束** | 主键、外键、UNIQUE、CHECK、DEFAULT |
| **索引** | 常用查询字段均建立索引 |
| **测试数据** | 每张表都包含实际数据 |
| **迷惑项** | 按设计要求保留相似字段名、相近表名 |
### 表关联关系图
```
Users (1) ----< (N) Orders (1) ----< (N) OrderItems (N) >---- (1) Products
| | |
| | |
+-----< (N) Addresses +-----< (N) Payments +-----< (N) Reviews
| |
+-----< (N) Reviews |
| |
+-----< (N) CartItems +-----< (N) ProductViews
| |
+-----< (N) UserCoupons +----< (N) Coupons +-----< (N) Wishlists
|
+-----< (N) ProductCategories
|
Categories (1) ---------------------------------------------------+
|
+--< (N) Categories (自关联)
```
### 使用方法
```bash
# 在MySQL中执行
mysql -u username -p < test_ecommerce_db.sql
# 或在MySQL客户端中执行
source /path/to/test_ecommerce_db.sql
```
此SQL文件可直接在MySQL 8.0+环境中执行,包含完整的表结构、约束、索引和测试数据。