Skip to content

字段说明

本文档提供数据库字段的详细说明和使用示例。

通用字段说明

时间戳字段

所有表都包含以下时间戳字段:

字段名类型默认值说明
created_atTIMESTAMPCURRENT_TIMESTAMP记录创建时间
updated_atTIMESTAMP自动更新记录更新时间

状态字段

不同类型的状态字段:

表名字段名可选值
usersstatusactive, inactive
articlesstatusdraft, published
projectsstatusdraft, published
categoriesstatusactive, inactive
galleriesstatusdraft, published
wall_messagesstatuspending, approved, rejected
skillsstatusactive, inactive

表字段详解

users (用户表)

role 字段

说明权限
admin管理员完整的后台管理权限
user普通用户基本访问权限

password 字段

  • 使用 bcrypt 加密
  • 存储格式:$2b$10$...(60 个字符)
  • 加密强度:10 rounds

示例

sql
-- 原始密码:123456
-- 加密后:$2b$10$lhcSe2CnCAETOw5wcXpFwu8vMydw8h8BPIqOyGnNeIAgvDO3f9VmW

articles (文章表)

status 字段

说明是否可见
draft草稿
published已发布
  • 类型: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本地文件系统
s3AWS 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 字符短文本(用户名、邮箱等)
TEXT65,535 字符中等长度文本(简介、描述)
LONGTEXT4,294,967,295 字符长文本(文章内容)

INT vs BIGINT

类型范围用途
INT-2^31 ~ 2^31-1普通数量(浏览量、点赞数)
BIGINT-2^63 ~ 2^63-1大数字(文件大小)

TIMESTAMP vs DATETIME

类型范围时区
TIMESTAMP1970-2038UTC
DATETIME1000-9999服务器时区

字符集和排序规则

sql
-- 数据库字符集
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci
  • utf8mb4:支持完整的 Unicode(包括 emoji)
  • utf8mb4_unicode_ci:不区分大小写的排序规则

注意事项

  1. 外键约束:删除数据时注意依赖关系
  2. 时间格式:使用 ISO 8601 格式(YYYY-MM-DDTHH:mm:ss.sssZ)
  3. JSON 字段:使用 MySQL 5.7+ 的 JSON 函数操作
  4. 索引优化:查询频繁的字段应建立索引
  5. 字符集:始终使用 utf8mb4 支持多语言

相关文档