type
status
date
slug
summary
tags
category
icon
password
😀
前言: “改变从现在开始”——Poze
 

📝 数据库设计的规则与例子

目录


1. 数据库表的设计

1.1 关系范式

1.1.1 什么是范式?

范式是数据库设计中的规范,用来减少数据冗余和提高数据一致性。范式越高,数据库设计就越好,数据更加结构化。

1.1.2 三大范式详解

第一范式(1NF)
  • 定义:表中的每个字段是不可再分解的原子值,即符合1NF。
  • 例子:在表 SA(姓名,工资) 中,工资还可以分为基本工资、奖金和补贴,这违背了1NF的要求,需将表设计为 SA(姓名,基本工资,奖金,补贴)
第二范式(2NF)
  • 定义:在满足1NF的前提下,表中不存在部分依赖。非主键字段必须完全依赖于主键
  • 例子:学生成绩表(score),主键是 stu_id + kc_id,但kc_name只依赖于kc_id,属于部分依赖,不符合2NF。
  • 规范化:将表拆分为成绩表(stu_id, kc_id, score)和课程表(kc_id, kc_name)。
第三范式(3NF)
  • 定义:在满足2NF的前提下,表中不存在传递依赖,即非主键字段不能间接依赖于主键。
  • 例子:学生信息表中,sex_desc 依赖于 sex_code,sex_code 又依赖于 id,这属于传递依赖,不符合3NF。
  • 规范化:将表拆分为学生表性别代码表,消除传递依赖。

1.1.3 例子

分析 数据字典表字典条目表 中,数据字典的字段(如字典编码)错误地放入了字典条目表,导致传递依赖。为了符合3NF,需将这两个表独立开来。

1.1.4 结论总结

  • 1NF:确保表中的每个字段都是不可再分的原子值。使数据更加结构化。
  • 2NF:主要解决部分依赖(非主键字段完全依赖于主键,而不是只满足其中一个主键)问题,通常涉及对应一对多关系。从而减少数据冗余。
  • 3NF:主要解决传递依赖(非主键字段必须直接依赖于主键,而不能间接依赖,否则可能会通过不一样的主键修改导致数据不一致)问题,可以涉及各种关系类型,包括多对多关系。可以进一步减少数据冗余,提高数据一致性。

1.2 外键

1.2.1 外键定义及条件

  • 外键 (Foreign Key):外键是一个表中的字段,其值必须是另一个表中的主键或唯一键,用于建立两个表的联系,确保引用的完整性。

1.2.2 例子与拓展

  • 用户表与订单表:通过订单表中的用户ID,可以获取用户信息。
  • 拓展:通过功能页面和数据库设计的蓝框关系(前端页面中可以增删改的数据)来判断表之间的外键关系。
notion image

notion image
notion image
  • 如何根据功能和页面来设计表?观察上面三张图,基本上前端所展示的可变动数据(可以CRUD)的都是由后端来提供的,因此一个名词就可对应一张表,它们之间的关系可以通过下面的方法结合蓝色框框来找出(红色框框表示有增删改的名词,蓝色框框根据数据找关系)
如何判断一对多或者多对多的关系
一个用户只能属于一个组织 用户列表:组织架构表 1:1 逻辑或运算 假设1为假,n为真,那么只要有一个真(n)就为真(n) 一个组织可以有n个用户 用户列表:组织架构表 n:1 用户列表:组织架构表 n:1 有主表(单方)和从表(多方),外键用于“多(从)”方表
一个角色只能属于一个组织 角色列表:组织架构表 1:1 一个组织可以有n个角色 角色列表:组织架构表 n:1 角色列表:组织架构表 n:1
一个用户能有n个角色 用户列表:角色列表 1:n 一个角色能修饰n个用户 用户列表:角色列表 n:1 用户列表:角色列表 n:n
一个角色可以有n个模块权限,n个数据权限 角色列表:模块权限定义表 1:n 角色列表:数据权限定义表 1:n 一个模块权限可以属于n个角色,一个数据权限可以属于n个角色 角色列表:模块权限定义表 n:1 角色列表:数据权限定义表 n:1 角色列表:模块权限定义表 n:n 角色列表:数据权限定义表 n:n
一个数据字典有n条字典条目 数据字典表:字典条目表 1:n 一条字典条目属于一个数据字典 数据字典表:字典条目表 1:1 数据字典表:字典条目表 1:n

1.2.3 结论总结

  • 根据蓝色框框或者新增等业务功能结合判断表之间关系。
  • 外键常用于
    • 一对一关系:外键可用于任意一方,推荐建在查询频率较高的一方。
    • 一对多关系:外键用于“多”方表中,引用它来获取“单”方表的信息。
    • 多对多关系:通过中间表实现,每个中间表包含两个外键,分别引用两张表的主键,确保多对多关系的有效性。
 

2. 逻辑图与数据库表的应用

2.1 功能实现的拓扑图

通过观察前端发送请求到后端的执行流程,了解数据库表的应用及表之间的关联关系。
  • 拓扑资源加载逻辑图
notion image
notion image

2.2 画逻辑图的要点

  • 目的:逻辑图用于让非技术人员理解系统结构,应简洁明了。
  • 要点
      1. 带描述、简明易懂。
      1. 掌握每个字段与功能的关联。
      1. 梳理顶层到底层的流程。
      1. 根据外键能查到上一级表的信息。

3. 结语与总结

3.1 系统管理与资源管理数据模型

  • 系统管理数据模型:用经典的五张表来理解数据库的功能设计。
  • 资源管理数据模型:运用面向对象的思想来分析系统的功能结构。

3.2 学习步骤与代码复用

  • 步骤:先熟悉功能操作,再推测数据模型,并通过观察前端请求后端的逻辑,学习数据库表的运用与代码的复用。
相关文章
实习专项----超体日记
Lazy loaded image
毕设专项----uniapp Vue3组合式API版本到咸虾米壁纸项目
Lazy loaded image
苍穹外卖遇到的“关键”知识点
Lazy loaded image
开源自荐,用windsurf做了一个ai菜谱推荐网页/小程序,入坑域名+云服务器+部署,分享下小小心得
Lazy loaded image
Python Django 入门
Lazy loaded image
双体Java高级部分内容考前复习
Lazy loaded image
实习专项----天讯瑞达实习过程的一些日记(含开发和职场)八步金刚功
Loading...
poze624
poze624
天行健,君子以自强不息
公告
🎉Poze小站已经上线🎉
--- 哈喽 ---
👏欢迎浏览阅读👏
待补充(欢迎关注我的公众号)
notion image