资讯动态

WeBlog 数据库设计全解析:8 张核心表如何撑起整个博客系统

发布时间:2026/8/18 14:47:19 来源:尧图企业网站定制
WeBlog 数据库设计全解析8 张核心表如何撑起整个博客系统【免费下载链接】WeBlog Spring Boot Vue 3.2 Vite 4.3 前后端分离个人博客可作为 Java 毕业设计项目~ 感谢点个 Star 呀~项目地址: https://gitcode.com/gh_mirrors/we/WeBlog想要从零读懂一个开源博客项目数据库设计往往是性价比最高的切入点。今天我们就以WeBlog为例——这是一款基于 Spring Boot Vue 3.2 前后端分离的个人博客系统也常被用作 Java 毕业设计项目——来深入拆解它的数据库设计。WeBlog 的表结构全部沉淀在 sql/schema.sql 和 sql/data.sql 两个脚本中总共 11 张表其中 8 张核心表撑起了文章、分类、标签、用户与权限五大模块。跟着这篇文章新手也能快速看懂博客系统是如何用一张张表搭出来的。为什么说数据库设计是博客系统的地基一个博客系统功能再多无非围绕三件事写文章、看文章、管用户。WeBlog 的数据库设计思路非常清晰文章要存标题和正文正文很长就单独拆表文章可以归类就用关联表打通分类与标签后台要登录就设计用户表和角色表做权限控制。这样的设计让每个模块各司其职后期无论是加功能还是做查询优化都能做到改一处、不动全身。对 Java 毕业设计或者练手项目来说这是一套值得照抄的教科书级范式。WeBlog 的 8 张核心表一表速览在逐张拆解之前先用一张总表建立全局认知表名模块归属核心作用t_article文章模块存储文章标题、描述、阅读数等基本信息t_article_content文章模块单独存放文章长正文t_category分类模块文章分类t_tag标签模块文章标签t_article_category_rel关联模块文章与分类的关联t_article_tag_rel关联模块文章与标签的关联t_user用户模块后台登录用户t_user_role权限模块用户角色另外还有 t_blog_setting、t_statistics_article_pv、t_visitor_record 三张辅助表负责博客设置、访问量统计和访客记录后面也会单独讲到。核心表逐个拆解每张表都藏着设计巧思文章表 t_article博客系统的主角先看最核心的文章表它只存文章的骨架信息字段类型说明idbigint文章主键自增titlevarchar(200)文章标题title_imagevarchar(200)文章题图descriptionvarchar(160)文章描述列表页摘要read_numint被阅读次数create_time / update_timedatetime创建与更新时间is_deletedtinyint软删除标志两个细节值得点赞一是description单独存摘要列表页展示时不用读取全文性能更好二是read_num直接在文章表里维护查文章详情时顺手就能拿到阅读量。对应的实体类可以看 ArticleDO.java。文章内容表 t_article_content把正文单独拆出来的巧妙设计文章正文动辄几 KB 甚至几十 KB如果和标题放在同一张表列表查询时也要跟着扫描大字段白白拖慢速度。WeBlog 的做法是把正文拆到独立的 t_article_content 表通过article_id与文章表一对一关联内容字段用text类型存储 Markdown 原文。这样设计的好处显而易见列表页与详情页各读各的表互不拖累。这也是很多内容型系统通用的大字段分表思路。分类表 t_category 与标签表 t_tag两种文章组织方式分类和标签都用于组织文章但定位不同。分类粒度粗、层级稳定如技术笔记生活随笔标签粒度细、灵活多变如Spring BootVue3。有趣的是WeBlog 给这两张表设计了一模一样的结构id、name、create_time、update_time、is_deleted。其中name都加了唯一索引保证同一个分类或标签不会重复创建。对应实体见 CategoryDO.java 与 TagDO.java。文章分类关联表 t_article_category_rel一篇文章只能有一个分类分类和文章的关系WeBlog 选择了一对多一篇文章只属于一个分类。所以在关联表上article_id加了唯一索引从数据库层面强制一篇只能归一类category_id则建了普通索引方便按分类反查文章列表。文章标签关联表 t_article_tag_rel经典多对多关系标签就不同了一篇文章可以打多个标签一个标签也可以挂多篇文章这是标准的多对多关系。此时关联表两边的字段都不能加唯一约束而是分别对article_id和tag_id建普通索引兼顾两个方向的查询。一对比就能看出唯一索引与普通索引的选择背后就是业务关系的取舍。用户表 t_user 与角色表 t_user_role权限控制的基石后台系统离不开登录认证。WeBlog 的用户表 t_user 存放用户名和 BCrypt 加密后的密码初始化数据里默认管理员 admin/admin见 data.sql角色表 t_user_role 则通过username字段把用户和角色关联起来比如ROLE_ADMIN管理员和ROLE_VISITOR游客。这里采用用户名关联而非外键关联虽然简单直接但在实际项目中更推荐用user_id关联避免用户名修改时引发连锁问题——这也是很多初学者容易踩的坑。三张辅助表博客设置、PV 统计与访客记录的巧思除了 8 张核心表还有三张辅助表让 WeBlog 的功能更加完整t_blog_setting 博客设置表博客名称、作者名、头像、介绍语外加 GitHub / CSDN / Gitee / 知乎四个社交主页地址。站点信息统一存一行后台改完前台立即生效对应 BlogSettingDO.java。t_statistics_article_pv 文章 PV 统计表按pv_date日期维度记录全站浏览量且日期加了唯一索引。配合后台仪表盘的 ECharts 图表就能画出漂亮的访问量趋势图。t_visitor_record 访客记录表记录访客的 IP、IP 归属地、访问时间等信息用于访客分析和站内通知是扩展功能的好素材。从 WeBlog 学到的 3 个数据库设计实用技巧软删除代替物理删除文章、分类、标签、用户都带is_deleted标志位删数据只是打标记数据可恢复、引用不报错这是生产级系统的标配。大字段单独拆表正文放独立表列表查询不背大字段的黑锅查询速度自然更快。用唯一索引卡业务规则分类关联表的article_id唯一索引直接从数据库层面杜绝一文多类的数据脏乱。如何快速跑起来导入初始化脚本三分钟搞定想亲自验证这套数据库设计很简单只需两步克隆项目git clone https://gitcode.com/gh_mirrors/we/WeBlog新建一个名为weblog的数据库依次导入 schema.sql表结构和 data.sql初始化数据再用默认账号 admin/admin 登录后台即可。总结读懂 8 张核心表就读懂了整个博客回看 WeBlog 的数据库设计你会发现它并没有炫技而是用最朴素的建模思路解决了博客系统的真实需求文章、分类、标签、用户、权限五大模块 三张辅助表彼此解耦又相互呼应。对于想入门 Spring Boot 开发、做毕业设计或练手项目的新手来说这份 schema.sql 本身就是一份极佳的数据库设计教材。把每张表的设计动机想明白你写下一个项目时心里就有了一张清晰的建表地图。【免费下载链接】WeBlog Spring Boot Vue 3.2 Vite 4.3 前后端分离个人博客可作为 Java 毕业设计项目~ 感谢点个 Star 呀~项目地址: https://gitcode.com/gh_mirrors/we/WeBlog创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价