You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

-- 创建名为`secondhandtransactions`的数据库
CREATE DATABASE `secondhandtransactions`;
-- 使用`secondhandtransactions`数据库
USE `secondhandtransactions`;
-- 创建`role`表,用于定义系统中的角色
CREATE TABLE role
(
role_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '角色ID(主键)',
role_name VARCHAR(18) NOT NULL COMMENT '角色名称',
remark VARCHAR(128) NULL COMMENT '备注',
status TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态(0:禁用1:启用)',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
-- 插入角色数据
INSERT INTO role (role_name, remark, status)
VALUES ('管理员', '拥有平台所有管理权限,负责审核、管理用户和商品', 1),
('普通用户', '可以浏览商品、发布商品、进行交易', 1),
('配送员', '负责配送商品,完成交易,管理自己的订单', 1),
('商家', '商家可以发布商品,管理自己的商品和订单', 1);
-- 创建`users`表,用于定义系统中的用户
CREATE TABLE users
(
user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID(主键)',
head_pic_url VARCHAR(128) NULL COMMENT '头像',
nick_name VARCHAR(18) NULL COMMENT '昵称',
username VARCHAR(18) NOT NULL COMMENT '用户名',
mobile VARCHAR(15) NOT NULL COMMENT '手机号',
password VARCHAR(255) NOT NULL COMMENT '加密后的密码',
sex CHAR(1) NOT NULL COMMENT '性别(01男) ',
email VARCHAR(255) NOT NULL comment '邮箱',
address VARCHAR(70) NOT NULL COMMENT '地址',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
CONSTRAINT nick_name UNIQUE (nick_name), -- 确保昵称唯一性
CONSTRAINT username UNIQUE (username) -- 确保用户名唯一性
);
-- 创建`deliveries`表,用于定义配送员信息
CREATE TABLE deliveries
(
delivery_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '配送ID',
order_id INT NOT NULL COMMENT '订单ID外键引用 orders',
delivery_person_id INT NOT NULL COMMENT '配送员ID外键引用 users',
delivery_status ENUM ('pending', 'in_progress', 'delivered') NOT NULL DEFAULT 'pending' COMMENT '配送状态',
delivered_at TIMESTAMP NULL COMMENT '配送完成时间',
CONSTRAINT order_id_fk_delivery FOREIGN KEY (order_id) REFERENCES orders (order_id), -- 外键引用orders表
CONSTRAINT delivery_person_id_fk_delivery FOREIGN KEY (delivery_person_id) REFERENCES users (user_id) -- 外键引用users表
);
-- 创建`user_roles`关联表,用于用户和角色之间的多对多关系
CREATE TABLE user_roles
(
user_id INT NOT NULL COMMENT '用户ID(外键引用 user 表)',
role_id INT NOT NULL COMMENT '角色ID(外键引用 role 表)',
PRIMARY KEY (user_id, role_id),
CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users (user_id), -- 外键引用users表
CONSTRAINT fk_role FOREIGN KEY (role_id) REFERENCES role (role_id) -- 外键引用role表
);
INSERT INTO users (nick_name, mobile, username, password, sex, email, address)
VALUES ('user001', '13800000001', 'user001', 'password123', '1', 'user001@example.com', '中区1'),
('user002', '13800000002', 'user002', 'password456', '1', 'user002@example.com', '中区1'),
('admin', '13800000003', 'admin', 'password789', '1', 'admin@example.com', '中区1'),
('deliveries', '13800000004', 'deliveries', 'password147', '1', 'deliveries@example.com', '中区1');
# -- 将用户与普通用户角色关联
# INSERT INTO user_roles (user_id, role_id)
# VALUES (LAST_INSERT_ID(), 2);
#
# -- 将用户与商家角色关联
# INSERT INTO user_roles (user_id, role_id)
# VALUES (LAST_INSERT_ID(), 3);
-- 创建`orders`表,用于存储订单信息
CREATE TABLE orders
(
order_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单ID(主键)',
buyer_id INT NOT NULL COMMENT '买家用户ID',
item_id INT NOT NULL COMMENT '商品ID',
seller_id INT NOT NULL COMMENT '卖家用户ID',
address VARCHAR(255) NOT NULL COMMENT '收货地址',
total_amount DECIMAL(10, 2) NOT NULL COMMENT '订单总金额',
status ENUM ('pending', 'paid', 'shipped', 'completed', 'cancelled') NOT NULL DEFAULT 'pending'
COMMENT '订单状态pending-订单已创建等待支付paid-订单已支付等待发货shipped-订单已发货等待收货completed-订单已完成cancelled-订单已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '订单创建时间',
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '订单更新时间',
-- 外键约束
CONSTRAINT buyer_id_fk_orders FOREIGN KEY (buyer_id) REFERENCES users (user_id), -- 外键引用users表买家
CONSTRAINT seller_id_fk_orders FOREIGN KEY (seller_id) REFERENCES users (user_id), -- 外键引用users表卖家
CONSTRAINT item_id_fk_orders FOREIGN KEY (item_id) REFERENCES items (item_id) -- 外键引用items表
);
-- 创建`items`表,用于定义商品信息
CREATE TABLE items
(
item_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '商品ID(主键)',
user_id INT NOT NULL COMMENT '发布商品的用户ID外键引用 users',
item_name VARCHAR(255) NOT NULL COMMENT '商品名称',
description VARCHAR(500) NULL COMMENT '商品描述',
category_id INT NOT NULL COMMENT '商品类别ID外键引用 categories 表)',
price DECIMAL(10, 2) CHECK (price >= 0) NOT NULL COMMENT '商品价格',
status ENUM ('available', 'sold', 'removed') NOT NULL DEFAULT 'available'
COMMENT '商品状态available可售、sold已售出、removed已下架',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '商品创建时间',
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '商品更新时间',
-- 外键约束
CONSTRAINT user_id_fk_items FOREIGN KEY (user_id) REFERENCES users (user_id), -- 外键引用users表
CONSTRAINT category_id_fk_items FOREIGN KEY (category_id) REFERENCES item_categories (category_id) -- 外键引用item_categories表
);
-- 创建`categories`表,用于定义商品类别
CREATE TABLE item_categories
(
category_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '类别ID',
category_name VARCHAR(50) NOT NULL COMMENT '类别名称'
);
-- 创建`item_images`表,用于存储商品的图片信息
CREATE TABLE item_images
(
image_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '图片ID(主键)',
item_id INT NOT NULL COMMENT '商品ID',
image_path VARCHAR(255) NULL COMMENT '图片路径',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '图片创建时间',
-- 外键约束
CONSTRAINT item_id_fk_image FOREIGN KEY (item_id) REFERENCES items (item_id) -- 外键引用items表
);
-- 创建`item_comments`表,用于存储商品的评论信息
CREATE TABLE item_comments
(
comment_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '评论ID(主键)',
user_id INT NOT NULL COMMENT '评论用户ID',
item_id INT NOT NULL COMMENT '被评论的商品ID',
content VARCHAR(1000) NOT NULL COMMENT '评论内容',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '评论创建时间',
-- 外键约束
CONSTRAINT user_id_fk_comment FOREIGN KEY (user_id) REFERENCES users (user_id), -- 外键引用users表
CONSTRAINT item_id_fk_comment FOREIGN KEY (item_id) REFERENCES items (item_id) -- 外键引用items表
);
-- 创建`item_likes`表,用于存储商品的点赞信息
CREATE TABLE item_likes
(
like_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '点赞ID(主键)',
user_id INT NOT NULL COMMENT '点赞用户ID',
item_id INT NOT NULL COMMENT '被点赞的商品ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '点赞创建时间',
-- 外键约束
CONSTRAINT user_id_fk_like FOREIGN KEY (user_id) REFERENCES users (user_id), -- 外键引用users表
CONSTRAINT item_id_fk_like FOREIGN KEY (item_id) REFERENCES items (item_id) -- 外键引用items表
);
-- 创建`item_favorites`表,用于用户收藏的商品信息
CREATE TABLE item_favorites
(
favorite_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '收藏ID(主键)',
user_id INT NOT NULL COMMENT '用户ID外键引用 users',
item_id INT NOT NULL COMMENT '商品ID外键引用 items',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
-- 外键约束
CONSTRAINT user_id_fk_favorite FOREIGN KEY (user_id) REFERENCES users (user_id), -- 外键引用users表
CONSTRAINT item_id_fk_favorite FOREIGN KEY (item_id) REFERENCES items (item_id) -- 外键引用items表
);
-- 创建`item_offers`表,用于存储物品下架的信息
CREATE TABLE item_offers
(
offer_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '物品下架ID主键',
user_id INT NOT NULL COMMENT '用户ID外键引用 users',
item_id INT NOT NULL COMMENT '商品ID外键引用 items',
reason VARCHAR(500) NOT NULL COMMENT '下架理由',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下架时间',
-- 外键约束
CONSTRAINT user_id_fk_offer FOREIGN KEY (user_id) REFERENCES users (user_id), -- 外键引用users表
CONSTRAINT item_id_fk_offer FOREIGN KEY (item_id) REFERENCES items (item_id) -- 外键引用items表
);