精选高频数据库表结构设计模板,覆盖用户、订单、商品、购物车等场景,SQL 可直接复制到 MySQL / PostgreSQL 使用
数据库表设计是每个后端开发的起点,但很多开发者(尤其是前端转全栈、独立开发者)在设计表结构时会踩坑——漏字段、数据类型选错、索引设计不合理。这套数据库表模板大全整理了电商、社交、管理后台等常见场景中最高频使用的表结构,直接参考或复制即可。
💡 所有模板都在 YesApi 平台的实战项目中验证过,字段设计考虑了扩展性和性能优化。
最基础也是最核心的表,几乎每个项目第一个要建的表。
CREATE TABLE `user` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID', `username` VARCHAR(50) NOT NULL COMMENT '用户名', `password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希', `phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号', `email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱', `avatar` VARCHAR(500) DEFAULT NULL COMMENT '头像URL', `nickname` VARCHAR(50) DEFAULT NULL COMMENT '昵称', `gender` TINYINT DEFAULT 0 COMMENT '性别 0未知 1男 2女', `birthday` DATE DEFAULT NULL COMMENT '生日', `status` TINYINT DEFAULT 1 COMMENT '状态 1正常 0禁用', `last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间', `last_login_ip` VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`), UNIQUE KEY `uk_phone` (`phone`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
电商/支付类项目必备,注意分表策略(可按用户ID或时间分表)。
CREATE TABLE `order` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '订单ID', `order_no` VARCHAR(32) NOT NULL COMMENT '订单号', `user_id` INT UNSIGNED NOT NULL COMMENT '用户ID', `total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额', `pay_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额', `discount_amount` DECIMAL(10,2) DEFAULT 0 COMMENT '优惠金额', `status` TINYINT DEFAULT 0 COMMENT '0待付款 1已付款 2已发货 3已完成 4已取消 5退款中 6已退款', `pay_type` VARCHAR(20) DEFAULT NULL COMMENT '支付方式 alipay/wxpay', `pay_time` DATETIME DEFAULT NULL COMMENT '付款时间', `delivery_time` DATETIME DEFAULT NULL COMMENT '发货时间', `receiver_name` VARCHAR(50) DEFAULT NULL COMMENT '收货人', `receiver_phone` VARCHAR(20) DEFAULT NULL COMMENT '收货电话', `receiver_address` VARCHAR(500) DEFAULT NULL COMMENT '收货地址', `remark` VARCHAR(500) DEFAULT NULL COMMENT '用户备注', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_order_no` (`order_no`), KEY `idx_user_id` (`user_id`), KEY `idx_status` (`status`), KEY `idx_created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
CREATE TABLE `product` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(200) NOT NULL COMMENT '商品名称', `category_id` INT UNSIGNED DEFAULT NULL COMMENT '分类ID', `price` DECIMAL(10,2) NOT NULL COMMENT '售价', `original_price` DECIMAL(10,2) DEFAULT NULL COMMENT '原价', `stock` INT DEFAULT 0 COMMENT '库存', `sales` INT DEFAULT 0 COMMENT '销量', `cover_image` VARCHAR(500) DEFAULT NULL COMMENT '封面图', `images` TEXT COMMENT '详情图JSON数组', `description` TEXT COMMENT '商品描述', `detail` MEDIUMTEXT COMMENT '商品详情(富文本)', `is_on_sale` TINYINT DEFAULT 1 COMMENT '是否上架 1是 0否', `sort` INT DEFAULT 0 COMMENT '排序', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_category` (`category_id`), KEY `idx_on_sale` (`is_on_sale`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
| 模板名称 | 核心字段 | 适用场景 |
|---|---|---|
| 购物车表 (cart) | user_id, product_id, quantity, selected | 电商App/小程序 |
| 收货地址表 (address) | user_id, name, phone, province, city, detail, is_default | 电商/配送类应用 |
| 字典表 (dict) | code, name, parent_id, value, sort | 任何需要下拉选项的系统 |
| 发票信息表 (invoice) | user_id, title, tax_no, type, email | 企业采购/开票系统 |
| 签到记录表 (sign_in) | user_id, sign_date, points, continuous_days | 积分/会员系统 |
| 文件上传表 (file) | user_id, filename, path, size, mime_type | 任何需要文件管理的系统 |
| 微信用户表 (wx_user) | openid, unionid, nickname, avatar, session_key | 微信小程序/公众号 |
| 多级字典表 (region) | id, name, parent_id, level, code | 省市联动、组织架构 |
每个字段必须加 COMMENT,否则三个月后连你自己都不知道这个字段干什么用。
除非有特殊需求,不要用UUID做主键——索引碎片化严重,查询性能差。
WHERE条件里经常用的字段(status, user_id, created_at)一定要加索引。
千万不要用 FLOAT/DOUBLE 存储金额,精度丢失会让你赔钱。
从第一天就用 utf8mb4 字符集,避免后期emoji和生僻字存储问题。
每张表统一保留 created_at / updated_at,方便数据追踪和审计。
如果你不想手写 SQL,可以直接在 YesApi 平台通过可视化界面创建数据表,系统自动生成 API 接口。支持从模板快速安装、字段拖拽配置,还有内置的数据库表模板可以一键导入。
🚀 免费注册 YesApi,直接使用数据库模板功能,免写SQL建表,自动生成增删改查API。
可以。这些模板在 YesApi 平台的多个生产项目中验证过,字段类型、索引设计都考虑到了实际性能需求。建议根据你的业务场景微调字段。
主要语法是 MySQL 的,但核心表结构设计思想通用。转到 PostgreSQL 只需将 AUTO_INCREMENT 改为 SERIAL、TINYINT 改为 SMALLINT 即可。
可以直接复制上面的 DDL SQL 在 Navicat、DBeaver 等数据库管理工具中执行,也可以在 YesApi 平台通过可视化建表功能一键创建。
电商完整数据库涉及20+张表,包括用户、商品、订单、购物车、支付、物流、评价等。YesApi 平台提供电商模板可直接安装使用。
免费注册,5分钟建好数据表,自动生成增删改查 API 接口
开始免费建表 →