数据库数据表设计思想二
引言✨🌟帅的人都先看我
数据库设计一般交由后端开发人员直接设计(无论是否有经验),而不会让经验丰富的开发人员包揽(做评审即可)。
- 数据没必要一次完整的设计出来,开发过程中,难免会对数据库进行调整的,保证数据的骨架没有问题 【 增删字段、添加中间表、加视图都不会造成多大的影响 】
- 数据库设计是后端部分需求转换的过程(一般业务),类比原型设计是前端部分需求转化的过程,通过数据库分库、分表就能大致划分后端功能结构,如果后端开发人员跳过了数据库的设计,大概率会出现分不清功能结构的状况,只能根据页面原型猜测需要哪些接口,这种看到一个功能开发一个接口的工作模式,大多数情况会出现开发进度不可控、开发了多余的接口、漏写接口的问题,故数据库设计是每个后端人员都必须掌握的技能
✨命名规范
- 分库(由架构师或技术负责人完成)
- 分表(由开发人员完成)
- 增加冗余字段、视图(由开发人员完成)
另外,索引、段类型、字段长度等,实际开发过程中添加即可
1 分库(由架构师或技术负责人完成)
1 分库原则(每个子系统对应一个数据库)
2 目的
- 降低单个数据库的数据表的复杂度(更容易理解)
- 后续扩展服务器是,可以更有针对性地扩展(扩展压力大的)
2 分表(由开发人员完成)
按照当前模块的业务功能而定的。
分表后,一个模块的基本功能大概就勾勒出来了,在开发的时候明显就能分清那些功能是主要的、哪些是次要的,就能明确开发计划,便于前后端联调分段完成
1 从主功能逻辑中抽离主要的几张表
2 根据功能点补充表
3 检查多对多关系
1 多对多关系解决办法
1 使用字段记录
适合改动频率低或不更新字段
2 建立中间表
适合改动频率较高场景
3 增加冗余字段、视图(由开发人员完成)
评论列表既要显示评论内容,还要显示博客名称—>添加冗余字段,在评论表中记录博客名称(博客表中已记录博客名称)
4 增加视图(由开发人员完成)
数据库视图(Database View)是一个虚拟的表,它基于一个或多个实际数据库表的查询结果而创建。视图不存储实际数据,而是提供对底层数据的一种虚拟表示。实际上就是一组预先写好的sql语句。
-- 创建一个名为 "EmployeeView" 的视图,该视图从 "Employees" 表中选择特定的字段
CREATE VIEW EmployeeView AS
SELECT EmployeeID, FirstName, LastName, Department
FROM Employees
WHERE Department = 'Sales';
热门博客列表
热门:根据点赞数、收藏数、评论数乘以权重
热门博客列表可使用视图,建立博客热度虚拟表
这样用过一条sql就可以查询热度前三的博客(实际项目需要添加redis缓存)
5 视图、存储过程、函数的解释
1 存储过程(Stored Procedure)
- 定义:存储过程是一组 SQL 查询和操作的集合,它们可以在数据库中存储并命名,通常用于执行一系列数据库操作和事务处理。
- 示例代码:下面是一个示例存储过程,它接受两个参数并将它们相加并插入到数据库中:
DELIMITER //
CREATE PROCEDURE AddNumbers(IN num1 INT, IN num2 INT)
BEGIN
INSERT INTO CalculationResults(Result) VALUES (num1 + num2);
END //
DELIMITER ;
2 函数(Function)
- 定义:函数是可调用的代码块,它接受输入参数并返回单个值。函数通常用于计算和返回一个值,例如执行数学运算、字符串操作或聚合数据。
- 示例代码:下面是一个示例函数,它接受两个参数并返回它们的和:
DELIMITER //
CREATE FUNCTION AddNumbers(num1 INT, num2 INT) RETURNS INT
BEGIN
DECLARE result INT;
SET result = num1 + num2;
RETURN result;
END //
DELIMITER ;
3 视图(View)
- 定义:视图是虚拟的表,基于一个或多个实际数据库表的查询结果而创建。视图不存储数据,而是提供对底层数据的一种虚拟表示。
- 示例代码:下面是一个示例视图,它从一个名为 “Employees” 的表中选择特定的字段,并将其命名为 “EmployeeView”:
CREATE VIEW EmployeeView AS
SELECT EmployeeID, FirstName, LastName, Department
FROM Employees;
4 区别
-
视图
不是直接调用,而是通过查询引用,视图不返回值,但提供查询结果,简化数据访问、隐藏底层表的复杂性和提供虚拟数据表示
-
存储过程
通过名称调用,没有返回值,执行一系列数据库操作和事务处理。
-
函数
函数有明确定义的返回值,可嵌入sql语句查询中
-
用途:
- 存储过程用于执行一系列数据库操作和事务处理。
- 函数用于计算和返回值。
- 视图用于简化数据访问、隐藏底层表的复杂性和提供虚拟数据表示。
-
返回值:
- 存储过程通常不返回结果集,但可以使用输出参数返回结果。
- 函数返回一个值(或表格变量)。
- 视图不返回值,而是提供对数据的虚拟视图。
-
调用方式:
- 存储过程通过名称调用,可以执行一系列操作。
- 函数可以嵌入到 SQL 查询中,并返回单一值。
- 视图不是直接调用,而是通过查询引用。
-
数据操作:
- 存储过程可以执行数据插入、更新、删除等修改操作。
- 函数通常不执行修改操作,而是计算和返回值。
- 视图本身不执行数据操作,但可以在其基础上执行操作。
-
返回类型:
- 存储过程没有返回类型,但可以使用输出参数传递值。
- 函数有明确定义的返回类型。
- 视图不返回值,但提供查询结果。