Skip to content

2.5-数据库设计

2.5 数据库设计

2.5.1 mysql 数据库版本概述

一个新开发的程序,需要有数据库的配合。MySQL 是一种关系数据库管理系统,它最明显的机制就是将有关联的数据各个建表,多个表格通过不同的 MySQL 语句实现对数据的增删改查,几个表格在一起相辅相成,分工明确。整体条理清晰,加快了速度并且提高了灵活性。

这里使用 MySQL 数据库的版本为 "mysql": "^2.18.1",实现基本的增删改查。目前不考虑数据库性能、高并发查询等问题。

2.5.2 mysql 数据库结构设计

本地需要新建数据库 novel

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

1-用户表 user

2-书籍表 book

3-评论表 comment

4-用户书籍表 user_book: 用户表和书籍表,是多对多的关系。一个用户可以拥有多本书,一本书也可以被多个用户下载。所以需要一个中间表 user-book 存放外键。

用户表和评论表,是一对多的关系。一个用户可以拥有多个评论。
评论表和书籍表,是一对多的关系。一本书可有拥有多条评论。

那么评论表中需要有用户表的外键,书籍表的外键。
删除用户,需要删除对应 user-book 表和评论表的记录。
删除书籍,也需要删除对应user-book 表和评论表的记录。
用户表 user 和 用户详情表 user-detail 表结构的关系分析

这里支持把主要信息放在用户表中,其他详情信息(用户地址,用户学习),保存在用户详情表中,便于为用户做推荐。用户详情表和用户表是一对一的关系。

具体建表语句参考

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

2.5.3 redis 缓存设计

当用户频繁下载某书籍,或者高并发下载某书籍,频繁通过 mysql 访问磁盘的数据,性能不太好。此时可以把书籍的信息通过 redis 缓存到内存中。如果用户下载过一次,那么第二次直接从缓存中读取,避免频繁访问硬盘数据。

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

如果 redis 一直缓存,那么可能占用较多内存。可以写一个任务定期执行,释放缓存。

2.5.4 参考链接

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