字段说明
本文档提供数据库字段的详细说明和使用示例。
通用字段说明
时间戳字段
所有表都包含以下时间戳字段:
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| created_at | TIMESTAMP | CURRENT_TIMESTAMP | 记录创建时间 |
| updated_at | TIMESTAMP | 自动更新 | 记录更新时间 |
状态字段
不同类型的状态字段:
| 表名 | 字段名 | 可选值 |
|---|---|---|
| users | status | active, inactive |
| articles | status | draft, published |
| projects | status | draft, published |
| categories | status | active, inactive |
| galleries | status | draft, published |
| wall_messages | status | pending, approved, rejected |
| skills | status | active, inactive |
表字段详解
users (用户表)
role 字段
| 值 | 说明 | 权限 |
|---|---|---|
| admin | 管理员 | 完整的后台管理权限 |
| user | 普通用户 | 基本访问权限 |
password 字段
- 使用 bcrypt 加密
- 存储格式:
$2b$10$...(60 个字符) - 加密强度:10 rounds
示例:
sql
-- 原始密码:123456
-- 加密后:$2b$10$lhcSe2CnCAETOw5wcXpFwu8vMydw8h8BPIqOyGnNeIAgvDO3f9VmWarticles (文章表)
status 字段
| 值 | 说明 | 是否可见 |
|---|---|---|
| draft | 草稿 | 否 |
| published | 已发布 | 是 |
is_featured 字段
- 类型:TINYINT(1)
- 取值:0(不推荐),1(推荐)
- 用于首页推荐文章展示
technologies 字段 (projects 表)
- 类型:JSON
- 存储格式:数组字符串
- 示例:
["Vue.js", "Node.js", "TypeScript"]
SQL 示例:
sql
INSERT INTO projects (title, technologies)
VALUES ('My Project', '["Vue.js", "Node.js"]');查询示例:
sql
-- 查找包含特定技术的项目
SELECT * FROM projects
WHERE JSON_CONTAINS(technologies, '"Vue.js"');settings (系统设置表)
group_name 字段
| 分组 | 用途 |
|---|---|
| stats | 统计数据(总访问量、今日访问量等) |
| storage_settings | 存储设置(本地、S3、MinIO 等) |
| analytics | 分析统计代码(Google Analytics 等) |
| technologies | 技术标签列表 |
示例数据:
sql
-- 统计数据
INSERT INTO settings (group_name, key_name, key_value)
VALUES
('stats', 'total_visits', '1000'),
('stats', 'today_visits', '50');
-- 存储设置
INSERT INTO settings (group_name, key_name, key_value)
VALUES
('storage_settings', 'storage_type', 'local'),
('storage_settings', 'uploadPath', './uploads');
-- 技术标签(JSON 格式)
INSERT INTO settings (group_name, key_name, key_value)
VALUES
('technologies', 'list', '[{"id": 1, "name": "Vue.js", "icon": "lucide:code-2", "color": "#4fc08d"}]');files (文件表)
storage_type 字段
| 值 | 说明 |
|---|---|
| local | 本地文件系统 |
| s3 | AWS S3 或兼容服务(MinIO、阿里云 OSS 等) |
| qiniu | 七牛云存储 |
category 字段
常见的文件分类:
| 分类 | 用途 |
|---|---|
| cover | 封面图片 |
| avatar | 用户头像 |
| gallery | 图库图片 |
| resource | 资源文件 |
| carousel | 轮播图 |
file_hash 字段
- 类型:VARCHAR(64)
- 格式:SHA-256 哈希值(64 个十六进制字符)
- 用途:文件去重和完整性验证
生成示例:
javascript
import crypto from 'crypto'
const hash = crypto
.createHash('sha256')
.update(fileBuffer)
.digest('hex')skills (技能表)
level 字段
| 值 | 说明 | 对应程度 |
|---|---|---|
| beginner | 初学者 | 刚入门 |
| intermediate | 中级 | 有一定经验 |
| advanced | 高级 | 熟练掌握 |
| expert | 专家 | 精通 |
wall_messages (留言表)
status 字段
| 值 | 说明 | 是否显示 |
|---|---|---|
| pending | 待审核 | 否 |
| approved | 已通过 | 是 |
| rejected | 已拒绝 | 否 |
索引说明
单列索引
sql
-- 在 username 字段上创建索引
INDEX idx_username (username)
-- 查询会使用索引
SELECT * FROM users WHERE username = 'admin';唯一索引
sql
-- email 字段唯一索引
UNIQUE KEY unique_email (email)
-- 防止重复邮箱
INSERT INTO users (email) VALUES ('test@example.com');
-- 第二次插入会报错复合索引
sql
-- date 和 hour 的复合索引
UNIQUE KEY unique_date_hour (date, hour)
-- 查询会使用索引
SELECT * FROM visit_hourly_statistics
WHERE date = '2025-01-24' AND hour = 10;全文索引
sql
-- title 和 description 的全文索引
FULLTEXT KEY idx_title_desc (title, description)
-- 全文搜索
SELECT * FROM articles
WHERE MATCH(title, description) AGAINST('Nuxt 4' IN NATURAL LANGUAGE MODE);外键约束
外键类型
sql
-- CASCADE:删除父记录时自动删除子记录
FOREIGN KEY (gallery_id) REFERENCES galleries(id) ON DELETE CASCADE
-- SET NULL:删除父记录时将外键设为 NULL
FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE SET NULL
-- RESTRICT:阻止删除父记录
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE RESTRICT使用示例
sql
-- 删除图库时,自动删除关联的图片
DELETE FROM galleries WHERE id = 1;
-- 删除用户时,文章的 author_id 设为 NULL
DELETE FROM users WHERE id = 1;
-- 如果文件被资源使用,则阻止删除文件
DELETE FROM files WHERE id = 1; -- 如果被引用会报错数据类型说明
VARCHAR vs TEXT
| 类型 | 最大长度 | 用途 |
|---|---|---|
| VARCHAR(255) | 255 字符 | 短文本(用户名、邮箱等) |
| TEXT | 65,535 字符 | 中等长度文本(简介、描述) |
| LONGTEXT | 4,294,967,295 字符 | 长文本(文章内容) |
INT vs BIGINT
| 类型 | 范围 | 用途 |
|---|---|---|
| INT | -2^31 ~ 2^31-1 | 普通数量(浏览量、点赞数) |
| BIGINT | -2^63 ~ 2^63-1 | 大数字(文件大小) |
TIMESTAMP vs DATETIME
| 类型 | 范围 | 时区 |
|---|---|---|
| TIMESTAMP | 1970-2038 | UTC |
| DATETIME | 1000-9999 | 服务器时区 |
字符集和排序规则
sql
-- 数据库字符集
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci- utf8mb4:支持完整的 Unicode(包括 emoji)
- utf8mb4_unicode_ci:不区分大小写的排序规则
注意事项
- 外键约束:删除数据时注意依赖关系
- 时间格式:使用 ISO 8601 格式(YYYY-MM-DDTHH:mm:ss.sssZ)
- JSON 字段:使用 MySQL 5.7+ 的 JSON 函数操作
- 索引优化:查询频繁的字段应建立索引
- 字符集:始终使用 utf8mb4 支持多语言