数据库设计
数据库设计¶
mysql 数据库¶
项目使用关系型数据库存储用户、书籍和评论等结构化数据。MySQL 通过表、键和 SQL 操作组织相关数据,便于维护数据关系并执行增删改查。
后端使用 Node.js 的 mysql 驱动(项目记录的版本范围为 ^2.18.1)访问数据库。该项目以基本的增删改查为主,不以高并发场景为设计目标。
mysql 数据库结构设计¶
本地需要先创建名为 novel 的数据库。
在数据库中,新建数据库表:
1-用户表 user
2-书籍表 book
3-评论表 comment
- 用户书籍表
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