首页 > 数据库 >mysql 数据库设计三大范式

mysql 数据库设计三大范式

时间:2023-01-15 11:03:17浏览次数:45  
标签:范式 数据库 张三 三大 mysql 主键 冗余


mysql 数据库设计三大范式_主键

1. 什么是设计范式


设计表的依据,按照范式设计出来的表,不会出现数据的冗余

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构清晰的;反之则是乱七八糟,不仅会给开发人员制造麻烦,而且还可能存储了大量不需要的冗余数据

不仅仅只有三大范式,还有第四范式、第五范式、第六范式等,通常来讲,满足三大范式就基本足够

项目的数据库设计并不一定要完全满足于三大范式,有些时候我们会适量的冗余让 query 尽量减少 join

2. 三大范式


第一范式(1 NF):要求属性(列)具有原子性,即每列都是不可再分解的数据

虽然第一范式要求各列保存原子性,不能再分解,但是这种要求是和我们的需求相关联的,不拆分也行;如果要考虑可扩展性,那么就进行拆分吧。如下表所示,没有根据城市筛选用户的需求,可以这样存储城市数据

id

name

address

1

张三

河南省开封市兰考县

2

李四

广东省深圳市福田区

对 address 进行拆分,使其具有原子性(原子性:指不可再分解的意思)

id

name

province

city

area

1

张三

河南省

开封市

兰考县

2

李四

广东省

深圳市

福田区

第二范式(2 NF):建立在第一范式基础上,除主键外的每一列都必须完全依赖于主键

如果要出现不完全依赖主键,只可能发生在联合主键的情况下

第二范式是对记录的唯一性约束,要求有唯一性标识,即实体的唯一性,如下所示:即可 name 和 address 完全一致,但是主键值是不一样的,这样就实现了数据的唯一性

id

name

address

1

张三

河南省开封市兰考县

2

张三

河南省开封市兰考县

第三范式(3 NF):建立在第二范式基础上,对字段冗余性的约束,它要求字段没有冗余

假设员工的薪资水平由岗位决定,也就是 salary 由 job 决定,和人员(name)无关

员工表:

id

name

job

salary

1

张三

Web 前端开发工程师

5000

2

李四

PHP 后端开发工程师

8000

3

王五

PHP 后端开发工程师

8000

那么,我们将遵循第三范式将员工表拆分为两张表,如下所示

员工表:

id

name

job_id

1

张三

100

2

李四

101

3

王五

101

薪资表:

id

name

salary

100

Web 前端开发工程师

5000

101

后端开发工程师

8000

 

标签:范式,数据库,张三,三大,mysql,主键,冗余
From: https://blog.51cto.com/10zhancom/6008369

相关文章

  • MySQL 事务特性和事务隔离级别
    1.MySQL事务的四大特性2.MySQL事务的并发问题3.MySQL事务的隔离级别---------------------------------------------------------1.MySQL事务的四大特性MySQL事......
  • 用Jersey构建RESTful服务5--Jersey+MySQL5.6+Hibernate4.3
    一、总体说明本例运行演示了用Jersey构建RESTful服务中,如何同过Hibernate将数据持久化进MySQL的过程二、环境1.上文的项目RestDemo2.MySQL5.6下载​​http://dev.mysql.com/......
  • Python 编程范式的科普
    编程范式是计算机编程的基本风格或典范模式。如果说每个编程者都在创造虚拟世界,那么编程范式就是程序员置身其中采用的世界观和方法论。常见的编程范式包括:面向过程编程面向......
  • 【MySQL】MySQL8安装
    1.MySQL8安装安装环境操作系统:CentOS7MySQL版本:8.0.28安装方式:二进制Generic软件路径:/app/database数据路径:/data/3306日志路径:/binlog/3306MySQLCommunitySe......
  • MySql查看数据库及表容量大小并排序
    MySql查看数据库及表容量大小并排序带刀医生关注IP属地:江苏2022.04.1120:05:34字数85阅读1,219MySql查看数据库及表容量⼤⼩并排序查看所有数据库容量⼤⼩......
  • 自己动手写一个Mysql到PostgreSQL数据库迁移工具
    1.前言这段时间在进行Mysql到PostgreSQL数据库迁移工作.主要包含三部分工作,其一是构建数据库对象,包括表,视图,存储过程的构建,这部分由于我在项目早期就引入了li......
  • docker之Mysql安装教程
    部署mysql:5.7安装mkdir-p/app/docker/mysql/logmkdir-p/app/docker/mysql/datamkdir-p/app/docker/mysql/confdockerpullmysql:5.7dockerrun-d-p3......
  • mysql01-基础操作-增删查改
    连接mysqlmysql-uroot-p数据库操作创建数据库createDATABASE<数据库名>;删除数据库dropdatabase数据库名;选择数据库use数据库名;表操作创建表CREATET......
  • mysql索引优化-01
    1.1索引是什么?  mysql官方对于索引的定义:可以帮助mysql高效的获取数据的数据结构。  mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据......
  • mysql进阶
    事务 要么都成功,要么都失败ACID原子,一致,持久,隔离原子性,一致性,隔离性,持久性原子性:要么都成功,要么都失败回滚一致性:事务前后的数据完整性要保证一致持久性:事务一......