682 lines
33 KiB
Markdown
682 lines
33 KiB
Markdown
# 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 price,item_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+环境中执行,包含完整的表结构、约束、索引和测试数据。 |