《軟件設計師》復習筆記(4.2)——關系代數、函數依賴、范式

目錄

一、關系代數

基本運算

笛卡爾積(×)

投影(π)

選擇(σ)

自然連接(?)

真題示例:

二、函數依賴

基本概念

Armstrong公理系統

鍵與約束

三、范式(Normalization)

第一范式(1NF)

第二范式(2NF)

第三范式(3NF)

BC范式(BCNF)

真題示例:


一、關系代數

  1. 基本運算

    • 并(∪):合并兩張表的所有記錄,重復記錄僅顯示一次。
      • 示例:S1 ∪ S2?結果包含?S1?和?S2?的所有不重復記錄。
    • 交(∩):返回兩張表中相同的記錄。
      • 示例:S1 ∩ S2?結果為?Sno='No0001', Sname='Mary', Sdept='IS'
    • 差(-):返回第一張表有而第二張表沒有的記錄。
      • 示例:S1 - S2?結果為?Sno='No0003'?和?No0004?的記錄。
  2. 笛卡爾積(×)

    • 結果包含兩表所有屬性列,記錄數為兩表記錄數的乘積。
    • 示例:S1 × S2?的每條記錄是?S1?和?S2?記錄的排列組合。
  3. 投影(π)

    • 選擇某表的特定列(可用列名或列序號表示)。
    • 示例:π(Sname)(S1)?返回?S1?的所有學生姓名。
  4. 選擇(σ)

    • 按條件篩選表中的記錄。
    • 示例:σ(Sdept='IS')(S1)?返回?Sdept?為?IS?的記錄。
  5. 自然連接(?)

    • 合并兩表中屬性相同且值相同的記錄,相同屬性列僅顯示一次。

真題示例:

給定關系R(A, B, C, D)和關系S(C, D, E),對其進行自然連接運算R?S后的屬性列為( )個;與σR.B>S.E(R?S)等價的關系代數表達式為( )。

A. 4 B. 5 C. 6 D. 7

A. σ?>?(R×S) B. π?,?,?,?,?(σ'?' > '?' ∧?=?∧?=?(R×S))

C. σ'?' > '?'(R×S) D. π?,?,?,?,?(σ?>?∧?=?∧?=?(R×S))

1. 計算自然連接運算 R?S? 后的屬性列個數

自然連接是一種特殊的等值連接,它要求兩個關系中進行比較的分量必須是相同的屬性組,并且在結果中把重復的屬性列去掉。 關系 R(A,B,C,D)? 有 4? 個屬性,關系 S(C,D,E)? 有 3? 個屬性,其中 C? 和 D? 是公共屬性。 進行自然連接時,重復的公共屬性 C? 和 D? 只保留一次,所以 R?S? 后的屬性列為 A?、B?、C?、D?、E?,共 5? 個。?

2. 找出與 σR.B>S.E?(R?S)? 等價的關系代數表達式

?σR.B>S.E?(R?S)? 表示先對 R? 和 S? 進行自然連接,然后從連接結果中選擇滿足 R? 中的屬性 B? 大于 S? 中的屬性 E? 的元組。 在進行關系代數運算時,一般先將自然連接轉換為笛卡爾積和選擇、投影運算。

  • 首先將 R?S? 轉換為笛卡爾積 R×S? 并添加等值連接條件,即 σR.C=S.C∧R.D=S.D?(R×S)? 。
  • 然后要從結果中選擇滿足 R.B>S.E? 的元組,完整的選擇條件就是 σR.B>S.E∧R.C=S.C∧R.D=S.D?(R×S)? 。
  • 用屬性的序號表示,R×S? 后的屬性順序為 R.A?(第 1? 列)、R.B?(第 2? 列)、R.C?(第 3? 列)、R.D?(第 4? 列)、S.C?(第 5? 列)、S.D?(第 6? 列)、S.E?(第 7? 列),那么選擇條件可寫為 σ2>7∧3=5∧4=6?(R×S)? 。
  • 最后,由于最終結果不需要重復的 C? 和 D? 列(在自然連接中重復列已被去掉),所以需要對結果進行投影,保留 A?、B?、C?、D?、E? 對應的列,即 π1,2,3,4,7?(σ2>7∧3=5∧4=6?(R×S))? 。


二、函數依賴

  1. 基本概念

    • 函數依賴:若屬性?X?能唯一確定?Y,則稱?Y?依賴于?X(記作?X→Y)。
    • 部分函數依賴:若?(A,B)→C,但?A→C?也成立,則?C?部分依賴于?(A,B)
    • 傳遞函數依賴:若?A→BB→C?且?A?與?B?不等價,則?A→C?是傳遞依賴。
  2. Armstrong公理系統

    函數依賴的公理系統(Armstrong) 設關系模式R<U,F>,U是關系模式R的屬性全集,F是關系模式R的一個函數依賴集。對于R<U,F>來說有以下的:

    • 自反律(Reflexivity)

      • 若屬性集Y是屬性集X的子集(Y?X),則必然存在函數依賴X→Y。
      • 示例:若X={A,B,C},Y={A,B},則X→Y自動成立。
    • 增廣律(Augmentation)

      • 若存在X→Y,則對任意屬性集Z,有XZ→YZ。
    • 傳遞律(Transitivity)

      • 若X→Y且Y→Z,則必然有X→Z。
    • 合并規則(Union)

      • 若X→Y且X→Z,則可合并為X→YZ。
    • 偽傳遞規則(Pseudo-transitivity)

      • 若X→Y且WY→Z,則XW→Z。
      • 示例:若學號→姓名,(姓名,課程)→成績,則(學號,課程)→成績。
    • 分解規則(Decomposition)

      • 若X→Y且Z?Y,則X→Z。
      • 示例:若A→{B,C},則A→B和A→C均成立。
  3. 鍵與約束

    • 超鍵:能唯一標識此表的屬性的組合。
    • 候選鍵:超鍵中去掉冗余的屬性,剩余的屬性就是候選鍵。
    • 主鍵:任選一個候選鍵,即可作為主鍵。
    • 外鍵:其他表中的主鍵。
    • 主屬性:候選鍵內的屬性為主屬性,其他屬性為非主屬性。
    • 實體完整性約束:即主鍵約束,主鍵值不能為空,也不能重復。
    • 參照完整性約束:即外鍵約束,外鍵必須是其他表中已經存在的主鍵的值,或者為空。
    • 用戶自定義完整性約束:自定義表達式約束,如設定年齡屬性的值必須在0到150之間。


三、范式(Normalization)

  1. 第一范式(1NF)

    • 表中每個字段不可再分(無嵌套表)。
    • 原始表(不符合1NF)

      員工ID員工姓名薪資/月
      001張三基本工資:5000, 補貼:1000
      002李四基本工資:6000, 補貼:800

      1NF規范化后

      員工ID員工姓名基本工資補貼
      001張三50001000
      002李四6000800
  2. 第二范式(2NF)

    • 滿足1NF,且非主屬性完全依賴于候選鍵(消除部分依賴:每一個非主屬性不會依賴復合主鍵中的某一個列)。
    • 原始表(不符合2NF)

      學號課程號課程名稱成績教師
      S001C001數學90王老師
      S001C002英語85李老師

      問題:課程名稱和教師僅依賴于課程號(部分依賴復合主鍵 (學號, 課程號))。
      2NF規范化后
      選課表(完全依賴):

      學號課程號成績
      S001C00190
      S001C00285

      課程表(消除部分依賴):

      課程號課程名稱教師
      C001數學王老師
      C002英語李老師
  3. 第三范式(3NF)

    • 滿足2NF,且非主屬性不傳遞依賴于候選鍵
    • 原始表(不符合3NF)

      學號姓名系編號系主任
      S001張三D01劉主任
      S002李四D02陳主任

      問題:系主任傳遞依賴于學號(學號 → 系編號 → 系主任)。
      3NF規范化后
      學生表

      學號姓名系編號
      S001張三D01
      S002李四D02

      系表(消除傳遞依賴):

      系編號系主任
      D01劉主任
      D02陳主任
  4. BC范式(BCNF)

    • 滿足3NF,且所有依賴的左側必須包含候選鍵
    • BC范式要求在滿足第三范式的條件下,進一步消除主屬性對于碼的部分函數依賴和傳遞依賴。簡單通俗地講,對于關系模式中的任意一個函數依賴X→Y(X是決定因素,Y是被決定因素),X必須是候選鍵或者包含候選鍵。也就是說,每一個函數依賴的左邊決定因素都必然包含候選鍵,只有滿足這樣的條件,關系模式才符合BCNF。
      • 在給定的例子中有一個涉及S、T、J三個屬性的關系模式,通過分析其依賴關系和候選鍵來判斷是否符合BCNF:

      • 候選鍵與依賴集:該關系模式的候選鍵有兩種情況,分別是組合鍵(S, T)和(S, J),依賴集為{SJ→T,T→J} 。由于S、T、J這三個屬性都能通過候選鍵組合確定,所以它們都是主屬性,因此該關系模式達到了3NF(因為不存在非主屬性,也就不存在非主屬性對碼的部分依賴和傳遞依賴)。
      • BCNF判斷:當以(S, J)作為候選鍵時,看依賴T→J,其中T在(S, J)這種候選鍵情況下并不是候選鍵,即T→J這個函數依賴的決定因素T不包含任意候選碼,所以這個關系模式不符合BCNF的要求。
      • 轉換為BCNF:為了使該關系模式滿足BCNF,將依賴T→J修改為TS→J 。這樣修改后,在新的依賴TS→J中,左邊的決定因素TS包含了候選鍵之一S,滿足了BCNF中每一個依賴的左邊決定因素都包含候選鍵的條件,此時該關系模式就達到了BCNF。
    • 原始表(不符合BCNF)

      學生ID課程教師
      S001數學王老師
      S002英語李老師

      假設依賴

      教師 → 課程(每個教師只教一門課,但教師不是候選鍵)。
      問題:存在非平凡依賴(教師 → 課程),左側不是候選鍵。

      BCNF規范化后

      學生-教師表(候選鍵為 (學生ID, 教師)):

      學生ID教師
      S001王老師
      S002李老師

      教師-課程表(教師為候選鍵):

      教師課程
      王老師數學
      李老師英語

真題示例:

給定關系模式R(U,F),U={A,B,C,D},F={AB→C,CD→B}。關系R( ),且分別有( )。

A.只有1個候選關鍵字ACB B.只有1個候選關鍵字BCD

C.有2個候選關鍵字ACD和ABD D.有2個候選關鍵字ACB和BCD

A.0個非主屬性和4個主屬性 B.1個非主屬性和3個主屬性

C.2個非主屬性和2個主屬性 D.3個非主屬性和1個主屬性

候選關鍵字的求法

根據函數依賴集 F = {AB→C, CD→B},我們可以按照以下步驟求候選關鍵字:

  1. 找出從未在右邊出現過的屬性

    • 在 F 中,右邊出現的屬性是 C 和 B
    • 因此,A 和 D 從未在右邊出現過,它們必然是候選鍵的一部分
  2. 以 A 和 D 為基礎,嘗試構建候選關鍵字

    • 嘗試 AD:
      • AD? = AD
      • 無法推導出 B 或 C(因為 AB→C 和 CD→B 都需要額外的屬性)
      • 所以 AD 不是候選關鍵字
    • 嘗試 ABD:
      • ABD? = ABD → C (AB→C) → ABCD
      • 可以推導出所有屬性,因此 ABD 是候選關鍵字
    • 嘗試 ACD:
      • ACD? = ACD → B (CD→B) → ABCD
      • 可以推導出所有屬性,因此 ACD 是候選關鍵字
    • 其他組合(如 AB、AC、AD、BC、BD、CD):這些組合的閉包都無法推導出所有屬性,因此不是候選關鍵字
  3. 結論

    • 候選關鍵字有 2 個:ABD 和 ACD

主屬性和非主屬性

  1. 主屬性:出現在任何候選關鍵字中的屬性

    • ABD 包含 A、B、D
    • ACD 包含 A、C、D
    • 因此主屬性是 A、B、C、D(所有屬性都是主屬性)
  2. 非主屬性:不包含在任何候選關鍵字中的屬性

    • 由于所有屬性都是主屬性,非主屬性數量為 0

設有關系模式R(E,N,M,L,Q),其函數依賴集為F={E→N,EM→Q,M→L}。則關系模式R達到了______;該關系模式_________。

A. 1NF B. 2NF C. 3NF D. BCNF

A. 無需進行分解,因為已經達到了3NF

B. 無需進行分解,因為已經達到了BCNF

C. 盡管不存在部分函數依賴,但還存在傳遞依賴,所以需要進行分解

D. 需要進行分解,因為存在冗余、修改操作的不一致性、插入和刪除異常

第一步:識別所有屬性

屬性集 U = {E, N, M, L, Q}

第二步:分析函數依賴集 F

F = {?E → N,?EM → Q,?M → L?}

第三步:找出從未出現在右邊的屬性(候選鍵的必須屬性)

  • 在 F 中,右邊出現的屬性:N, Q, L

  • 從未出現在右邊的屬性:E, M

  • 因此,E 和 M 必須包含在候選鍵中

第四步:以 E 和 M 為基礎構建候選鍵

  1. 嘗試 EM:

    • 計算 EM?:

      • 初始:EM

      • 應用 E→N:EMN

      • 應用 EM→Q:EMNQ

      • 應用 M→L:EMNQL

    • EM? = EMNQL = U(覆蓋所有屬性)

    • 因此,EM 是候選鍵

范式分析(基于候選鍵 EM)

1. 主屬性和非主屬性

  • 主屬性:E, M(出現在候選鍵中)

  • 非主屬性:N, L, Q

2. 檢查 2NF(消除部分函數依賴)

  • 檢查非主屬性對候選鍵的部分依賴:

    • E→N:N 依賴于候選鍵的一部分(E),屬于部分函數依賴 → 違反 2NF

    • M→L:L 依賴于候選鍵的一部分(M),屬于部分函數依賴 → 違反 2NF

    • EM→Q:Q 完全依賴于整個候選鍵 → 符合 2NF

  • 結論:不滿足 2NF

是否需要分解

  • 存在部分函數依賴和傳遞依賴,會導致:

    • 數據冗余(如 E→N 導致 N 重復存儲)

    • 更新異常(修改 E 對應的 N 需要修改多條記錄)

    • 插入異常(無法單獨插入 M→L 的信息)

    • 刪除異常(刪除 EM 會丟失 M→L 的信息)

  • 需要進行分解,因為存在冗余、修改操作的不一致性、插入和刪除異常

分解方法

  1. 將部分依賴單獨分解:

    • R1(E, N):滿足 E→N

    • R2(M, L):滿足 M→L

    • R3(E, M, Q):滿足 EM→Q

    • 每個關系模式都滿足 BCNF

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79549.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79549.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79549.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【TeamFlow】 1 TeamFlow 去中心化生產協同系統架構

總體架構設計 采用四層混合架構&#xff0c;結合分層設計與去中心化網絡&#xff1a; #mermaid-svg-qBgw9wMd8Gi0gOci {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qBgw9wMd8Gi0gOci .error-icon{fill:#552222;}…

宜搭與金蝶互通——連接器建立

一、 進入連接器工廠 圖1 連接器入口 二、 新建連接器 圖2 新建連接器第一步 1、 連接器顯示名,如圖2中①所示; 2、 圖2中②域名,是金蝶系統API接口里面的“完整服務地址”com之前的信息,不含“https”,如圖3中①所示; 3、 Base Url通常為“/”,如圖2…

【Linux系統篇】:System V IPC核心技術解析---從共享內存到消息隊列與信號量

?感謝您閱讀本篇文章&#xff0c;文章內容是個人學習筆記的整理&#xff0c;如果哪里有誤的話還請您指正噢? ? 個人主頁&#xff1a;余輝zmh–CSDN博客 ? 文章所屬專欄&#xff1a;c篇–CSDN博客 文章目錄 一.System V共享內存&#xff08;重點&#xff09;1.基本概念和原理…

C++ 20 信號量詳解

C 20 信號量詳解 一、信號量類型 C20 標準中定義了兩種信號量&#xff1a; std::counting_semaphore<Max>&#xff1a;計數信號量&#xff08;允許資源池最多有 Max 個資源&#xff09;std::binary_semaphore&#xff1a;二進制信號量&#xff08;等價于 std::countin…

Vue3中provide和inject的用法示例

在 Vue3 中&#xff0c;provide 和 inject 用于實現跨層級組件通信。以下是一個簡單的示例&#xff1a; 1. 父組件 (祖先組件) - 提供數據 javascript 復制 // ParentComponent.vue import { provide, ref, reactive } from vue;export default {setup() {// 提供靜態數據p…

Spring數據訪問全解析:ORM整合與JDBC高效實踐

目錄 一、Spring ORM集成深度剖析 &#x1f31f; ORM模塊架構設計 核心集成特性&#xff1a; 整合MyBatis示例配置&#xff1a; 二、Spring JDBC高效實踐指南 &#x1f31f; 傳統JDBC vs Spring JDBC對比 &#x1f31f; JdbcTemplate核心操作示例 批量操作優化&#xf…

UE快速預覽材質節點快捷鍵

開始預覽節點 添加快捷鍵 然后按R就能快速預覽 不用再右鍵了 非常方便

Java漏洞原理與實戰

一、基本概念 1、序列化與反序列化 (1)序列化:將對象寫入IO流中&#xff0c;ObjectOutputStream類的writeobject()方法可以實現序列化 (2)反序列化:從IO流中恢復對象&#xff0c;ObjectinputStream類的readObject()方法用于反序列化 (3)意義:序列化機制允許將實現序列化的J…

每日算法【雙指針算法】(Day 1-移動零)

雙指針算法 1.算法題目&#xff08;移動零&#xff09;2.講解算法原理3.編寫代碼 1.算法題目&#xff08;移動零&#xff09; 2.講解算法原理 數組劃分&#xff0c;數組分塊&#xff08;快排里面最核心的一步&#xff09;只需把0改為tmp 雙指針算法&#xff1a;利用數組下標來…

SQL Server 的鎖機制

SQL Server 的鎖機制是為了確保數據的一致性和事務的隔離性而設計的。以下是針對讀寫操作的鎖定行為的詳細說明&#xff1a; 1. 鎖的基本類型 SQL Server 的鎖主要分為以下幾類&#xff1a; 共享鎖&#xff08;Shared Lock, S Lock&#xff09; 用於讀操作&#xff08;如 S…

AIP目錄

專注于開發靈活API的設計文檔。 AIP是總結了谷歌API設計決策的設計文檔&#xff0c;它也為其他人提供了用文檔記錄API設計規則和實踐的框架和系統。 基礎1AIP目的和指南2AIP編號規則3AIP版本管理200先例8AIP風格與指導9術語表流程100API設計評審常見問題205Beta版本發布前置條…

CSS進度條帶斑馬紋動畫(有效果圖)

效果圖 .wxml <view class"tb"><view class"tb-line" style"transform:translateX({{w%}})" /> </view> <button bind:tap"updateLine">增加進度</button>.js Page({data: {w:0,},updateLine(){this.…

【工具-Krillin AI】視頻翻譯、配音、語音克隆于一體的一站式視頻多語言轉換工具~

Krillin AI 是全能型音視頻本地化與增強解決工具。這款簡約而強大的工具&#xff0c;集音視頻翻譯、配音、語音克隆于一身&#xff0c;支持橫豎屏格式輸出&#xff0c;確保在所有主流平臺&#xff08;嗶哩嗶哩&#xff0c;小紅書&#xff0c;抖音&#xff0c;視頻號&#xff0c…

zset.

zset 有序集合 zset 保留了 set 不能有重復元素的特點 zset 中的每個元素都有一個唯一的浮點類型的分數&#xff08;score&#xff09;與之關聯&#xff0c;使得 zset 內部的元素是可以維護有序性的。但是這個有序不是用下標作為排序依據的&#xff0c;而是根據分數&#xf…

Spring 數據庫編程

Spring JDBC 傳統的JDBC在操作數據庫時&#xff0c;需要先打開數據庫連接&#xff0c;執行SQL語句&#xff0c;然后封裝結果&#xff0c;最后關閉數據庫連接等資源。頻繁的數據庫操作會產生大量的重復代碼&#xff0c;造成代碼冗余&#xff0c;Spring的JDBC模塊負責數據庫資源…

492Q 型氣缸蓋雙端面銑削組合銑床總體設計

一、引言 492Q 型氣缸蓋是發動機的重要組成部分&#xff0c;其雙端面的加工精度對發動機的性能和可靠性有著重要影響。設計一款適用于 492Q 型氣缸蓋雙端面銑削的組合銑床&#xff0c;能夠提高加工效率和質量&#xff0c;滿足發動機生產的需求。 二、總體設計要求 加工精度&…

顎式破碎機的設計

一、引言 顎式破碎機作為礦山、建材等行業的重要破碎設備&#xff0c;其性能優劣直接影響物料破碎效率與質量。隨著工業生產規模的擴大和對破碎效率要求的提高&#xff0c;設計一款高效、穩定、節能的顎式破碎機具有重要意義。 二、設計需求分析 處理能力&#xff1a;根據目…

第三階段面試題

Nginx nginx常用模塊以及其功能 proxy模塊&#xff0c;進行代理功能 ssl模塊&#xff0c;進行HTTPS協議的使用 gzip模塊&#xff0c;進行傳輸數據的壓縮 upstream模塊&#xff0c;進行反向代理時使用 static模塊&#xff0c;靜態資源進行訪問的模塊 cache模塊&#xff0…

鴻蒙NEXT開發鍵盤工具類(ArkTs)

export declare type KeyboardCallBack (show: boolean, height: number) > void; import { AppUtil } from ./AppUtil; import { LogUtil } from ./LogUtil; import { ArrayUtil } from ./ArrayUtil;/*** 鍵盤工具類* author 鴻蒙布道師* since 2025/04/18*/ export class…

基于 LabVIEW 的電液伺服閥測試臺開發

開發了一種基于 LabVIEW 圖形編程語言的自動測試系統&#xff0c;能夠完成電液伺服閥的空載流量特性、壓力增益特性、內泄漏特性等靜態特性的自動測試。針對測試過程中干擾信號頻段與正常信號頻段接近&#xff0c;普通數字濾波器濾波效果不佳的問題&#xff0c;采用迭代濾波分解…