上一篇
如何搭建电商案例数据库?
- 数据库
- 2025-06-11
- 4757
商城数据库需设计商品表(ID、名称、价格、库存)、用户表(ID、账号、密码、地址)、订单表(ID、用户ID、状态)及订单详情表(订单ID、商品ID、数量),核心模块包括商品管理、用户信息、订单处理、支付记录及库存跟踪,满足电商基本需求。
商城案例数据库构建指南
数据库设计核心原则
-
业务驱动设计
根据商城实际业务流确定数据结构:用户行为(浏览/收藏/购买)、商品管理(分类/库存/属性)、订单流程(创建/支付/物流)、营销体系(优惠券/活动)。 -
三范式与反范式平衡
基础表结构符合第三范式(如独立用户表、商品表),高频查询区域采用反范式优化(如订单详情表冗余商品快照)。 -
扩展性预留
关键字段预留30%扩展容量,使用JSON类型存储动态属性(如商品规格、活动规则)。
核心表结构设计(MySQL示例)
用户体系
CREATE TABLE `users` ( `user_id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(50) UNIQUE NOT NULL, `password_hash` CHAR(60) NOT NULL, -- 采用bcrypt加密 `mobile` VARCHAR(15) NOT NULL, `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_mobile (`mobile`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
商品中心
CREATE TABLE `products` ( `product_id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `category_id` INT NOT NULL, -- 关联分类表 `name` VARCHAR(200) NOT NULL, `price` DECIMAL(10,2) UNSIGNED NOT NULL, `stock` INT UNSIGNED DEFAULT 0, `specs` JSON, -- 存储规格参数 {"color":["红","蓝"],"size":["S","M"]} `is_on_sale` TINYINT(1) DEFAULT 0, FULLTEXT INDEX idx_name (`name`) -- 支持商品搜索 );
订单系统
CREATE TABLE `orders` ( `order_id` VARCHAR(20) PRIMARY KEY, -- 规则:日期+流水号 `user_id` INT UNSIGNED NOT NULL, `total_amount` DECIMAL(10,2) UNSIGNED NOT NULL, `status` TINYINT NOT NULL COMMENT '1待支付 2已支付 3已发货 4已完成', `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_user_status (`user_id`,`status`) ); -- 订单商品快照(历史数据留存) CREATE TABLE `order_items` ( `item_id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `order_id` VARCHAR(20) NOT NULL, `product_id` INT UNSIGNED NOT NULL, `product_name` VARCHAR(200) NOT NULL, -- 下单时商品名称 `price` DECIMAL(10,2) NOT NULL, -- 下单时价格 `quantity` INT UNSIGNED NOT NULL );
高性能架构策略
-
读写分离架构
graph LR A[客户端] --> B{负载均衡} B --> C[写节点-Master] B --> D[读节点-Slave1] B --> E[读节点-Slave2]
-
缓存优化方案
- Redis缓存层级:
第一层:热点数据(商品详情/瞬秒库存) 第二层:会话缓存(购物车/用户状态) 第三层:页面缓存(首页/分类页)
- 缓存击穿解决方案:互斥锁+布隆过滤器
- Redis缓存层级:
-
分库分表场景
| 表类型 | 拆分方式 | 示例场景 |
|————–|——————-|————————|
| 用户表 | user_id取模 | 千万级用户 |
| 订单表 | 按创建月份分表 | order_2025_07 |
| 商品评论表 | product_id哈希 | 高频读写分离 |
安全与合规要点
-
数据加密
- 敏感字段使用AES-256加密(银行卡/身份证号)
- 传输层采用TLS1.3协议
-
GDPR合规设计
ALTER TABLE users ADD COLUMN `data_consent` TINYINT(1) DEFAULT 0 COMMENT '隐私协议同意状态';
-
审计日志
CREATE TABLE `data_logs` ( `log_id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `user_id` INT, `action` VARCHAR(20) NOT NULL, -- UPDATE/DELETE/SELECT `table_name` VARCHAR(30) NOT NULL, `old_value` JSON, `change_time` DATETIME DEFAULT CURRENT_TIMESTAMP );
运维监控体系
-
实时监控看板
- 数据库QPS监控
- 慢查询TOP10(阈值>500ms)
- 连接池使用率预警
-
备份策略矩阵
| 备份类型 | 频率 | 保留周期 | 存储位置 |
|————|———|———-|————–|
| 全量备份 | 每日 | 30天 | 异地OSS |
| Binlog日志 | 每小时 | 7天 | 本地SSD+异地 |
| 事务日志 | 实时 | 24小时 | 本地NVMe |
引用说明:本文数据库设计参考阿里巴巴《Java开发手册》嵩山版、Oracle MySQL 8.0最佳实践指南,安全方案符合PCI DSS 3.2支付行业标准,商品JSON字段设计遵循RFC8259规范,分库分表策略采用Apache ShardingSphere实现方案。
通过结构化设计+弹性扩展能力+安全合规保障,商城数据库可支撑百万级日活业务,建议初期采用云数据库(如阿里云RDS)快速部署,随业务增长逐步引入TiDB等分布式方案。