type
status
date
slug
summary
tags
category
icon
password
前言:
“改变从现在开始”——Poze
📝 数据库设计的规则与例子
目录
📝 数据库设计的规则与例子目录1. 数据库表的设计1.1 关系范式1.1.1 什么是范式?1.1.2 三大范式详解1.1.3 例子1.1.4 结论总结1.2 外键1.2.1 外键定义及条件1.2.2 例子与拓展1.2.3 结论总结2. 逻辑图与数据库表的应用2.1 功能实现的拓扑图2.2 画逻辑图的要点3. 结语与总结3.1 系统管理与资源管理数据模型3.2 学习步骤与代码复用
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,可以获取用户信息。
- 拓展:通过功能页面和数据库设计的蓝框关系(前端页面中可以增删改的数据)来判断表之间的外键关系。
- 如何根据功能和页面来设计表?观察上面三张图,基本上前端所展示的可变动数据(可以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 功能实现的拓扑图
通过观察前端发送请求到后端的执行流程,了解数据库表的应用及表之间的关联关系。
- 拓扑资源加载逻辑图
2.2 画逻辑图的要点
- 目的:逻辑图用于让非技术人员理解系统结构,应简洁明了。
- 要点:
- 带描述、简明易懂。
- 掌握每个字段与功能的关联。
- 梳理顶层到底层的流程。
- 根据外键能查到上一级表的信息。
3. 结语与总结
3.1 系统管理与资源管理数据模型
- 系统管理数据模型:用经典的五张表来理解数据库的功能设计。
- 资源管理数据模型:运用面向对象的思想来分析系统的功能结构。
3.2 学习步骤与代码复用
- 步骤:先熟悉功能操作,再推测数据模型,并通过观察前端请求后端的逻辑,学习数据库表的运用与代码的复用。
- 作者:poze624
- 链接:https://poze624.top/notes/20240823195420
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。