| 项目 | 说明 |
|---|
| 数据库类型 | MySQL |
| 字符集 | utf8mb4 |
| 排序规则 | utf8mb4_unicode_ci |
| ORM | Django ORM |
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(15) NOT NULL COMMENT '用户名',
`password` varchar(128) NOT NULL COMMENT '密码(加密)',
`nickname` varchar(13) DEFAULT NULL COMMENT '昵称',
`gender` varchar(10) DEFAULT NULL COMMENT '性别',
`phone` varchar(11) DEFAULT NULL COMMENT '手机号',
`email` varchar(254) DEFAULT NULL COMMENT '邮箱',
`avatar` varchar(200) DEFAULT NULL COMMENT '头像',
`is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否激活',
`is_staff` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否员工',
`is_superuser` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否超管',
`last_login` datetime(6) DEFAULT NULL COMMENT '最后登录时间',
`created_at` datetime(6) NOT NULL COMMENT '创建时间',
`updated_at` datetime(6) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
| 字段 | 类型 | 说明 |
|---|
| id | bigint | 主键 |
| username | varchar(15) | 用户名,唯一 |
| password | varchar(128) | 密码(哈希加密) |
| nickname | varchar(13) | 昵称 |
| gender | varchar(10) | 性别 |
| phone | varchar(11) | 手机号 |
| email | varchar(254) | 邮箱 |
| is_active | tinyint(1) | 是否激活 |
| is_staff | tinyint(1) | 是否员工 |
CREATE TABLE `goods` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`userId_id` bigint NOT NULL COMMENT '用户ID',
`goods_name` varchar(255) NOT NULL COMMENT '商品名称',
`goods_desc` text COMMENT '商品描述',
`item_biz_type` varchar(50) DEFAULT NULL COMMENT '商品类型',
`outer_id` varchar(100) DEFAULT NULL COMMENT '商品编码',
`original_price` decimal(10,2) DEFAULT NULL COMMENT '原价',
`price` decimal(10,2) NOT NULL COMMENT '售价',
`sp_biz_type` varchar(50) DEFAULT NULL COMMENT '商品分类',
`select_category` varchar(100) DEFAULT NULL COMMENT '选择的产品ID',
`category_id` bigint DEFAULT NULL COMMENT '分类ID',
`channel_cat_id` varchar(100) DEFAULT NULL COMMENT '频道分类ID',
`channel_pv` varchar(500) DEFAULT NULL COMMENT '商品属性ID',
`status` varchar(20) NOT NULL DEFAULT 'active' COMMENT '状态',
`created_at` datetime(6) NOT NULL COMMENT '创建时间',
`updated_at` datetime(6) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `goods_userId_id` (`userId_id`),
KEY `goods_status` (`status`),
CONSTRAINT `goods_userId_fk` FOREIGN KEY (`userId_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
| 字段 | 类型 | 说明 |
|---|
| id | bigint | 主键 |
| userId_id | bigint | 用户外键 |
| goods_name | varchar(255) | 商品名称 |
| goods_desc | text | 商品描述 |
| item_biz_type | varchar(50) | 商品类型(普通/已验货/验货宝) |
| outer_id | varchar(100) | 商品编码(SKU) |
| original_price | decimal(10,2) | 原价 |
| price | decimal(10,2) | 售价 |
| sp_biz_type | varchar(50) | 商品分类 |
| status | varchar(20) | 状态(active/inactive) |
CREATE TABLE `regional` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(100) NOT NULL COMMENT '区域名称',
`code` varchar(20) NOT NULL COMMENT '区域编码',
`area_type` varchar(20) NOT NULL COMMENT '区域类型',
`p_id` bigint DEFAULT NULL COMMENT '父级ID',
`created_at` datetime(6) NOT NULL COMMENT '创建时间',
`updated_at` datetime(6) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `regional_p_id` (`p_id`),
KEY `regional_code` (`code`),
CONSTRAINT `regional_parent_fk` FOREIGN KEY (`p_id`) REFERENCES `regional` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='区域表';
| 字段 | 类型 | 说明 |
|---|
| id | bigint | 主键 |
| name | varchar(100) | 区域名称 |
| code | varchar(20) | 区域编码 |
| area_type | varchar(20) | 类型(province/city/district) |
| p_id | bigint | 父级ID(自关联) |
CREATE TABLE `publish_template` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`userId_id` bigint NOT NULL COMMENT '用户ID',
`name` varchar(100) NOT NULL COMMENT '模板名称',
`title_template` varchar(500) DEFAULT NULL COMMENT '标题模板',
`desc_template` text COMMENT '描述模板',
`price_strategy` varchar(50) DEFAULT NULL COMMENT '价格策略',
`category_id` bigint DEFAULT NULL COMMENT '分类ID',
`config` json DEFAULT NULL COMMENT '其他配置',
`is_default` tinyint(1) DEFAULT '0' COMMENT '是否默认',
`created_at` datetime(6) NOT NULL COMMENT '创建时间',
`updated_at` datetime(6) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `template_userId` (`userId_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布模板表';
CREATE TABLE `publish_task` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`userId_id` bigint NOT NULL COMMENT '用户ID',
`template_id` bigint DEFAULT NULL COMMENT '模板ID',
`name` varchar(100) NOT NULL COMMENT '任务名称',
`total_count` int DEFAULT '0' COMMENT '总数量',
`success_count` int DEFAULT '0' COMMENT '成功数量',
`fail_count` int DEFAULT '0' COMMENT '失败数量',
`status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '状态',
`schedule_time` datetime(6) DEFAULT NULL COMMENT '计划执行时间',
`start_time` datetime(6) DEFAULT NULL COMMENT '开始时间',
`end_time` datetime(6) DEFAULT NULL COMMENT '结束时间',
`created_at` datetime(6) NOT NULL COMMENT '创建时间',
`updated_at` datetime(6) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `task_userId` (`userId_id`),
KEY `task_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布任务表';
| 字段 | 类型 | 说明 |
|---|
| status | varchar(20) | 状态:pending/running/completed/failed/stopped |
CREATE TABLE `publish_detail` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`task_id` bigint NOT NULL COMMENT '任务ID',
`goods_id` bigint NOT NULL COMMENT '商品ID',
`status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '状态',
`result` text COMMENT '发布结果',
`error_msg` varchar(500) DEFAULT NULL COMMENT '错误信息',
`published_id` varchar(100) DEFAULT NULL COMMENT '发布后的ID',
`published_url` varchar(500) DEFAULT NULL COMMENT '发布后的URL',
`created_at` datetime(6) NOT NULL COMMENT '创建时间',
`updated_at` datetime(6) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `detail_task_id` (`task_id`),
KEY `detail_goods_id` (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布详情表';
CREATE TABLE `goods_images` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`goods_id` bigint NOT NULL COMMENT '商品ID',
`image_url` varchar(500) NOT NULL COMMENT '图片URL',
`thumbnail_url` varchar(500) DEFAULT NULL COMMENT '缩略图URL',
`sort_order` int DEFAULT '0' COMMENT '排序',
`is_main` tinyint(1) DEFAULT '0' COMMENT '是否主图',
`created_at` datetime(6) NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `images_goods_id` (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品图片表';
CREATE TABLE `out_order` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`userId_id` bigint NOT NULL COMMENT '用户ID',
`order_no` varchar(50) NOT NULL COMMENT '订单号',
`goods_id` bigint DEFAULT NULL COMMENT '商品ID',
`goods_name` varchar(255) NOT NULL COMMENT '商品名称',
`price` decimal(10,2) NOT NULL COMMENT '订单金额',
`status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '订单状态',
`buyer_name` varchar(50) DEFAULT NULL COMMENT '买家姓名',
`buyer_phone` varchar(20) DEFAULT NULL COMMENT '买家电话',
`shipping_address` varchar(500) DEFAULT NULL COMMENT '收货地址',
`tracking_no` varchar(100) DEFAULT NULL COMMENT '快递单号',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`created_at` datetime(6) NOT NULL COMMENT '创建时间',
`updated_at` datetime(6) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `order_no` (`order_no`),
KEY `order_userId` (`userId_id`),
KEY `order_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
| 字段 | 类型 | 说明 |
|---|
| status | varchar(20) | 状态:pending/paid/shipped/completed/cancelled |
from django.db import models
class BaseModel(models.Model):
"""基础模型,包含通用字段"""
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
class Meta:
abstract = True
BaseModel (abstract)
├── User
├── Goods
├── Regional
├── PublishTemplate
├── PublishTask
├── PublishDetail
├── GoodsImages
└── OutOrder
CREATE INDEX idx_user_username ON user(username);
CREATE INDEX idx_goods_status ON goods(status);
CREATE INDEX idx_goods_user ON goods(userId_id);
CREATE INDEX idx_task_status ON publish_task(status);
CREATE INDEX idx_order_status ON out_order(status);
CREATE INDEX idx_regional_code ON regional(code);
python manage.py makemigrations
python manage.py sqlmigrate app_name 0001
python manage.py migrate
python manage.py migrate app_name 0001
mysqldump -u root -p salted_fish > backup.sql
mysql -u root -p salted_fish < backup.sql