当前位置: 首页 > news >正文

数据库设计简述

系列文章目录

MySQL的基础操作-CSDN博客

MySQL操作进阶-CSDN博客

MySQL索引事务-CSDN博客

MySQL的JDBC编程-CSDN博客

MySQL存储过程和触发器_mysql 存储过程-CSDN博客


目录

系列文章目录

前言

一、数据库设计的主要步骤

二、数据库中的范式

三、数据库范式解决的问题

四、数据的完整性与安全性

五、一对一,一对多,多对多关系在数据库中的实现方式

六、如何使用E-R图进行数据库设计

七、在数据库设计阶段考虑扩展性



前言

本文介绍了MySQL数据库设计的关键步骤和规范。主要内容包括:1)数据库设计的4个步骤:需求分析、概念设计、逻辑设计和物理设计;2)三大范式(1NF、2NF、3NF)的定义及作用,重点分析了不满足范式可能引发的数据冗余、更新异常等问题;3)三种关系(一对一、一对多、多对多)的实现方式;4)E-R图的使用方法;5)数据库扩展性设计考虑,如冗余字段和预留字段的应用。文章为数据库设计提供了系统性的指导思路。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据库设计的主要步骤

数据库设计分为 4 个步骤:

1. 需求分析:阅读需求文档,提取概念类以及类的属性;

2. 概念设计:绘制 ER 图,和需求方进行沟通;

3. 逻辑设计:确定数据库的名字,表的名字,表中字段的名字,类型和约束,以及数据库设计的其它规范,类如还需设计哪些公共字段等,编写 SQL 代码;

4. 物理设计:考虑当前系统数据库服务器的分配;

二、数据库中的范式

数据库设计中常用的有三大范式:第一范式,第二范式和第三范式;

第一范式:

满足表中的列是不可分割的原子数据项,即天然满足第一范式;

如果表中的列是一个类,还可再拆分成更多的列,那么就不满足第一范式;

反例:学生表中有一个学校的列,学校还可以拆分成学校地址,学校电话,那么就不满足第一范式;

第二范式:

满足第一范式的基础上,不存在非关键字段对任意候选键的部分函数依赖,即满足第二范式;

候选键指的是可以唯一标识一行数据的列或者列的组合,可以从候选键中选一个或者多个当作表的主键;

部分依赖指的是多个列作为表的主键时,非关键字段依赖主键的某个列,不依赖于全部列;

当主键只有一列时,天然就满足第二范式;

反例:学生课程成绩表中,学号和课程作为主键,学生的个人信息都只依赖于学号,课程相关的信息都只依赖于课程,那么这就属于部分依赖,不满足第二范式;

第三范式:

在满足第二范式的基础上,不存在非关键字段,对任一候选键的传递依赖;

反例:例如在学生表中存在“学院”,“学院电话”,“学院地址”等字段,“学院电话”和“学院地址”是依赖“学院”的,而不是依赖主键,这就是传递依赖,不满足第三范式;

三、数据库范式解决的问题

主要涉及第二范式,不满足第二范式,可能会出现以下问题:

1. 数据冗余

不满足第二范式,多个列组合成一个主键,可能会存在部分依赖。

这种情况下会出现大量的冗余字段,造成大量的数据冗余;

例如:学生表中,学生 ID 和 课程组合称为主键,每个学生信息后面都会出现课程相关的字段,比如学分,重复出现造成了大量的数据冗余;

2. 更新异常

如果要调整冗余字段,就会涉及到表中的所有相关行,一旦执行中断,数据就会更新失败,造成了行与行数据不一致的情况;

例如:学生表中,如果要更新课程相关的学分,就会涉及到修改多行数据,如果更新终端,那么就会出现同一门课程,学分不一致的情况;

3. 插入异常

例如:学生课程成绩表中,学生只有参加考试获得成绩,才会生成一条记录。当一门新课,还没有学生参加考试取得成绩,这门课程在数据库中就不存在,因为成绩为空的时候,记录没有意义;

4. 删除异常

例如:学生课程成绩表中,如果将所有学生的成绩都删除,课程和学生的信息也会被删除,数据库中没有学生和课程的信息;

四、数据的完整性与安全性

数据完整性是通过数据库的一些约束,比如非空,外键约束,默认值等,进行数据校验,避免非法数据,保证数据的完整性;

数据的安全性是通过权限分级,避免所有人都可以访问数据库,对数据造成破坏;

五、一对一,一对多,多对多关系在数据库中的实现方式

一对一:

创建两个数据表,在其中一个表中创建一个关联字段,实现建立关联关系;

例如:用户表和账户表,在和用户表中增加一个账户ID字段,或者在账户表中增加一个用户ID字段,都可以将两张表关联起来;

一对多:

创建两个数据表,在多的一方增加一个关联字段,实现建立关联关系;

例如:班级表和学生表,在学生表中增加一个班级ID字段,将两张表关联起来;同时也可以建立一个外键关系;

多对多:

建立两张数据表,再建立一个关联表,实现建立关联关系;

例如:学生表和课程表,可以在建立一个关联表,包含学生ID和课程ID字段,将两张表关联起来;

六、如何使用E-R图进行数据库设计

E-R 图是实体关系图,包含实体,属性和关系,实体指类,用矩形表示,属性指列,用椭圆表示,关系指实体之间的关系,用菱形表示;

一对一:

一对多:


多对多:

七、在数据库设计阶段考虑扩展性

冗余字段:由于考虑到数据库的性能,往往会反范式设计,增加一些关键字段的冗余字段,避免频繁的联表查询;

预留字段:后续迭代需求时,可以对数据库结构进行小的改动;


http://www.dtcms.com/a/321690.html

相关文章:

  • Trae SOLO+ Holopix AI → “虚假广告“-鸠摩智转[特殊字符]割草小游戏
  • 【Unity3D实例-功能-跳跃】角色跳跃
  • Wan2.1-14B-T2V-FusionX-VACE本地部署教程:融合前沿技术,轻松掌握逼真物理模拟!
  • JAVA基础-NIO
  • 面向真实场景的定制化图像降质模型设计方案
  • 荣耀秋招启动
  • python---函数嵌套
  • 剑指offer第2版——面试题2:实现单例
  • 零知开源——基于STM32F103RBT6的TDS水质监测仪数据校准和ST7789显示实战教程
  • Windows ASLR 地址空间布局随机化技术详解
  • 连锁店管理系统的库存跟踪功能:数字化转型下的零售运营核心
  • VR 设备 PCB 怎样凭借高频材料达成高速传输
  • [激光原理与应用-185]:光学器件 - BBO、LBO、CLBO晶体的全面比较
  • (1-9-2)Java 工厂模式
  • 基于AI多模态数据分析:美国劳动力市场疲软信号识别与趋势预测
  • 塑料可回收物检测数据集-10,000 张图片 智能垃圾分类系统 环保回收自动化 智慧城市环卫管理 企业环保合规检测 教育环保宣传 供应链包装优化
  • Neo4j APOC插件安装教程
  • 学生如何使用 DeepSeek 帮助自己的学习?
  • 【具身智能】具身智能的革命——人形机器人如何重塑人类日常生活
  • Go语言的gRPC教程-超时控制
  • XXL-JOB多实例
  • 「ECG信号处理——(22)Pan-Tompkins Findpeak 阈值检测 差分阈值算法——三种R波检测算法对比分析」2025年8月8日
  • 宁商平台税务新政再升级:精准施策,共筑金融投资新生态
  • 创建MyBatis-Plus版的后端查询项目
  • 构网型逆变器三相共直流母线式光储VSG仿真模型【simulink实现】
  • 影刀 —— 练习 —— 读取Excel的AB两列组成字典
  • 【数值积分】如何利用梯形法则近似求解积分
  • Nearest Smaller Values(sorting and searching)
  • 专题二_滑动窗口_最大连续1的个数
  • 用户组权限及高级权限管理:从基础到企业级 sudo 提权实战