Vue3+TS+Node打造个人博客(数据库设计),移动端开发工程师面试

85 阅读5分钟

数据库初始化脚本:关注公众号前端司南,回复关键字“博客数据库脚本”,即可获取。

一个博客系统应该有什么功能,相信大家都是非常熟悉的,其核心无非是文章分类创作。而像标签评论留言交流后台管理这些功能,都是锦上添花。

要实现这些功能,最关键的是先梳理各个功能之间的关系。提到关系,自然就会联想到关系型数据库。

fb377a99199fe1278c6c3c35d653e18a.png

在设计数据库前,需要先理清实体和实体之间的联系,这里会用到 E-R 图或者 UML 之类的建模语言来做一个概要设计。

但是从我这种非专业的数据库用户的视角来看,我觉得可以不拘泥于形式,不必局限于 E-R 图或者 UML,你也可以选择用思维导图这类的图形化表述工具。因为这只是一个概要设计阶段。

6985edf4fc5e52e570adc193fcf41f2b.png

如上图所示,针对我的个人博客,我做了简单的实体和实体关系设计。

多对多关系

=====

其中文章表article是核心,考虑到一篇文章可能关联多个分类category或标签tag,一个分类或标签下也会有多篇文章,所以我这里设计的都是多对多关系,用到了关系表。

关系表不会涉及很多字段。

af793391f8d54e2ed353f6729430930b.png

主要是关系表中设计的两个外键起到关键作用。

a81534e7cec9b29a3adb78204d654b64.png

根据这么一张关系表,就能完成多对多的关联关系。

一对多关系

=====

文章下有评论,一篇文章可以有多条评论,文章article和评论comment的关系就是一对多的,这个是很好理解的。

对于这种一对多关系,我的设计是在评论表中用一个外键article_id来实现关联。

ae229f7a1756e172942b0c20df30091e.png

要查询某文章下的评论时,就可以依据条件article_id筛选出对应的评论数据。

SELECT * FROM comments WHERE article_id = 229;

30e6591856d00e5dc1b6d783a75e5124.png

子级关系

====

同样地,一条评论下也会有很多回复,针对回复,我是单独设计了reply表。commentreply也是一对多的关系,reply表中有comment_id外键关联到comment表。

除了对评论做回复,还可以针对某一条回复做回复,类似于这样:

c19c4dfcd5cf8ead51a6a3a17bf4c01a.png

而这种子级关系,就需要一个parent_id来做记录,根据parent_id串起来的关系,在业务侧我们就可以得到一棵回复树。

状态字段

====

很多业务都离不开状态的维护,比如数据的逻辑删除,文章的公开/私密处理,评论/回复的审核机制,这些都需要一些标志位来描述状态,同时提供一些业务接口来维护状态。

817283ebe6562b937c3c845878ef4cb2.png

小结

==

本文是Vue3+TS+Node打造个人博客(数据库设计篇),主要介绍了我在为博客系统设计数据库时的一些主要思路和关注点,接下来将针对一些具体的业务实现来进行更详细的剖析,敬请期待!

系列文章

====

Vue3+TS+Node打造个人博客系列文章如下,持续更新,欢迎阅读!点赞关注不迷路!😍

  • ‍‍Vue3+TS+Node打造个人博‍客(总览篇)‍

  • Vue3+TS+Node打造个人博客(数据库设计)

  • Vue3+TS+Node打造个人博客(后端架构)

  • Vue3+TS+Node打造个人博客(前端架构)

  • Vue3+TS+Node打造个人博客(分页模型和滚动加载)

  • Vue3+TS+Node打造个人博客(一键到顶和侧边弹射)

  • Vue3+TS+Node打造个人博客(文章创作和Markdown渲染)

  • Vue3+TS+Node打造个人博客(评论系统的巧妙设计)

数据结构与算法

这一块在笔试、面试的代码题中考核较多,其中常考的数据结构主要有:数组、链表、队列、栈、Set、Map、哈希表等,不同数据结构有不同的方法以及储存原理,这些算是技术岗的必备知识。算法部分主要分为两大块,排序算法与一些其他算法题

排序算法根据考频高低主要有:快速排序、归并排序、堆排序、冒泡排序、插入排序、选择排序、希尔排序、桶排序、基数排序、Timsort这十种,这类考核点要么是算法的时间、空间复杂度、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。

  • 二叉树层序遍历
  • B 树的特性,B 树和 B+树的区别
  • 尾递归
  • 如何写一个大数阶乘?递归的方法会出现什么问题?
  • 把多维数组变成一维数组的方法
  • 知道的排序算法 说一下冒泡快排的原理
  • Heap 排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
  • 知道数据结构里面的常见的数据结构
  • 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
  • 合并两个有序数组
  • 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

开源分享:docs.qq.com/doc/DSmRnRG…