数据库逻辑设计

article/2025/5/18 19:31:59

数据库设计

数据库设计包含需求设计、逻辑设计、物理设计和维护优化。
- 需求分析:全面了解产品设计的存储需求(存储需求,数据处理需求,数据的安全性和完整性)
- 逻辑设计:设计数据的逻辑存储结构(数据实体之间的逻辑关系,解决数据冗余和数据维护异常 )
- 物理设计:根据所使用的数据库特点进行表结构设计
- 维护优化:根据实际情况对索引、存储结构等进行优化

数据库结构优化的目的

  • 减少数据冗余
  • 尽量你变数据维护中出现更新,插入和删除异常
  • 简约数据库的存储空间
  • 提高查询效率

为了设计出没有数据冗余和数据维护异常的数据结构,我们需要遵循以下规范:

第一范式

  1. 数据库表中的所有字段都只有单一属性
  2. 单一属性的列都是由基本的数据类型所构成
  3. 设计出来的表都是简单的二维表

第二范式

要求一个表中只具有一个业务主键,也就是说符合第二范式的表中不能存在非主键列对只对部分主键的依赖关系。以学生选课为例,它的主键是复合主键(学生编号,课程),而学分只依赖于课程,即非主键列只对部分主键存在依赖关系,不符合第二范式。
image.png

针对这个问题,我们怎么破呢?我们对上面这个表拆分为3个表:学生表、课程表、学生课程关系表。其中,学生表和课程表只有一个主键,而学生课程关系表有一个复合主键(学生编号,课程),分数完全依赖于这个复合主键,因此符合第二范式。
image.png

image.png

image.png

第三范式

每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主属性对主键的传递依赖
对于学生表,学院依赖于学生编号,而学院地址却依赖于学院,这就是传递依赖,此时,这张表不满足第三范式。如果想让这张表满足第三范式就需要继续对这张表进行拆分。
image.png
image.png

反范式化

遵循范式化的数据库设计,实现了消除数据冗余的目的,但是此时数据库的性能和读取效率并不是最优的。为了性能和读取效率的考虑而适当的对数据库设计范式的要求进行违反,而允许存在少量的数据冗余,换句话来说反范式化就是使用空间来换取时间。
举个栗子,以我们经常进行下单为例。根据范式准则,定单表和订单商品关联表如下:

订单表:{订单编号,下单用户名,下单日期,支付金额,物流单号}
订单商品关联表:{订单编号,订单商品分类,订单商品名,商品数量}

我们知道查询订单时,往往需要知道用户名称和用户手机号,那么,此时我们就需要将订单表和用户表进行关联查询。这种设计存在一个问题,当用户修改手机号,那么用旧手机号买的订单号的手机信息是新的手机号,而不是旧手机号,这是不符合业务需求的。解决这个问题的办法就是将用户名和用户手机号加入到订单表中。同样情况,商品的价格也存在修改的情况,因此,也需要将支付金额加入到订单表中,此时,订单表和订单商品关联表如下:

订单表:{订单编号,下单用户名,下单日期,支付金额,物流单号,订单金额}
订单商品关联表:{订单编号,订单商品分类,订单商品名,商品数量,商品单价}

总结

  • 范式化设计可以尽量的减少数据冗余,更新操作比反范式化更快,但是对于查询需要对多个表进行关联,更难进行索引优化。
  • 反范式化设计可以减少表的关联(顺序IO),可以更好的进行索引优化,但是存在数据冗余及数据维护异常,对数据的修改需要更多的成本(需要修改多个地方)。
  • 因此,我们需要结合反范式化和范式化,设计出高性能数据库结构。

http://chatgpt.dhexx.cn/article/GSgQVX6Q.shtml

相关文章

备战数学建模24-灰色关联分析2

目录 一、灰色关联分析 1-基本概念及步骤 2-经典案例及MATLAB编程实现 一、灰色关联分析 1-基本概念及步骤 灰色关系分析:就是计算某一个待比较的数列和参照数列的关联程度,关联程度越高,说明待比较数列越接近关联数列,则待比…

灰色关联分析法——系统分析或综合评价模型

Q1:什么是系统分析? 比方说在社会系统、经济系统、农业系统、教育系统中,每个系统都含有许多种因素,而这多种因素共同作用的结果决定了该系统的发展态势,我们常常希望知道在这众多因素中,哪些因素对系统发展…

数学建模笔记——评价类模型之灰色关联分析

这一篇就简单介绍一下灰色关联分析吧。灰色关联分析主要有两个作用,一是进行系统分析,判断影响系统发展的因素的重要性。第二个作用就是用于综合评价问题,给出研究对象或者方案的优劣排名。 不过这里我只能简单介绍一下,更加深入…

数学建模------综合评价模型之灰色关联分析

前言 提起综合评价模型,大家可能会比较熟悉层次分析法,但是层次分型法的主观性太强,有时构造的矩阵并不能通过一致性检验,所以了解一些其他的综合评价模型也是十分重要的。比较常用的综合评价模型有TOPSIS法,熵值法&a…

灰色关联分析及MATLAB实现

目录 一、灰色关联分析概述 灰色关联分析的基本思想: 二、灰色关联分析应用实例 举例一: 1. 确定分析数列 2. 对变量进行预处理 3. 计算子序列中各个指标与母序列的关联系数 三、 MATLAB实现 一、灰色关联分析概述 当一个系统是由多种因素共同作用时…

【数学建模】灰色关联分析 + Matlab代码实现

文章目录 一、学习内容:二、学习时间:三、学习产出:3.1 灰色关联分析基本思想3.2 运用灰色关联分析的基本步骤3.3 灰色关联分析代码实现(Matlab)3.3.1 应用一:分析产业对GDP的影响程度3.3.2 应用二:灰色关联分析评价河…

【数模】灰色关联分析与预测模型

文章目录 前言一、灰色预测(法)1.定义2.如何预测3.灰色预测的四种常见类型 二、灰色关联度分析灰色关联度 三、灰色生成数列四、灰色模型GM(1,1)五、灰色预测步骤 前言 灰色系统的应用 一、灰色预测(法) 1.定义 灰色预测法&a…

数学建模学习:灰色关联分析

一、灰色关联分析 1.概述 一般的抽象系统,如社会系统、经济系统、农业系统、生态系统、教育系统等都包含有许多种因素,多种因素共同作用的结果决定了该系统的发展态势。在众多的因素中,哪些是主要因素,哪些是次要因素&#xff1…

灰色关联分析笔记

什么时候用灰色关联分析? 灰色关联分析 是根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,作为衡量因素间关联程度的一种方法 【若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较…

MATLAB学习笔记_Day03灰色关联分析和灰色预测模型

学习视频:【零基础教程】老哥:数学建模算法、编程、写作和获奖指南全流程培训! 文章目录 1. 灰色关联分析与预测模型适用范围:1.1 灰色预测的概念1.2 灰色关联度与优势分析1.3 灰色预测模型1.4 灰色模型GM(1,1)1.5 灰色预测步骤 1…

灰色系统理论与灰色关联分析模型

灰色系统理论与灰色关联分析模型 Author:丸子 Written on: 220211 Notes:包括灰色系统知识和灰色关联分析模型两部分 笔记课程来自b站网课老哥带你学数模书本为《数学建模算法与应用(第3版)》,司守奎编著第424页 文章目录 灰色系统理论与灰色…

Python 灰色关联度 灰色预测模型

灰色关联度 灰色关联度常用于分析影响因子与被影响因子的关联,是水论文的好东西 如果数据的量纲不统一的话,需要先进行归一化处理 import numpy as npdef gray_correlation(refer, data, rho0.5): refer: 参照数列 (列向量)data: 比较数列 (以列为单位…

备战数学建模15-灰色关联分析与灰色预测模型

目录 一、灰色系统理论与灰色关联分析 1-灰色预测的概念 2-灰色关联度与优势分析 3-灰色关联分析案例分析 4-灰色生成数列 二、灰色预测模型 1-灰色模型GM 2-灰色模型GM的建模步骤 3-灰色预测经典案例1 4-灰色预测模型经典案例2 一、灰色系统理论与灰色关联分析 1-灰…

C语言:关键字----switch、case、default(开关语句)

C语言:基础开发----目录 C语言:关键字—32个(分类说明) 有32个关键字详细说明,还有跳转链接! 一、开关语句----介绍 开关语句,包括以下四种关键字: switch:开关语句case: 开关语句…

C语言关键字auto,case,default,switch应该如何使用

前言:本文章主要用于个人复习,追求简洁,感谢大家的参考、交流和搬运,后续可能会继续修改和完善。 因为是个人复习,会有部分压缩和省略。 一、auto 1.c语言中,关键字auto用于声明一个变量为自动变量&#x…

C语言-switch-case语句与多分支结构

一、switch-case语句 1. switch语句中的每个语句段中都使用break语句 switch-case语句的一般形式为: switch (表达式){case 常量表达式1: 语句段1;break;case 常量表达式2:语句段2;break;...case 常量表达式n:语句段n;break;default:语句段n1;break;}这是switch-c…

C语言——switch case 语句判断学生成绩

C语言——switch case 语句判断学生成绩 switch case 讲解: switch(),在括号里输入所定义的变量,接着在()后面输入一个{}大括号,把每一个分支语句放在大括号中。 switch()写法: int main()…

C语言--switch case 语句,case 后没有语句

背景:在看 wireshark 的解析协议部分的源码时,发现很多的 switch case 语句,case 后没有语句 的情况,随处可见的这种情况,产生疑惑,报文解析就是很好的例子。 例如:wireshark-3.2.17/epan/diss…

补充switch语句的内容和逗号运算符(C语言case后没有break的switch语句,会继续执行后面的语句再退出)

补充switch语句的内容和逗号运算符 C语言case后没有break的switch语句,会继续执行后面的语句再退出补充逗号运算符 C语言case后没有break的switch语句,会继续执行后面的语句再退出 对于switch语句,我们在使用的时候都会注意使用的规范&#…

c语言 case break,C语言中switch...case语句中break的重要性

在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题。话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf("apple"); break; case 2:printf("banana");…