數據庫常見面試問題
本意用於考研復試,以下是博主自己整理,博主是大四本科生,不能保證內容完全正確,請辯證地看,如果有問題可以在評論區指出我再修改。 整理不易,我就不掛個二維碼請遊客付費了,如果可以的話,麻煩高擡貴手,點一下右下角的推薦吧!
1. 三個範式
即: 屬性唯一, 記錄唯一, 表唯一
函數依賴:設R(U)是屬性集U上的關系模式,X,Y是U的子集。若對於R(U)的任意一個可能的關系r,r中不可能存在兩個元組在X上屬性值相等,而在Y上屬性值不等,則稱X函數確定Y或Y函數依賴於X,記作 X->Y
l 第一範式(1NF):每一個分量都必須是不可分的數據項
l 第二範式(2NF):如果關系模式屬於第一範式,並且每一個非主屬性完全函數依賴於任何一個候選碼,則該關系模式屬於第二範式。所謂完全函數依賴,指的是如果” Y函數依賴於X( X->Y )” ,並且對於X的任何一個真子集X‘,都有Y函數不依賴於X’。
l 第三範式(3NF):在第二範式的基礎上,數據表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是如果存在"A → B → C"的決定關系,則C傳遞函數依賴於A。因此,滿足第三範式的數據庫表應該不存在如下依賴關系: 關鍵字段 → 非關鍵字段x → 非關鍵字段y
2、完整性約束
數據庫的完整性是指數據的正確性和相容性。數據的正確性是指數據是符合現實世界語義、反映當前實際狀況的。數據的相容性是指數據庫同一對象在不同關系表中的數據是符合邏輯的。
l 實體完整性:若屬性A是基本關系B的主屬性,則A不能取空值(所謂空值是指不知道,不存在,無意義的值)
l 參照完整性:若屬性F是基本關系R的外碼,它與基本關系S的主碼Ks相對應,則對於R中每個元組在F上的值必須:
2 或者取空值(F的每個屬性值均為空值)
2 或者等於S中某個元組的主碼值
(某個同學班長屬性可以是尚為選出班長,也可以是本關系中某個元組的學號值)
l 用戶定義完整性:針對某一具體關系數據庫的約束條件,反映某一具體應用涉及的數據必須滿足的語義要求(如某個屬性必須取唯一值,某個非主屬性不能取空值)
3. 什麽是主碼?什麽是外碼?
若關系中某一屬性組的值能唯一地標識一個元組,而其子集不能,則稱該屬性組為候選碼,若一個關系有多個候選碼,則選定其中一個為主碼。
如果F是基本關系R的一個或一組屬性,但不是關系R的碼,Ks是基本關系S的主碼。如果F與Ks相對應,則稱F是R的外碼。
4. 使用索引查詢一定能提高查詢的性能嗎?為什麽?
在數據之外,數據庫系統還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找算法。這種數據結構,就是索引。
通常,通過索引查詢數據比全表掃描要快.但是我們也必須註意到它的代價. 索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能
5. 什麽是數據模型?什麽是規範化?
數據模型是一種標識實體類型及其實體間聯系的模型。典型的數據模型有網狀模型、層次模型和關系模型。
從關系數據庫的表中,除去冗余數據的過程稱為規範化。包括:精簡數據庫的結構,從表中刪除冗余的列,標識所有依賴於其它數據的數據
6. 視圖技術在數據庫設計中很有用
視圖是從一個或幾個基本表導出的表,視圖是一種虛表,它依賴數據源的實表而存在。數據庫中只存放視圖的定義,而不存放視圖對應的數據,這些數據仍存放在原來的基本表中。視圖是供程序員使用數據庫的一個窗口,能夠簡化用戶的操作,是用戶數據保密的一種手段。為了進行復雜處理、提高運算速度和節省存儲空間, 視圖的定義深度一般不得超過三層。 若三層視圖仍不夠用, 則應在視圖上定義臨時表, 在臨時表上再定義視圖。
如下兩種場景一般會使用到視圖:
(1)不希望訪問者獲取整個表的信息,只暴露部分字段給訪問者,所以就建一個虛表,就是視圖。
(2)查詢的數據來源於不同的表,而查詢者希望以統一的方式查詢,這樣也可以建立一個視圖,把多個表查詢結果聯合起來,查詢者只需要直接從視圖中獲取數據,不必考慮數據來源於不同表所帶來的差異。
7、數據庫的三級模式結構
1)外模式(子模式)是數據庫用戶能夠看見和使用的局部數據的邏輯結構和特征的描述,是數據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示。外模式通常是模式的子集,一個數據庫可以有多個外模式(視圖)
2)模式(邏輯模式)是數據庫中全體數據的邏輯結構和特征的描述,是所有用戶的公共數據視圖,一個數據庫只有一個模式。(基本表)
3)內模式(存儲模式)是數據庫物理結構和存儲方式的描述,是數據在數據庫內部的組織方式。(存儲文件)
8、數據字典:是關系數據庫管理系統內部的一組系統表,它記錄了數據庫中所有的定義信息。關系數據庫管理系統在執行SQL的數據定義語句時,實際上是在更新數據字典中的相應信息。
9、數據獨立性
l 邏輯獨立性:當模式改變時,由數據庫管理員對各個外模式/模式的映像作相應的改變,可以使外模式保持不變(應用程序是依據數據的外模式編寫的,從而應用程序不必修改,保證了數據與程序的邏輯獨立性)
l 物理獨立性:當數據庫存儲結構改變時,由數據庫管理員對各模式/內模式的映像作相應的改變,可以使模式保持不變,從而應用程序也不必改變,保證了數據與程序的物理獨立性。
10、關系與關系模式、關系數據庫的區別:關系是關系模式在某一時刻的狀態或內容。關系模式是靜態的、穩定的,而關系是動態的、隨時間不斷變化的,因為關系操作在不斷地更新著數據庫中的數據。關系數據庫是以關系模型為基礎的數據庫,它利用關系來描述現實世界,一個關系既可以用來描述一個實體及其屬性,也可以用來描述實體間的聯系。
11、觸發器:建立(附著)在某個關系(基表)上的一系列能由系統自動執行對數據庫修改得SQL語句的集合即程序,並且經過預編譯之後存儲在數據庫中
12、簡述查詢優化策略
2 如果一個表達式中多次出現某個子表達式,應該將該子表達式預先計算出結果保存起來,以免重復計算
2 選擇運算盡可能先做
2 盡量避免使用select *
2 避免在索引列上使用計算。WHERE子句中,如果索引列是函數的一部分。優化器將不使用索引而使用全表掃描。
2 避免在索引列上使用IS NULL和IS NOT NULL
13、事務:是用戶定義的一個數據庫操作序列,這些操作要麽全做,要麽全不做,是一個不可分割的工作單位。(原子性、一致性、隔離性、永久性)
14、封鎖協議
1)一級封鎖協議:事務T在修改數據R之前必須先對其加寫鎖,直到事務結束才釋放(避免丟失修改)
2)二級封鎖協議:在一級封鎖協議的基礎上增加事務T在讀取數據R之前必須先對其加讀鎖,讀完後即可釋放讀鎖(避免丟失修改和讀臟數據)
3)三級封鎖協議:在一級封鎖協議的基礎上增加事務T在讀取數據R之前必須先對其加讀鎖,直到事務結束才釋放(避免丟失修改、讀臟數據、不可重復讀)
4)兩段鎖協議:在對任何數據進行讀寫操作之前,首先要先申請並獲得對該數據的封鎖
在釋放一個鎖之後,事務不再申請和獲得任何其他封鎖
15、無損聯接分解是將一個關系模式分解成若幹個關系模式後,通過自然聯接和投影等運算仍能還原到原來的關系模式
數據庫常見面試問題