概論考點全解:函數依賴、候選碼與范式分解實戰(zhàn)指南)
簡介數據庫系統(tǒng)概論期末考試試題完整版面向計算機相關專業(yè)學生和數據庫備考者用于檢驗數據庫基礎、關系模型、SQL語言、事務處理與并發(fā)控制等核心知識的掌握情況。壓縮包內含一個Word文檔整體大小僅為170KB下載后可直接打印或在線查看。目前已有3502人學習使用是期末復習與自測的熱門資料。試題涵蓋選擇題、填空題、判斷題、簡答題和應用題等常見題型知識點涉及物理數據獨立性、數據庫系統(tǒng)特點、關系代數運算、數據庫設計步驟、數據庫管理系統(tǒng)的功能、數據安全性、事務的原子性、一致性、隔離性與持久性、封鎖機制以及數據庫恢復方法等部分題目附有解析或參考答案方便讀者對照查漏補缺。無論用于考前沖刺、日常練習還是教師組卷參考都具有較高的實用價值。1. 數據庫系統(tǒng)概論期末考什么從一道反直覺的判斷題說起這套「完整word版」期末試題在互聯(lián)網上流傳很廣但多數人拿它當題庫刷沒看懂命題套路。開篇先看一道幾乎人人都錯的判斷題「如果屬性X在函數依賴的左右都不出現(xiàn)則候選碼中必不包含X」結論是錯誤——X反而必須包含在候選碼里。第一直覺就把你帶溝里這正是期末卷的風格選擇填空考概念辨析簡答考定義準確度應用和綜合題集中考閉包計算、候選碼、范式分解、ER圖轉關系模型和SQL。分值分布很穩(wěn)定選擇填空占30到40分判斷簡答15分左右剩下45分全壓在大題上。誰適合背這份題期末考前突擊、專升本專業(yè)課、考研復試機上問答照這份真題摸清規(guī)律都能拿到保底分。2. 關系代數與SQL三大高頻題型與答題模板2.1 投影選擇連接關系代數表達式的書寫順序關系代數的專門運算幾乎每年必考。原題選擇題直接問取出滿足條件的屬性是投影選出滿足條件的元組是選擇按共同屬性值連接兩個關系是連接。概念分清只是入門大題真正考的是組合寫法。真題讓檢索「選修了程軍老師所授課程之一的學生姓名」標準答案長這樣∏SNAME(S ? SC ? σTEACHER程軍(C))答題順序有講究先寫選擇把條件落在具體關系上再寫自然連接把三張表串起來最后投影出目標列。最容易翻車的寫法是先投影再連接把連接屬性S#、C#丟掉了后面根本串不上。還有一種等價寫法是先做笛卡爾積再選擇形式上對但閱卷通常默認自然連接更標準。書寫時注意選擇和投影的希臘字母要寫對選擇是σ、投影是∏混淆了整個式子就廢了。2.2 嵌套子查詢與分組聚合SQL真題的固定套路SQL部分是送分題但每次都有大批人栽在子查詢和分組上。先看兩道原題都是最經典的考法-- 檢索所有比“王華”年齡大的學生姓名、年齡和性別 SELECT SN, AGE, SEX FROM S WHERE AGE (SELECT AGE FROM S WHERE SN 王華); -- 檢索選修課程“C2”的學生中成績最高的學生的學號 SELECT S# FROM SC WHERE C# C2 AND GRADE (SELECT MAX(GRADE) FROM SC WHERE C# C2);這種題的內層子查詢先執(zhí)行外層再拿結果去比較。比年齡那題注意子查詢必須返回單值所以條件寫AGE (...)而不是AGE ANY(...)成績最高那題則是「先定課程再套MAX」兩個條件一個都不能少。再看兩道易錯的分組題-- 檢索學生姓名、選修課程號和成績 SELECT SN, C#, GRADE FROM S, SC WHERE S.S# SC.S#; -- 檢索選修四門課程的學生總成績 SELECT S#, SUM(GRADE) FROM SC GROUP BY S# HAVING COUNT(C#) 4;第一道是多表連接題目給了別名就用別名沒有別名也要寫上表名前綴S.S#SC.S#就是連接條件。第二道是分組題GROUP BY之后過濾組要用HAVING COUNT(C#)4寫成WHERE COUNT(C#)4直接報錯。記住SUM、COUNT這類聚合函數只能出現(xiàn)在SELECT或HAVING里WHERE行過濾發(fā)生在分組之前HAVING組過濾發(fā)生在分組之后。2.3 等值連接與自然連接簡答題的標準答法這是簡答題里的??驮}問「等值連接與自然連接的區(qū)別和聯(lián)系」。直接背這個框架就能拿滿第一自然連接一定是等值連接但等值連接不一定是自然連接第二等值連接要求相等的分量不一定是公共屬性自然連接要求相等的分量必須是公共屬性第三等值連接不除去重復屬性自然連接要除去重復屬性。答題時先給兩者的表達式寫法等值連接寫R?S加條件自然連接寫R?S然后按上述三點逐條展開。面試官最想聽的就是「自然連接是去掉重復屬性的等值連接」這一句核心后面全是在解釋它。2.4 元組關系演算不會也要能寫出框架元組關系演算是很多人的盲區(qū)其實套模板就能拿分。原題要求用元組關系演算檢索選修了程軍老師課程的學生姓名和學號{T(1) | (?U)(?V)(?W)(S(U) ∧ SC(V) ∧ C(W) ∧ T[1]U[1] ∧ U[1]V[1] ∧ V[2]W[1] ∧ W[3]程軍)}框架分四段目標屬性聲明T(1)存在量詞遍歷涉及的關系連接條件用屬性序號對齊最后是選擇條件。檢索學號時只需要SC和C兩個關系因為學號就在SC表里檢索姓名才必須多一個S關系把學號換成姓名??紙錾弦痪o張容易漏量詞或漏連接條件我的習慣是先寫量詞清單再逐條寫等值條件最后補選擇條件順序不會亂。3. 閉包、候選碼與范式分解從計算到BCNF的完整鏈條3.1 屬性閉包迭代三步考場不丟分閉包計算是函數依賴部分的地基候碼判斷、范式分解全依賴它。原題給過一組典型的函數依賴集F{D→GC→ACD→EA→B}求D、(AC)和(ACD)。標準算法是迭代初始令X等于給定屬性集掃描F中每條函數依賴若左邊屬性已經在當前閉包里就把右邊屬性加進去重復掃描直到閉包不再變化。用代碼表達更清楚def closure(attrs, fds): result set(attrs) changed True while changed: changed False for lhs, rhs in fds: if set(lhs).issubset(result) and not set(rhs).issubset(result): result | set(rhs) changed True return result # 原題驗證 fds [(D,G), (C,A), (CD,E), (A,B)] print(closure(D, fds)) # DG print(closure(AC, fds)) # ABC print(closure(ACD, fds)) # ABCDEG關鍵在迭代順序算(ACD)時第一輪先由D→G得到ABCDG第二輪才輪到CD→E因為現(xiàn)在C、D、G都在閉包里CD作為左邊成立得到E最終ABCDEG。很多人在第一輪就急著找CD→E發(fā)現(xiàn)C在但D不在就跳過但閉包計算本來就是多輪過程一輪沒變化才停。寫完閉包最好反查一遍每個被加入的屬性都能找到對應的函數依賴否則就是漏了。3.2 候選碼求解L/R/LR/N四類屬性判斷法候選碼大題是期末和面試的雙重高頻點。先把屬性分四類只在函數依賴左邊出現(xiàn)的叫L類只在右邊出現(xiàn)的叫R類左右都出現(xiàn)的叫LR類左右都不出現(xiàn)的叫N類。規(guī)則直接背L類和N類屬性必須進入候選碼R類屬性必不進候選碼LR類屬性需要逐一代入閉包驗證。原題那道判斷題說的就是N類X在左右都不出現(xiàn)沒有任何依賴能函數決定它它只能靠自己所以候選碼必含X。真題求解U{A,B,C,D,E}F{A→BCCD→EB→DE→A}。分好類后逐個算閉包AABCDE成立EABCDE成立組合BC的計算(BC)先得BD再由CD→E得E由E→A得A再加A→BC閉包也是ABCDECD同理。最終候選碼是A、BC、CD、E四個。計算組合閉包時最容易漏的是鏈路BC→B→D→CD→E→A這條鏈一旦走通就全通了。驗證LR類屬性時只要有一個組合閉包能覆蓋全集這個組合就是一個候選碼但要注意子集不能再是候選碼BC成立了單B和單C都不成立才合格。3.3 范式分解消滅部分依賴再消滅傳遞依賴范式題占綜合題半壁江山原題給了完整的日產量例子。關系R職工編號日期日產量車間編號車間主任規(guī)定每個職工每天只有一個日產量、每個職工只屬一個車間、每個車間只有一個主任。先寫函數依賴職工編號日期→ 日產量 職工編號 → 車間編號 車間編號 → 車間主任關鍵碼是職工編號日期。判斷范式從1NF開始逐級查這里非主屬性車間編號、車間主任對碼是部分依賴因為單獨職工編號就能決定它們所以R只是1NF不是2NF。分解成2NF要消除部分依賴拆成R1職工編號車間編號車間主任和R2職工編號日期日產量。注意R1里的主碼變成職工編號R2的主碼還是職工編號日期外鍵職工編號維系聯(lián)系。再進3NF檢查R1職工編號→車間編號→車間主任存在傳遞依賴所以R1不是3NF繼續(xù)拆成R11職工編號車間編號和R12車間編號車間主任。到這里全部模式都是3NF而且決定因素都是候選碼也滿足BCNF。整個分解過程就是先拆部分依賴、再拆傳遞依賴每拆一步重寫一遍函數依賴集別在原關系上跳步。3.4 Armstrong公理證明合并規(guī)則的推導模板綜合題偶爾會直接考證明原題讓證明合并規(guī)則若X→Z且X→Y則X→YZ。Armstrong公理只用增廣律和傳遞律就能完成因為 X→Y對兩邊同時增廣X得 X→XY 因為 X→Z對兩邊同時增廣Y得 XY→YZ 由 X→XY 和 XY→YZ根據傳遞律得 X→YZ證明題的關鍵是寫清每一步用了哪條公理括號標注是采分點。增廣的對象要選對第一步兩邊增廣X第二步兩邊增廣Y這樣才能讓XY作為中間橋梁。這類證明題型還有自合規(guī)則、分解規(guī)則本質都是增廣和傳遞的組合。答題時先寫已知條件再寫每一步推導和依據最后落結論。4. ER圖轉關系模型主鍵外鍵一次數清4.1 實體轉模式七個實體對應七個關系ER圖轉關系模型送分也容易丟分核心就三條規(guī)則實體各轉一個關系模式屬性照搬1:N聯(lián)系在N端實體轉出的模式里加外鍵M:N聯(lián)系單獨轉一個模式主鍵是兩端實體主鍵的組合。規(guī)則看著簡單考場上栽在細節(jié)一是聯(lián)系上的屬性不能丟要并入單獨轉出的聯(lián)系模式里二是外鍵標在哪個表里要想明白。原題里有一個經典的復雜案例七個實體加八個聯(lián)系轉換后正好十個關系模式。七個實體本身就轉出七個模式剩下三個來自M:N和M:N:P聯(lián)系。4.2 聯(lián)系轉模式1:N、M:N、M:N:P的三種處理把聯(lián)系分類是第一步。1:N聯(lián)系里「1」端的主鍵放進「N」端模式中做外鍵比如「交通管理大隊管轄警察」警察模式里加外鍵大隊編號。M:N聯(lián)系單獨建表主鍵是兩端主鍵的組合比如「駕駛員與車輛的違章」「車輛與車主的被盜」。M:N:P三元聯(lián)系同樣單獨建表主鍵是三個實體主鍵的組合聯(lián)系自帶的屬性也放這張表里。原題里違章和事故就是兩個M:N:P聯(lián)系違章違章編號時間地點違章行為處理結果車輛牌號駕駛證號警號這里主鍵是違章編號三個外鍵分別是車輛、駕駛員、警察的主鍵。4.3 真題演練車輛管理系統(tǒng)的10個模式與13個外鍵原題完整給出了這個車輛管理信息系統(tǒng)的轉換結果直接可背制造商制造商編號名稱地址 交通管理大隊大隊編號地址區(qū)域電話 警察警號姓名性別出生年月大隊編號 車主身份證號姓名地址電話 車輛車輛牌號型號發(fā)動機號座位數登記日期制造商編號保險公司編號車主身份證號 駕駛員駕駛證號姓名性別地址準駕車型發(fā)證日期保險公司編號 保險公司保險公司編號名稱地址電話 違章違章編號時間地點違章行為處理結果車輛牌號駕駛證號警號 事故事故編號時間地點事故簡要處理結果車輛牌號駕駛證號警號 被盜被盜編號被盜時間被盜地點找回時間找回地點車主身份證號車輛牌號主鍵總數10個因為10個關系模式每個都恰有一個主鍵。外鍵總數13個數法是看每個模式里除了主鍵之外、參考了別的表主鍵的屬性警察1個車輛3個駕駛員1個違章3個事故3個被盜2個合計13。這類題最后總問「主鍵外鍵總數」做題時先標下劃線再標波浪線數完檢查一遍別漏了車輛表里同時有三個外鍵。4.4 局部ER圖合并學生選課與教師任課的關系模型另一道ER真題考設計流程先畫學生選課局部ER圖再畫教師任課局部ER圖合并成全局ER圖最后轉關系模型。合并時最容易丟分的是消除沖突學生實體里有「單位」屬性單位又是一個獨立實體這種情況要統(tǒng)一成實體課程在選課和任課兩個局部都出現(xiàn)合并后只保留一個課程實體。最終關系模型長這樣單位單位名電話 教師教師號姓名性別職稱單位名 課程課程編號課程名單位名 學生學號姓名性別年齡單位名 講授教師號課程編號 選修學號課程編號注意這里的聯(lián)系全部下沉成了外鍵教師和課程屬于單位所以單位名分別并入講授和選修是M:N單獨成表。全局ER圖合并的考察點在「消重」和「統(tǒng)一」答出兩張局部圖的關鍵實體和聯(lián)系再說明合并規(guī)則就有大半分數。5. 易錯點并發(fā)控制、視圖與閉包的五個失分題5.1 視圖可串行化與沖突可串行化結論錯反例在哪原題判斷「view可串行化的調度一定也是conflict可串行化的調度」很多考生直接判對因為覺得視圖可串行化聽起來范圍更小更嚴格。實際上恰好相反視圖可串行化比沖突可串行化更寬它只要求在初始讀取、最終讀取和最終寫入上與某個串行調度等價允許盲寫操作存在沖突可串行化要求的是通過交換非沖突操作達成等價。所以看法是沖突可串行化一定視圖可串行化反過來不成立。答題模板先寫「結論錯誤」再給出反例說明存在盲寫的調度就是反例一句話就夠拿分。5.2 S鎖權限加鎖后能讀不能改封鎖那題的正確選項是事務T可以對A加S鎖讀A但不能修改A其他事務只能再對A加S鎖不能加X鎖。錯選A的人最多因為「共享」兩個字讓人以為S鎖也能寫。記住鎖的相容矩陣S鎖與S鎖相容、S鎖與X鎖不相容、X鎖與任何鎖都不相容。T自己對A加了S鎖如果再修改A就要升級為X鎖但升級意味著排斥其他S鎖所以不允許。做這類題只要把S理解成「只讀共享」X理解成「獨占讀寫」永不出錯。5.3 無損連接初始表填a還是b_ij無損連接判斷的第一步是構造初始二維表規(guī)則是行對應分解后的關系模式列對應全體屬性若第j個屬性屬于第i個關系模式填a_j否則填b_ij。很多人把不在當前關系中的屬性也填成a整個表全a判斷直接失真。真題R(U)分解成R1(A,B,C)、R2(C,D)、R3(D,E)初始表就是三行分別含ABC、CD、DE其余位置填b_ij。然后逐條掃函數依賴AB→C時沒有兩行的AB取值相同跳過C→D時R1和R2的C列都是a3于是把R1的D列從b14改成a4D→E時R1、R2的D列都是a4把R1的E列改成a5。此時R1那行全部是a分解就是無損連接。做題時按「找同左→改右列」的節(jié)奏推進最后檢查是否有一行全a。5.4 候選碼判定左右都不出現(xiàn)的屬性必須入碼這道判斷題全場錯誤率最高?!笇傩訶在函數依賴的左右都不出現(xiàn)」考生的直覺是X跟任何依賴都沒關系候選碼里可有可無。錯就錯在正因為沒有任何函數依賴能決定XX的閉包只能從自身開始而候選碼必須能函數決定全部屬性所以X必須作為候選碼的一部分出現(xiàn)。答題時按四類屬性法來L類必取、R類必棄、LR類逐個驗、N類必取。原題給的F{AB→CC→DD→E}里沒有N類屬性但換一組依賴后N類就冒出來了審題先做分類。5.5 操作異常插入異常與刪除異常的語義配對規(guī)范化中的異??歼^兩道選擇題刪除操作異常指不該刪除的數據被刪除插入操作異常指應該插入的數據未被插入。錯選的同學把「異常」理解成「操作報錯」選了「應該刪除的數據未被刪除」。用例子記一個關系里學生信息和選的課綁在一起刪除選課記錄時把學生整個信息也刪掉了這就是刪除異常新生還沒選課插不進關系里這就是插入異常。答題時先判斷語義是數據沒了還是數據進不來再對應選項能選準。6. 考場四步法與押題方向大題不慌的答題節(jié)奏6.1 范式大題的完整流程依賴→碼→范式→分解所有范式大題按四步走第一步把題干的業(yè)務規(guī)則改寫成函數依賴有傳遞鏈條的拆開寫別合并寫成復合依賴第二步用四類屬性法求候選碼候選碼不唯一就把所有候選碼都列出來第三步按1NF、2NF、3NF、BCNF逐級判斷每一級都要寫依據存在局部依賴所以不是2NF存在傳遞依賴所以不是3NF第四步分解先消部分依賴再消傳遞依賴每分解一次就把新模式的函數依賴重寫一遍。SQL題也有一套固定節(jié)奏先確認涉及幾張表、連接條件是什么再寫WHERE行過濾最后考慮GROUP BY和HAVING。時間分配建議選擇填空控在20分鐘簡答15分鐘綜合題優(yōu)先做范式分解和ER轉換各留20分鐘SQL最后寫因為SQL只要連接條件對就有分。6.2 押題方向與易混對比從這份題看最可能繼續(xù)考的方向有三個無損連接判斷、BCNF逐步分解、M:N:P三元聯(lián)系轉關系模型。并發(fā)控制部分要會看圖判斷異常類型兩個事務讀同一值后各自修改寫回是丟失修改一個事務讀了另一個事務回滾前的值是讀臟數據同一事務兩次讀同一數據結果不同是不可重復讀。原題那份T1讀A100改200后回滾、T2讀200的圖就是讀臟數據。安全性部分重點背GRANT句式GRANT SELECT ON TABLE Student TO U1;五個易混點考前過一遍外碼是被參照表主鍵的副本主鍵是自身表唯一標識視圖只存定義不存數據S鎖可讀不可寫物理數據獨立性針對存儲結構改變邏輯數據獨立性針對全局邏輯結構改變應用題里如果問應用程序要不要改看變的是存儲還是邏輯模式。我自己當年考場的血淚經驗閉包計算第一輪發(fā)現(xiàn)沒變化太早停手少推一步丟一整道大題。從那以后每道范式題我都強制走一遍「分屬性類→求閉包→找全候選碼→逐級判范式」的流程閉包每輪都推到循環(huán)條件不成立才停手。這套流程能讓你在考場上少踩一半坑希望幫到你。本文還有配套的精品資源點擊獲取