当前位置:首页 > 行业动态 > 正文

htm商城数据库设计

设计用户、商品、订单、支付四表,关联外键,存用户信息、商品详情、订单数据及支付状态,支撑商城运转

用户模块设计

表名 字段名 类型 说明 主键/外键
users id BIGINT 用户唯一标识 PRIMARY KEY AUTO_INCREMENT
username VARCHAR(50) 用户名(唯一) UNIQUE
password_hash VARCHAR(255) 密码哈希值
email VARCHAR(100) 邮箱(唯一) UNIQUE
phone VARCHAR(20) 手机号
address VARCHAR(500) 收货地址
create_time DATETIME 注册时间
last_login_time DATETIME 最后登录时间

商品模块设计

表名 字段名 类型 说明 主键/外键
categories id BIGINT 分类唯一标识 PRIMARY KEY AUTO_INCREMENT
name VARCHAR(100) 分类名称(如“手机”) UNIQUE
parent_id BIGINT 父分类ID(支持多级分类) FOREIGN KEY REFERENCES categories(id)
products id BIGINT 商品唯一标识 PRIMARY KEY AUTO_INCREMENT
name VARCHAR(200) 商品名称
description TEXT 商品描述
price DECIMAL(10,2) 商品价格(单位:元)
stock INT 库存数量
category_id BIGINT 所属分类ID FOREIGN KEY REFERENCES categories(id)
brand VARCHAR(50) 品牌名称
image_url VARCHAR(500) 商品主图URL

订单模块设计

表名 字段名 类型 说明 主键/外键
orders id BIGINT 订单唯一标识 PRIMARY KEY AUTO_INCREMENT
user_id BIGINT 下单用户ID FOREIGN KEY REFERENCES users(id)
order_sn VARCHAR(50) 订单编号(全局唯一) UNIQUE
total_amount DECIMAL(10,2) 订单总金额
status TINYINT 订单状态(0-待支付,1-已支付,2-已发货,3-已完成,4-已取消)
create_time DATETIME 下单时间
order_items id BIGINT 订单项唯一标识 PRIMARY KEY AUTO_INCREMENT
order_id BIGINT 所属订单ID FOREIGN KEY REFERENCES orders(id)
product_id BIGINT 商品ID FOREIGN KEY REFERENCES products(id)
quantity INT 购买数量
price DECIMAL(10,2) 单价(下单时锁定)

购物车模块设计

表名 字段名 类型 说明 主键/外键
carts id BIGINT 购物车条目ID PRIMARY KEY AUTO_INCREMENT
user_id BIGINT 用户ID FOREIGN KEY REFERENCES users(id)
product_id BIGINT 商品ID FOREIGN KEY REFERENCES products(id)
quantity INT 商品数量
update_time DATETIME 最后更新时间

支付与物流模块设计

表名 字段名 类型 说明 主键/外键
payments id BIGINT 支付记录ID PRIMARY KEY AUTO_INCREMENT
order_id BIGINT 关联订单ID FOREIGN KEY REFERENCES orders(id)
payment_method TINYINT 支付方式(1-支付宝,2-微信,3-银行卡)
amount DECIMAL(10,2) 支付金额
status TINYINT 支付状态(0-未支付,1-已支付)
payment_time DATETIME 支付完成时间
logistics id BIGINT 物流记录ID PRIMARY KEY AUTO_INCREMENT
order_id BIGINT 关联订单ID FOREIGN KEY REFERENCES orders(id)
courier VARCHAR(50) 快递公司名称
tracking_no VARCHAR(50) 物流单号
status TINYINT 物流状态(0-未发货,1-已发货,2-已签收)

评价与收藏模块设计

表名 字段名 类型 说明 主键/外键
reviews id BIGINT 评价ID PRIMARY KEY AUTO_INCREMENT
user_id BIGINT 用户ID FOREIGN KEY REFERENCES users(id)
product_id BIGINT 商品ID FOREIGN KEY REFERENCES products(id)
rating TINYINT 评分(1-5星)
comment TEXT
images TEXT 评价图片(JSON数组)
create_time DATETIME 评价时间
favorites id BIGINT 收藏记录ID PRIMARY KEY AUTO_INCREMENT
user_id BIGINT 用户ID FOREIGN KEY REFERENCES users(id)
product_id BIGINT 商品ID FOREIGN KEY REFERENCES products(id)
create_time DATETIME 收藏时间

相关问题与解答

问题1:如何保证高并发场景下库存扣减的准确性?
解答

  1. 数据库层面:使用stock字段的原子更新操作(如UPDATE products SET stock = stock ? WHERE id = ? AND stock >= ?),确保库存不会被超卖。
  2. 事务控制:在订单创建和库存扣减操作中使用事务,保证两者要么同时成功,要么同时回滚。
  3. 乐观锁:在products表中增加version字段,每次更新时校验版本号,避免并发冲突。
  4. 缓存预热:将热门商品库存同步到Redis缓存,通过分布式锁控制并发更新。

问题2:订单状态流转的逻辑如何设计?
解答

  1. 状态定义:订单状态分为待支付(0)→ 已支付(1)→ 已发货(2)→ 已完成(3)→ 已取消(4)。
  2. 状态机规则
    • 待支付可转为已支付已取消
    • 已支付可转为已发货已取消
    • 已发货可转为已完成
    • 已完成已取消为终态,不可变更。
  3. 实现方式:在代码中通过枚举类定义状态,并在更新状态时校验合法性(如禁止从已发货直接跳到`
0