软考架构师:数据库的范式

😄生命不息,写作不止
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆 博客首页   @怒放吧德德  To记录领地
🌝分享学习心得,欢迎指正,大家一起学习成长!
🌝AI : Grok

转发请携带作者信息 @怒放吧德德 @一个有梦有戏的人

问题 1:数据库的范式

提问:

数据库的范式

一、AI 讲解

数据库的范式(Normalization)是数据库设计中的一个重要概念,它是为了减少数据冗余、避免更新异常,并保持数据一致性而提出的规则。简单来说,范式就像是给数据库表“瘦身”和“整理”的标准,让数据存储更高效、更可靠。范式从低到高逐步加强,每一个更高的范式都必须满足前一个范式的要求。

下面,我用通俗的语言讲解常见的范式,包括1NF(第一范式)、2NF(第二范式)、3NF(第三范式)和BCNF(Boyce-Codd范式)。我会先用表格呈现每个范式的定义、要求和例子,然后补充一些总体说明。

范式定义和要求例子
1NF(第一范式)表中的每个属性(列)必须是原子值,不能是集合或多值;简单说,就是每个单元格只能放一个值,不能放列表或数组。假设有一个学生表:学生ID、姓名、电话。如果电话列放“123456,789012”,这就不符合1NF;应该拆分成多行或单独表,比如学生ID=1,姓名=张三,电话=123456;另一行学生ID=1,姓名=张三,电话=789012。
2NF(第二范式)必须先满足1NF;此外,非主键属性必须完全依赖于整个主键,不能部分依赖(如果主键是复合的)。通俗地说,非主键列不能只依赖主键的一部分。订单表:主键(订单ID + 商品ID),属性:订单日期、商品名称。如果商品名称只依赖商品ID(不依赖订单ID),这就不符合2NF;应该把商品名称拆到单独的商品表中。
3NF(第三范式)必须先满足2NF;此外,非主键属性不能传递依赖于主键(即非主键之间不能有依赖关系)。简单说,非主键列不能互相依赖。员工表:员工ID(主键)、部门ID、部门名称。如果部门名称依赖部门ID(而部门ID依赖员工ID),这就不符合3NF;应该把部门ID和部门名称拆到部门表中。
BCNF(Boyce-Codd范式)必须先满足3NF;此外,任何决定因素**(能决定其他属性的属性)都必须是候选键**。通俗地说,消除主属性对码的部分和传递函数依赖。教授教课表:(教授ID + 课程ID)为主键,属性:学生ID。如果教授ID决定课程ID,但教授ID不是候选键,这就不符合BCNF;需要进一步拆表。

这些范式的好处是减少冗余,比如在不范式化的表中,更新一个数据可能需要改多处,容易出错。缺点是查询时可能需要更多JOIN操作,影响性能,所以实际设计时有时会反范式化(denormalization)来优化。

举个整体例子:想象一个图书馆借书系统。如果不范式化,表可能重复存书名、作者等;范式化后,书表单独存书信息,借书表只存借书记录,减少重复。

二、AI 出题

(1)题目

  1. 数据库范式设计的主要目的是什么?
    A. 增加数据冗余
    B. 减少数据冗余和异常
    C. 提高查询复杂度
    D. 降低数据安全性
  2. 第一范式(1NF)的要求是什么?
    A. 非主键属性完全依赖主键
    B. 每个属性都是原子值
    C. 消除传递依赖
    D. 所有决定因素都是候选键
  3. 如果一个表的主键是复合键(如A+B),但某个非主键属性只依赖A,这违反了哪个范式?
    A. 1NF
    B. 2NF
    C. 3NF
    D. BCNF
  4. 第三范式(3NF)在第二范式的基础上增加了什么要求?
    A. 属性原子性
    B. 部分依赖消除
    C. 传递依赖消除
    D. 复合主键要求
  5. BCNF范式相对于3NF的加强点是什么?
    A. 要求属性原子值
    B. 消除非主键间的依赖
    C. 所有决定因素必须是候选键
    D. 只处理单主键表
  6. 以下哪个例子不符合1NF?
    A. 表中一列存储多个电话号码,用逗号分隔
    B. 非主键完全依赖主键
    C. 表有复合主键
    D. 表有唯一索引
  7. 在一个学生成绩表中,如果“班级名称”依赖“班级ID”,而“班级ID”依赖“学生ID”,这违反了哪个范式?
    A. 1NF
    B. 2NF
    C. 3NF
    D. BCNF
  8. 数据库设计中,为什么有时会选择反范式化?
    A. 为了严格遵守范式
    B. 为了提高查询性能
    C. 为了增加数据冗余
    D. 为了简化表结构
  9. 以下关于范式的说法正确的是?
    A. 所有数据库都必须达到BCNF
    B. 更高的范式总是更好的
    C. 范式化可以减少插入、更新和删除异常
    D. 1NF允许多值属性
  10. 如果一个表满足3NF,但有一个非候选键属性决定了另一个属性,这可能违反了哪个范式?
    A. 1NF
    B. 2NF
    C. 3NF
    D. BCNF

(2)答案和解析

  1. 答案:B。
    解析:数据库范式的主要目的是通过规范化表结构来减少数据冗余、避免插入/更新/删除异常,并保持数据一致性。例如,如果不范式化,更新一个人的地址可能需要改多行数据,容易出错;范式化后,只改一处即可。
  2. 答案:B。
    解析:1NF的核心要求是确保表中每个属性的值都是不可分的原子值,不能是集合或列表。例如,不能在一列中放“苹果,香蕉”,而应拆分成多行或多列。这是最基本的范式,其他范式都以此为基础。
  3. 答案:B。
    解析:这描述了部分函数依赖,即非主键属性只依赖复合主键的一部分,违反了2NF的要求。2NF要求非主键必须完全依赖整个主键。例如,在(订单ID + 商品ID)为主键的表中,商品价格不能只依赖商品ID。
  4. 答案:C。
    解析:3NF在2NF的基础上要求消除非主键属性之间的传递依赖,即一个非主键不能通过另一个非主键间接依赖主键。例如,员工表中“部门经理”不能通过“部门ID”依赖“员工ID”,应拆表。
  5. 答案:C。
    解析:BCNF是3NF的加强版,它要求表中任何函数依赖的左边(决定因素)都必须是候选键,从而消除更多潜在异常。例如,在某些表中,即使满足3NF,如果一个非键属性决定了主键部分,也需调整。
  6. 答案:A。
    解析:用逗号分隔多个电话号码意味着该列不是原子值,违反1NF。1NF要求每个单元格只有一个简单值。其他选项如复合主键或索引与1NF无关。
  7. 答案:C。
    解析:这是典型的传递依赖:“班级名称”依赖“班级ID”,“班级ID”依赖“学生ID”,违反3NF。3NF要求非主键不能互相依赖,应将班级信息拆到单独表中,只在学生表存班级ID。
  8. 答案:B。
    解析:反范式化(denormalization)是有意引入一些冗余来减少JOIN操作,从而提高查询速度。例如,在报表表中重复存一些数据,避免频繁联表查询。虽然增加了冗余,但适合读多写少的场景。
  9. 答案:C。
    解析:范式化确实能减少异常,如插入异常(无法插入不完整数据)。但不是所有数据库都需BCNF(有时3NF够用),更高的范式不总是更好(可能牺牲性能),1NF不允许多值属性。
  10. 答案:D。
    解析:如果满足3NF但有非候选键决定了其他属性,这违反BCNF。BCNF针对这种情况加强,例如在教授-课程表中,如果教授决定了系别,但教授不是候选键,就需调整表结构。

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

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

相关文章

[激光原理与应用-184]:光学器件 - 光学器件中晶体的用途、分类、特性及示例

一、用途光学晶体在光学器件中扮演核心角色,主要应用于以下领域:光学系统调节与控制:制作偏振器、滤光器、透镜等,调节光的传播方向、强度及偏振状态。激光技术:作为激光介质,实现频率转换、调制、偏转及Q开…

深入解析C#并行编程:从并行循环到异步编程模式

在当今多核处理器普及的时代,高效利用计算资源成为开发者必备技能。本文将深入剖析C#中的并行编程利器——任务并行库(TPL)和经典异步模式,助你提升程序性能。 🚀 一、任务并行库(TPL)核心机制 1. Parallel.For:并行化的for循环 通…

从零到精通:嵌入式BLE开发实战指南

目录 1. BLE的魅力与核心概念:为什么选低功耗蓝牙? BLE的核心术语 为什么选择BLE? 2. 硬件选型:选择合适的BLE芯片 热门BLE芯片推荐 选型时的关键考量 3. 开发环境搭建:让你的代码跑起来 工具准备 安装步骤 常见问题解决 4. 深入GATT:打造你的BLE服务 服务设计…

15.NFS 服务器

15.NFS 服务器 NFS 服务介绍 NFS是Network File System的缩写,即网络文件系统,是一种基于TCP/IP协议的网络文件共享协议,最早由Sun公司开发,它允许不同操作系统的计算机通过网络共享文件和目录,实现跨平台的文件访问和管理。 核心…

站在Vue的角度,对比鸿蒙开发中的数据渲染二

第二类数字&#xff08;Number&#xff09;的操作 2.1普通数字的显示 vue中直接显示 <template> <div><h3>学习Vue</h3><div>{{ num }}</div> </div></template><script lang"ts" setup>import {ref} fr…

Python自动化测试实战:reCAPTCHA V3绕过技术深度解析

Python自动化测试实战&#xff1a;reCAPTCHA V3绕过技术深度解析 摘要 reCAPTCHA V3作为Google推出的无感验证码系统&#xff0c;通过先进的机器学习算法分析用户行为模式&#xff0c;已成为当前最主流的反机器人解决方案。本文将深入解析其核心检测机制&#xff0c;并提供完…

简单Modules 的配置与管理,灵活应对多版本软件环境的需求。

参考文档 官方手册&#xff1a;https://modules.readthedocs.io Modulefile 语法&#xff1a;modulefile — Modules documentation Environment Modules 工具 Environment Modules 是一个环境管理工具&#xff0c;用于动态加载、卸载和管理不同版本的软件环境变量&#xff…

java内部类-匿名内部类

匿名内部类必须有一个已经存在的类或者接口

上篇:《排序算法的奇妙世界:如何让数据井然有序?》

个人主页&#xff1a;strive-debug 排序算法精讲&#xff1a;从理论到实践 一、排序概念及应用 1.1 基本概念 **排序**&#xff1a;将一组记录按照特定关键字&#xff08;如数值大小&#xff09;进行递增或递减排列的操作。 1.2 常见排序算法分类 - **简单低效型**&#xff…

2025.8.6 图论(1)Solution

2025.8.6 图论&#xff08;1&#xff09;Solution 割点 学习资料&#xff0c;在 csdn 或洛谷上看都行。是模板题题解&#xff08;之一&#xff09;。 T1&#xff1a;Atserckcn与逃离恐怖老师。 题意简述&#xff1a;从一个图中选定一个点&#xff0c;使得删除这个点后图不连…

OpenBayes 教程上新丨一键部署 gpt-oss-20b,实测开源推理模型新 SOTA,性能直逼 o3‑mini

时隔 6 年&#xff0c;自 GPT-2 以来&#xff0c;OpenAI 终于再度发布开源大模型——gpt-oss-120b 和 gpt-oss-20b&#xff0c;前者以千亿级参数专为复杂推理与知识密集型场景设计&#xff0c;后者则更适合低延迟、本地或专业垂直领域使用&#xff0c;可在消费级硬件&#xff0…

nlp-句法分析

目录 一、句法概述 1、成分语法理论概述 &#xff08;1&#xff09;分析过程 &#xff08;2&#xff09;缺点 2、依存语法理论概述 &#xff08;1&#xff09;依存关系、配价模式 &#xff08;2&#xff09;分类 &#xff08;3&#xff09;优势&#xf…

linux磁盘加密

在Linux中&#xff0c;磁盘加密是一种保护数据不被未授权访问的方法。有多种工具和策略可以实现磁盘加密&#xff0c;包括使用Linux内核的内置功能&#xff0c;如dm-crypt&#xff0c;以及使用更高级的解决方案&#xff0c;如LUKS&#xff08;Linux Unified Key Setup&#xff…

大数据架构演变之路

目录 一、各阶段的架构简介 二、各个架构的详细解释 1. 传统离线架构 2.1. Lambda架构-离线数仓分析实时链路分析 2.2. Lambda架构-离线数仓实时数仓 3. Kappa/流批一体架构 4. 湖仓一体架构 三、总结 一、各阶段的架构简介 技术架构 核心驱动(核心需求) ‌关键技术 …

STM32 HAL库驱动0.96寸OLED屏幕

STM32 HAL库驱动0.96寸OLED屏幕 项目概述 本项目使用STM32 HAL库为0.96寸OLED屏幕编写驱动程序。OLED屏幕通过I2C接口与STM32单片机通信&#xff0c;实现文本、数字和图形的显示功能。 项目仓库地址&#xff1a;STM32_Sensor_Drives 硬件连接 OLED屏幕通过I2C接口与STM32连…

横向越权:修改参数访问不属于自己的数据

一、什么是横向越权定义 横向越权&#xff08;Horizontal Privilege Escalation&#xff09;是指 同一权限级别的用户&#xff0c;通过篡改请求参数或资源标识&#xff0c;访问本不属于自己的数据或功能。例子 假设一个在线商城&#xff0c;用户 A 访问订单详情的 URL&#xff…

攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DNS欺骗、DHCP饿死)

实验一 ARP欺骗一、拓扑二、实验准备、1.设置终端漏洞靶机集合选择需要的数量和镜像打开设备上的驱动精灵安装网卡安装成功后查看IP地址、网关信息等。三、实验步骤1.实验原理中间人&#xff08;攻击者&#xff09;在终端与网关之间持续发送伪造的 ARP 应答包&#xff0c;双向欺…

VSCode 禁用更新检查的方法

通过设置菜单禁用 这是最直接和推荐的方法&#xff0c;可以永久禁用自动更新&#xff1a; 打开 VSCode。点击左下角的齿轮图标&#xff0c;然后选择“设置”。或者通过菜单栏“文件” > “首选项” > “设置”进入。在顶部的搜索框中输入“update”。找到“Update: Mode”…

Flutter - 应用启动/路由管理

一、应用入口1. 初始化 Flutter 底层绑定 &#xff0c;运行 App。import package:flutter/material.dart; import package:flutter_base/Application.dart;void main() {// 确保绑定初始化WidgetsFlutterBinding.ensureInitialized();// App初始化Application.init(); }2. 注册…

MySQL 数据操作全流程:创建、读取、更新与删除实战

MySQL系列 文章目录MySQL系列前言一、Create(创建)并插入数据1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入冲突时同步更新1.4 冲突时替换二、Retireve读取数据2.1 全列查询2.2 查询指定列2.3 查询字段为表达式2.4 结果去重 DISTINCT2.5 where条件筛选2.6 order by语…