目录

键和相关属性的概念:

第一范式:

第二范式:

第三范式:

总结:

反范式化:


在关系型数据库中,关于数据表设计的基本原则,规则就称为范式。

范式是关系数据库理论的基础,也就是在设计数据库结构过程中所要遵循的规则和指导方法。

关系数据库常见的六种范式,按照范式级别从低到高是:第一范式、第二范式、第三范式、巴斯-科德范式、第四范式和第五范式(完美范式)。

范式的设计越高阶,冗余度越低,同时高级的范式一定符合低阶的范式要求。

有时候为了提高某些查询性能,可能会破坏范式规则,也就是反规范化。

键和相关属性的概念:

数据库中的键右一个或者多个属性组成。数据库中常用的几种键和属性的定义。

超键:

能唯一标识一条记录的任意属性组合。

候选键:

不含多于属性的最小超键,一个表可由多个候选键。

主键:

从候选键中选定,唯一标识记录且不允许为空值。

外键:

关联另一表主键的属性,也就是在一个表中为主键,而在另一个表中为非主键。

唯一键:

保证列值唯一但允许为空,一个表可有多个唯一键。

索引:

提高查询速度的数据结构。

主属性:

包含在任一候选键中的属性。

非主属性:

不包含在任何候选键中的属性。

第一范式:

第一范式主要是确保表中每个字段必须具有原子性,也就是每个字段不可再次拆分的最小数据单元。每个属性必须具有单个值。能否拆分是具有主观性的,根据需求来进行判断。

第二范式:

第二范式要求,在满足第一范式的基础上,还需要满足数据表里的每一条数据记录,都是可唯一标识的。而且所有非主键字段,都必须完全依赖主键的所有属性,不能只依赖主键的一部分。通过主键就能知道所有的对应行的的所有字段的值。每张表只能描述一种数据实体。

如果存在不完全依赖的字段可以将这些字段和依赖主关键字重新形成一个表。新表与旧表之间是一对多的关系。

第三范式:

第三范式在第二范式的基础上,确保数据表中的每一个非关键字段都和主键字段直接相关,也就是数据表中所有非主键字段不能依赖于其他非主键字段。非主键之间不能有依赖关系,必须相互独立。

总结:

第一范式(1NF):确保每列的值都是不可分割的原子值。确保每个字段只存储一个值。

第二范式(2NF):在满足第一范式的基础上,确保每个非主属性完全依赖于主键。消除部份依赖,确保数据的完整性。

第三范式(3NF):在满足第二范式的基础上,确保每个非主属性不传递依赖于主键。消除传递依赖,确保数据的独立性。

范式有助于消除数据库中的数据冗余,但是有可能会降低查询的效率,设计出的数据表越多,冗余度越低,在进行查询时需要进行关联多张表,可能会导致索引无效。

反范式化:

如果数据库中数据量比较大,完全按照范式设计数据表,读取数据会产生大量的关联查询,在一定程度上会影响数据库的读性能。可能会为了性能和读取效率违反范式原则,通过增加少量的冗余来提高数据库的读性能,减少关联查询,实现空间换取时间的目的。

比如说:如果经常通过表A和表B通过关联查询查询某个字段,那么可以在表A中添加这个字段,就不用进行关联查询。

反范式虽然能通过空间换时间,提升效率查询,但是也会造成:

存储空间变大。一个表中进行修改,另一个表中的冗余字段也需要进行修改。采用存储过程来支持数据的更新、删除等操作,会非常消耗系统资源。数据量小的情况下,不能体现出性能的优势,反而会让数据库的设计更加复杂。

只有当冗余信息有价值或者能大幅度提升查询效率,可以采取反范式进行优化。

在增加冗余字段时,尽量添加不需要经常修改且查询时不可获取。

注意:

在实际设计中需要权衡范式规范和查询效率,所以根据数据量和查询需求可以结合范式规范和反范式来设计表中的字段信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95940.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95940.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95940.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何解决pip安装报错ModuleNotFoundError: No module named ‘imageio’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘imageio’问题 摘要 在Python开发过程中,尤其是使用PyCharm等IDE时,遇到pip install报错是一个常见的问题,尤其是在执行安装…

2025年高效能工程项目管理软件推荐榜单:AI重构工程进度可视化与资源动态调度体系

在工程行业数字化深度变革的2025年,项目管理正面临前所未有的挑战与机遇。权威数据显示,68%的工程项目因进度追踪滞后导致交付延期,超半数企业因数据孤岛陷入跨部门协同效率低下的困境,而资源错配造成的隐性成本损失高达年度预算的15%。随着AI决策引擎、BIM全流程融合、IoT物联…

豆包 Java的23种设计模式

Java的23种设计模式是软件开发中常用的设计思想总结,根据用途可分为三大类:创建型、结构型和行为型。 一、创建型模式(5种) 用于处理对象创建机制,隐藏创建逻辑,使程序更灵活。 单例模式:保证一…

Redis7学习--详解哨兵,文件配置、主客观下线

目录 一、前言 二、哨兵 1、是什么? 2、哨兵的功能 3、案例演示 Redis Sentinel 架构 配置说明 哨兵配置文件 主从配置文件 主节点宕机后各节点状态 主从切换后配置文件的自动调整 4、哨兵运行流程和选举原理 SDOWN主观下线 ODOWN客观下线 选出新的主节…

Android 项目:画图白板APP开发(二)——历史点、数学方式推导点

上一章我们讲解了如何绘制顺滑、优美的曲线,为本项目的绘图功能打下了基础。本章我们将深入探讨两个关键功能的实现:历史点和数学方式推导点。这些功能将大幅提升我们白板应用的专业性和用户体验。一、History点之前在onTouchEvent中获取的MotionEvent&a…

25. for 循环区别

1. 基本 for 循环 for (let i 0; i < 10; i) {console.log(i); }特点&#xff1a; 适用于已知循环次数的情况使用数字索引进行迭代可以精确控制循环过程性能最好&#xff0c;开销最小 2. for…in 循环 // 数组示例 for (let i in [1, 2, 3]) {console.log(i, typeof i); //…

Trae 辅助下的 uni-app 跨端小程序工程化开发实践分享

大家好&#xff0c;我是不如摸鱼去&#xff0c;欢迎来到我的AI编程分享专栏。 这次来分享一下&#xff0c;我使用 Trae 作为主要AI编程工具&#xff0c;开发 uni-app 跨平台小程序的完整实践经验。我在实际的开发过程中&#xff0c;探索了 Trae 辅助开发的具体应用场景和效果&…

Vue3 + Element Plus 人员列表搜索功能实现

设计思路使用Element Plus的el-table组件展示人员数据 在姓名表头添加搜索图标按钮 点击按钮弹出搜索对话框 在对话框中输入姓名进行搜索 实现搜索功能并高亮匹配项下面是完整的实现代码&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><…

告别手动优化!React Compiler 自动记忆化技术深度解析

概述 React Compiler 是 React 团队开发的一个全新编译器&#xff0c;目前处于 RC&#xff08;Release Candidate&#xff09;阶段。这是一个仅在构建时使用的工具&#xff0c;可以自动优化 React 应用程序&#xff0c;无需重写任何代码即可使用。 核心特性 自动记忆化优化 …

【从零开始学习Redis】项目实战-黑马点评D2

商户查询缓存 为什么用缓存&#xff1f;作用模型缓存流程按照流程编写代码如下 Service public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {Resourceprivate StringRedisTemplate stringRedisTemplate;Overridepublic Resul…

后端Web实战-MySQL数据库

目录 1.MySQL概述 1.1 安装 1.1.1 版本 1.1.2 安装 1.1.3 连接 1.2 数据模型 1.3 SQL简介 1.3.1 分类 1.3.2 SQL通用语法 2.DDL 2.1 数据库操作 2.2 图形化工具 2.2.1 使用 2.3 表操作 2.3.1 创建表 2.3.1.1约束 2.3.1.2 数据类型 2.3.1.3 案例 2.3.2 DDL&am…

开源数据发现平台:Amundsen 本地环境安装

Amundsen 是一个数据发现和元数据引擎&#xff0c;旨在提高数据分析师、数据科学家和工程师与数据交互时的生产力。目前&#xff0c;它通过索引数据资源&#xff08;表格、仪表板、数据流等&#xff09;并基于使用模式&#xff08;例如&#xff0c;查询频率高的表格会优先于查询…

ubuntu18.04部署cephfs

比起君子讷于言而敏于行&#xff0c;我更喜欢君子善于言且敏于行。 目录 一. 准备工作&#xff08;所有节点&#xff09; 1. /etc/hosts 2. 安装python2 3. 配置普户免密sudo 4. 准备好四块盘&#xff0c;一块hddsdd为一组&#xff0c;一台设备上有一组 5. 添加源 二. 安…

VMD+皮尔逊+降噪+重构(送报告+PPT)Matlab程序

1.程序介绍:以含白噪声信号为例&#xff1a;1.对信号进行VMD分解2.通过皮尔逊进行相关性计算3.通过设定阈值将噪声分量和非噪声分量分别提取出4.对非噪声信号进行重构达到降噪效果包含评价指标&#xff1a;% SNR&#xff1a;信噪比% MSE&#xff1a;均方误差% NCC&#xff1a;波…

UE5多人MOBA+GAS 45、制作冲刺技能

文章目录添加技能需要的东西添加本地播放GC添加冲刺tag添加一个新的TA用于检测敌方单位添加冲刺GA到角色中监听加速移动速度的回调创建蒙太奇添加GE添加到数据表中添加到角色中纠错添加技能需要的东西 添加本地播放GC 在UCAbilitySystemStatics中添加 /*** 在本地触发指定的游…

分库分表和sql的进阶用法总结

说下你对分库分表的理解分库分表是⼀种常⽤的数据库⽔平扩展&#xff08;Scale Out&#xff09;技术&#xff0c;⽤于解决单⼀数据库性能瓶颈和存储容量限制的问题。在分库分表中&#xff0c;数据库会根据某种规则将数据分散存储在多个数据库实例和表中&#xff0c;从⽽提⾼数据…

紫金桥RealSCADA:国产工业大脑,智造安全基石

在工业4.0时代&#xff0c;数字化转型已成为企业提升竞争力的核心路径。作为工业信息化的基石&#xff0c;监控组态软件在智能制造、物联网、大数据等领域发挥着关键作用。紫金桥软件积极响应国家“两化融合”战略&#xff0c;依托多年技术积淀与行业经验&#xff0c;重磅推出跨…

朗空量子与 Anolis OS 完成适配,龙蜥获得抗量子安全能力

近日&#xff0c;苏州朗空后量子科技有限公司&#xff08;以下简称“朗空量子”&#xff09;签署了 CLA&#xff08;Contributor License Agreement&#xff0c;贡献者许可协议&#xff09;&#xff0c;加入龙蜥社区&#xff08;OpenAnolis&#xff09;。 朗空量子是一家后量子…

C#WPF实战出真汁08--【消费开单】--餐桌面板展示

1、功能介绍在这节里&#xff0c;需要实现餐桌类型展示&#xff0c;类型点击切换事件&#xff0c;餐桌面板展示功能&#xff0c;细节很多&#xff0c;流程是UI设计布局-》后台业务逻辑-》视图模型绑定-》运行测试2、UI设计布局TabControl&#xff0c;StackPanel&#xff0c;Gri…

2025年机械制造、机器人与计算机工程国际会议(MMRCE 2025)

&#x1f916;&#x1f3ed;&#x1f4bb; 探索未来&#xff1a;机械制造、机器人与计算机工程的交汇点——2025年机械制造、机器人与计算机工程国际会议&#x1f31f;MMRCE 2025将汇聚全球顶尖专家、学者及行业领袖&#xff0c;聚焦机械制造、机器人和计算机工程领域的前沿议题…