Skip to content

数据库设计

数据库设计

mysql 数据库

项目使用关系型数据库存储用户、书籍和评论等结构化数据。MySQL 通过表、键和 SQL 操作组织相关数据,便于维护数据关系并执行增删改查。

后端使用 Node.js 的 mysql 驱动(项目记录的版本范围为 ^2.18.1)访问数据库。该项目以基本的增删改查为主,不以高并发场景为设计目标。

mysql 数据库结构设计

本地需要先创建名为 novel 的数据库。

在数据库中,新建数据库表:

1-用户表 user

2-书籍表 book

3-评论表 comment

  1. 用户书籍表 user_book:用户与书籍是多对多关系。一个用户可以拥有多本书,一本书也可以被多个用户下载,因此需要中间表 user_book 保存两侧记录的关联。
用户表和评论表是一对多关系:一个用户可以发表多条评论。

评论表和书籍表是一对多关系:一本书可以有多条评论。

因此,评论表需要保存用户和书籍的外键。

删除用户时,需要按业务规则处理 `user_book` 和评论表中的关联记录。

删除书籍时,也需要按业务规则处理对应的 `user_book` 和评论记录。
用户表 `user` 和用户详情表 `user_detail` 的关系分析

可以将核心信息保存在用户表中,将地址、阅读偏好等扩展信息保存在用户详情表中。两表可通过用户 ID 建立一对一关系;当前是否需要拆分,应由实际需求决定。

以下命令用于导出数据库结构和数据的 SQL 文件,并非创建表的命令。-p 会提示输入密码,避免将密码直接写入命令行:

mysqldump -u root -p --skip-add-locks --skip-add-drop-table --skip-comments novel > sql/mysql.sql

redis 缓存设计

当热点书籍被频繁读取时,可以将适合缓存的数据放入 Redis,以减少数据库查询。缓存命中时直接从 Redis 读取;缓存未命中时则从数据库读取,并按缓存策略写回。

当从 mysql 数据库删除一本书籍,也应该从 redis 中删除对应的缓存。

缓存应设置过期时间或淘汰策略,避免持续占用过多内存。更新或删除书籍时,也需要使相关缓存失效或同步更新。

参考链接

nodejs 连接 mysql: https://michael18811380328.github.io/backend/site/nodejs/24-Node.js%20%E8%BF%9E%E6%8E%A5%20MySQL/

tablePlus 数据库软件连接本地 mysql:https://blog.csdn.net/weixin_41697143/article/details/119904196