軟考架構師:數據庫的范式

軟考架構師:數據庫的范式

😄生命不息,寫作不止
🔥 繼續踏上學習之路,學之分享筆記
👊 總有一天我也能像各位大佬一樣
🏆 博客首頁 ??@怒放吧德德??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語…