在电商系统中,数据库是承载核心业务逻辑和数据的关键部分。ECmall作为一个典型的电商系统,其数据库表结构设计直接影响着系统的性能、可扩展性和数据安全性。以下是ECmall数据库表结构的详解,从用户信息到订单流程,全面展示核心数据表的设计。
一、用户信息表(users)
用户信息表存储了所有注册用户的基本信息和安全认证信息。
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20),
register_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_login TIMESTAMP,
status ENUM('active', 'inactive', 'banned') NOT NULL DEFAULT 'active',
role ENUM('user', 'admin') NOT NULL DEFAULT 'user'
);
字段说明:
user_id: 用户唯一标识,自增主键。username: 用户名,用于登录。password: 加密后的密码。email: 电子邮件地址。phone: 手机号码。register_time: 注册时间。last_login: 最后登录时间。status: 用户状态,如激活、非激活、禁止等。role: 用户角色,如普通用户、管理员等。
二、地址信息表(user_addresses)
用户地址信息表用于存储用户的不同收货地址。
CREATE TABLE user_addresses (
address_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
address_name VARCHAR(50),
address_line1 VARCHAR(255) NOT NULL,
address_line2 VARCHAR(255),
city VARCHAR(50) NOT NULL,
state VARCHAR(50) NOT NULL,
zip_code VARCHAR(20) NOT NULL,
country VARCHAR(50) NOT NULL,
PRIMARY KEY (address_id),
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
字段说明:
address_id: 地址唯一标识,自增主键。user_id: 对应用户ID。address_name: 地址名称,如“家”、“公司”等。address_line1: 街道地址第一行。address_line2: 街道地址第二行(可选)。city: 城市。state: 州/省。zip_code: 邮编。country: 国家。
三、商品信息表(products)
商品信息表存储了所有在平台上销售的商品信息。
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
category_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
字段说明:
product_id: 商品唯一标识,自增主键。category_id: 商品分类ID。name: 商品名称。description: 商品描述。price: 商品价格。stock: 库存数量。created_at: 商品创建时间。
四、订单表(orders)
订单表记录了用户的所有订单信息,包括订单状态、支付状态等。
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
address_id INT NOT NULL,
total_price DECIMAL(10, 2) NOT NULL,
payment_status ENUM('pending', 'paid', 'failed') NOT NULL DEFAULT 'pending',
order_status ENUM('pending', 'shipped', 'delivered', 'cancelled') NOT NULL DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
字段说明:
order_id: 订单唯一标识,自增主键。user_id: 对应用户ID。address_id: 对应收货地址ID。total_price: 订单总价。payment_status: 支付状态。order_status: 订单状态。created_at: 订单创建时间。
五、订单详情表(order_details)
订单详情表记录了每个订单中包含的商品及其数量和价格。
CREATE TABLE order_details (
detail_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
字段说明:
detail_id: 订单详情唯一标识,自增主键。order_id: 对应订单ID。product_id: 对应商品ID。quantity: 商品数量。price: 商品单价。
六、分类表(categories)
分类表定义了商品的不同类别。
CREATE TABLE categories (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
parent_id INT,
FOREIGN KEY (parent_id) REFERENCES categories(category_id)
);
字段说明:
category_id: 分类唯一标识,自增主键。name: 分类名称。parent_id: 父分类ID,用于层级分类。
七、支付信息表(payments)
支付信息表记录了订单的支付信息。
CREATE TABLE payments (
payment_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
payment_method VARCHAR(50) NOT NULL,
transaction_id VARCHAR(255),
amount DECIMAL(10, 2) NOT NULL,
status ENUM('pending', 'success', 'failed') NOT NULL DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES orders(order_id)
);
字段说明:
payment_id: 支付唯一标识,自增主键。order_id: 对应订单ID。payment_method: 支付方式。transaction_id: 交易ID,由支付平台提供。amount: 交易金额。status: 支付状态。created_at: 支付创建时间。
通过以上核心数据表的设计,ECmall系统可以有效地管理用户信息、商品信息、订单流程以及支付信息,为用户提供稳定、高效的电商服务。在设计数据库表结构时,考虑到数据的关联性和扩展性是至关重要的,ECmall的设计在这一点上表现得尤为出色。
