【数据库】业务设计——范式(三大范式和反范式化设计)
数据库 设计 业务 三大 范式
2023-09-27 14:19:52 时间
目录
一、数据库设计的第一大范式
- 数据库表中的所有字段都只具有单一属性
- 单一属性的列是由基本数据类型所构成的
- 设计出来的表都是简单的二维表
name-age列具有两个属性,一个name,一个 age不符合第一范式,把它拆分成两列
二、数据库设计的第二大范式
- 要求表中只具有一个业务主键,也就是说符合第二范式的表不能存在非主键列只对部分主键的依赖关系
有两张表:订单表,产品表
一个订单有多个产品,所以订单的主键为【订单ID】和【产品ID】组成的联合主键,这样2个组件不符合第二范式,而且产品ID和订单ID没有强关联,故,把订单表进行拆分为订单表与订单与商品的中间表
三、数据库设计的第三大范式
- 指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上相处了非主键对主键的传递依赖
其中
客户编号 和订单编号管理 关联
客户姓名 和订单编号管理 关联
客户编号 和 客户姓名 关联
如果客户编号发生改变,用户姓名也会改变,这样不符合第三大范式,应该把客户姓名这一列删除
四、反范式化设计
什么叫反范式化设计
- 反范式化是针对范式化而言得,在前面介绍了数据库设计得范式
- 所谓得反范式化就是为了性能和读取效率得考虑而适当得对数据库设计范式得要求进行违反
- 允许存在少量得冗余,换句话来说反范式化就是使用空间来换取时间
相关文章
- 历程剖析:阿里云自研HTAP数据库的技术发展之路
- RDIFramework.NET — 基于.NET的快速信息化系统开发框架 - 5.3 数据库连接管理模块
- 删除zabbix数据库日志
- OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制
- Debezium 实时同步数据库
- 数据库设计:表的设计命名的十个注意点
- Greenplum数据库,分布式数据库,大数据
- golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法
- java数据库连接的几种方法
- 使用JDBC连接MySQL数据库--典型案例分析(九)----财务帐号的DAO设计及其实现
- 实体的动态属性在数据库设计中的解决方案
- 在mysql数据库中,文章表设计有啥好的思路
- [数据库/Java SE]MySQL驱动包(mysql-connector-java.jar)问题[com.mysql.jdbc.Driver/org.gjt.mm.mysql.Driver/com.mysql.cj.jdbc.Driver]
- 图形数据库 Neo4j 开发实战
- 使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结
- 数据库字典表设计
- SQL笔记 --- 数据库设计步骤(转)
- 数据库设计规则(重新整理)
- mysql数据库binlog日志的异地备份
- 数据库表设计1
- 分布式数据库思考以及Oracle RAC如何处理多主的事务管理?
- mysql 数据库设计(转)
- noSQL数据库相关软件介绍(大数据存储时候,必须使用)
- 使用SQL_TRACE进行数据库诊断
- 物流项目中Oracle 数据库的使用及OGG是如何同步
- 分布式NoSQL列存储数据库Hbase(一)Hbase的功能与应用场景、基本设计思想
- node.js入门笔记(六)——mongoDB数据库的基本使用、JWT、socket编程
- Java 课程设计:LWZ - Online Judge学生端(数据库设计部分)
- 数据库拆分的几种方式
- 集群聊天服务器:Model数据层的框架设计和数据库代码的封装