天天看點

資料庫名詞解釋&概念題

以下是準備南大軟院複試時整理的。

1. 解釋事務和程式還有他們的差別。

–事務:事務是資料庫提供的一種手段,通過這一手段,應用程式員将一系列的資料庫操作組合在一起作為一個整體以便資料庫系統提供一組保證,即事務的ACID性質。

–程式:由序列組成,告訴計算機如何完成一個具體的任務。

2. 完整性限制的含義和内容。

關系完整性是為保證資料庫中資料的正确性和相容性,對關系模型提出的某種限制條件或規則。包括域完整性,實體完整性、參照完整性和使用者定義完整性,其中域完整性,實體完整性和參照完整性,是關系模型必須滿足的完整性限制條件。

–域完整性

域完整性是保證資料庫字段取值的合理性

SQL限制:檢查(CHECK)、預設值(DEFAULT)、不為空(NOT NULL)、外鍵(FOREIGN KEY)等限制

–實體完整性

若屬性(指一個或一組屬性)A是基本關系R的主屬性,則A不能取空值

SQL限制:Primary Key & Unique

–參照完整性

若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼K相對應(或者說F引用了K),則對于R中每個元組在F上的值必須為:或者取空值;或者等于S中某個元組的主碼值

–使用者定義的完整性

針對某一具體關系資料庫的限制條件,它反映某一具體應用所涉及的資料必須滿足的語義要求

SQL限制:NOT NULL,DEFAULT、CHECK限制

3. 排它鎖,共享鎖,死鎖,活鎖。

–排它鎖:又稱寫鎖(X鎖),若事務T對資料對象A加上X鎖,則事務T既可以讀A也可以修改A,其他事務不能再對A加任何鎖,直到T釋放A上的鎖。這保證了其他事務在T釋放A上的鎖之前不能再讀取和修改A。

–共享鎖:又稱讀鎖(S鎖),若事務T對資料對象A加上S鎖,則事務T可以讀A但不能修改A,其他事務隻能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這保證了其他事務可以讀A,但在T釋放A上的S鎖之前不能對A作任何修改。

–死鎖:如果事務T1封鎖了資料R1,事務T2封鎖了資料R2,然後T1又請求封鎖R2,由于T2已經封鎖了R2,于是T1等待T2釋放R2上的鎖。接着T2又請求封鎖R1,由于T1已經封鎖了R1,于是T2也隻能等待T1釋放R1上的鎖。于是T1和T2互相等待,T1和T2兩個事務永遠也不能結束,形成死鎖。

–活鎖:如果事務T1封鎖了資料R,事務T2又請求封鎖R,于是T2等待。T3又請求封鎖R,當T1釋放了R上的封鎖後系統首先準許了T3的請求,T2仍然等待。然後T4又請求封鎖R,T3釋放了R上的封鎖後系統首先準許了T4的請求…T2有可能永遠等待,這就是活鎖的情形。

4、幾個範式的含義内容?什麼時候可以不遵守範式

–1NF:每一個分量必須是不可分的資料項。

–2NF:若R屬于1NF,且每一個非主屬性完全函數依賴于碼,則R屬于2NF

–3NF:若R屬于2NF,且每一個非主屬性不傳遞依賴于碼。

–BCNF:所有的主屬性對每一個不包含它的碼,也是完全函數依賴;

–4NF:若R屬于1NF,且對于R的每個非平凡多值依賴X->->Y(Y不屬于X),X都含有碼。屬性之間不允許有非平凡且非函數依賴的多值依賴。

–反範式:

遵循範式總體上來說是為了保證資料的integrity和減少備援,但是,一個完全按照範式設計的備援極低的資料庫,比如在一些資料表中不僅存作為外鍵的user_id,同樣存user_name,這樣雖然違反資料庫範式增加了user_name字段,

但是卻提高了效率,減少了擷取user_id後再去user表中擷取user name的操作,很可能在性能上會輸給備援相對多一些的資料庫

–差別:

第一範式和第二範式在于是不是可以分出兩張表

第二範式是說一張表中包含了多種不同的實體屬性,那麼要必須分成多張表

第三範式是要求已經分成了多張表,那麼一張表中隻能有另一張表中的id(主鍵),而不能有其他的任何資訊(其他的資訊一律用主鍵在另一表查詢)

5、資料庫設計的步驟

–需求分析(常用自頂向下)

進行資料庫設計首先必須準确了解和分析使用者需求(包括資料與處理)

–概念結構分析(常用自底向上)

通過對使用者需求進行綜合,歸納與抽象,形成了一個獨立于具體DBMS的概念模型

–邏輯結構分析(E-R圖)

邏輯結構設計是将概念結構轉換為某個DBMS所支援的資料模型,并将進行優化

–實體結構分析

實體設計是為邏輯資料結構模型選取一個最适合應用環境的實體結構(包括存儲結構和存取方法)

–資料庫實施

設計人員營運DBMS提供的資料庫語言(如sql)及其宿主語言,根據邏輯設計和實體設計的結果建立資料庫,編制和調試應用程式,組織資料入庫,并進行試運作

–資料庫運作和維護

資料庫應用系統經過試運作後,即可投入正式運作,在資料庫系統運作過程中必須不斷地對其進行評價,調整,修改6、資料庫管理系統:

–是一種操作和管理資料庫的大型軟體,用于建立、使用和維護資料庫。

7、遊标:

–SQL的遊标是一種臨時的資料庫對象,即可以用來存放在資料庫表中的資料行副本,也可以指向存儲在資料庫中的資料行的指針。遊标提供了在逐行的基礎上操作表中資料的方法。

8、 視圖:

–由一個子查詢産生的表,但它可以有自己的名字,在很多方面都類似于基本表。

–作用:簡化使用者對資料的了解和使用者的操作;通過視圖使用者隻能查詢和修改他們所能見到的資料,比較安全。

9、 索引:

–索引是一種特殊類型的資料庫對象,建立索引要單獨占用空間。SQL索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系統的性能,加快資料的查詢速度與減少系統的響應時間,更好、更快的檢索和定位關鍵字

–索引資料結構

索引的實作通常使用B樹及其變種B+樹。

10、ACID特性:

–Atomic原子性:整個資料庫是不可分割的工作機關

–Consistency一緻性:指資料庫事務不能破壞關系資料的完整性和業務邏輯的一緻性

–Isolation隔離:在并發環境下,當不同的事務同時操縱相同資料時,每個事務都有各自的完整資料空間。

–Durability持久性:隻要事務成功結束,它對資料庫所做的更新就必須永久儲存下來。

11、兩階段封鎖協定:

–指所有事務都必須分兩個階段對資料項加鎖和解鎖。在對任何資料進行讀、寫操作之前,事務首先要獲得對該資料的封鎖。在釋放一個封鎖之後,事務不再申請和獲得其他任何鎖。

12、串行排程、可串行化排程、沖突、沖突可串行化排程

–串行排程:各個事務的操作沒有交叉,也沒有互相幹擾。

–可串行化排程:

多個事務的并行執行是正确的,當且僅當其結果與按某一次序串行地執行這些事務時的結果相同。

–沖突:指不同的事務對同一資料的讀寫操作和寫寫操作。

–沖突可串行排程:

一個排程Sc在保證沖突操作次序不變的情況下,通過交換兩個事務不沖突操作的次序得到另一個排程Sc’,如果Sc’是串行的,稱排程Sc是沖突可串行化的排程。

13、SQL與NOSQL的差別,各自的特征、應用場景。又各自應用于哪些具體應用中。

–差別:

1)SQL指關系型資料庫,NOSQL泛指非關系型資料庫;

2)SQL中資料存儲在特定的表中,NOSQL中資料存儲方式可以是JSON文檔、哈希表或其他方式。

3)SQL中必須定義好表和字段結構後才能存儲資料,在NOSQL中資料可以在任何時候任何地方添加,不需要先定義表。

4)SQL中如果需要增加外部關聯資料的話,規範化做法是在原表中增加一個外鍵,關聯外部資料表。而NOSQL除了這種規範化外部資料表的做法外,還能采用非規範化方式把外部資料直接放到原資料集中。

–應用場景:

關系型資料庫适合存儲結構化資料,這些資料的規模、增長速度通常是可預期的;

NOSQL适合存儲非結構化資料,這些資料通常是海量的,而且增長速度是難以預期的。

–具體應用:

SQL具體應用:MySQL、Oracle

NOSQL具體應用:MongoDB、Redis

14、SQL有什麼優化政策。從硬體、系統、應用各級分析。

–實體優化:

基于啟發式規則的存取路徑選擇優化:大多數情況下适用,但不是每種都是最好規則

基于代價估算的優化:估計不同執行政策政策額的代價,選擇最小代價執行

–查詢優化:

1.選擇操作

全表掃描算法:算法簡單,适用于規模較小的,較大的表效率低

索引掃描算法:屬性上用索引(B+樹索引或hash索引),實作快速查找

2.連接配接操作

嵌套循環算法:最簡答可行的算法,可以處理非等值連接配接在内的各種操作

排序-合并算法:适用于排好序的表,等值連接配接常用方法

索引連接配接算法:建立索引進行連接配接

Hash join算法:處理等值連接配接的算法,基于hash函數

–代數優化:

關系代數表達式等價變換規則:用相同關系代替對應的不同表達式結果相同的關系

查詢樹的啟發式優化:用啟發式的一些規則對查詢樹進行優化

15、大資料和BI資料分析有什麼不同,應用大資料的場景、來源、技術架構。

–BI(Business Intelligence)即商務智能:

它是一套完整的解決方案,用來将企業中現有的資料進行有效的整合,快速準确地提供報表并提出決策依據,幫助企業做出明智的經營決策。

–大資料:

一種規模大到在擷取、存儲、管理、分析方面大大超出了傳統資料庫軟體工具能力範圍的資料集合,具有海量的資料規模、快速的資料流轉、多樣的資料類型和價值密度低四大特征。

–大資料的應用場景:那些有很大價值的資料将更有利我們深入了解業務運轉和與客戶的互動

–大資料來源:主要是社會日常運作和各種服務中實時産生的數字資料

–大資料技術架構:大規模并行處理資料庫、資料挖掘、分布式檔案系統、分布式資料庫、雲計算平台

16、 關系資料庫中的關系含義。

–在關系模型中,現實世界的實體和實體間的各種聯系均采用單一的資料結構,即關系來表示。

17、 外鍵索引的作用。

–當對父表進行更新的時候,如果在子表中的外鍵沒有使用索引,則在更新的過程中整個子表将被鎖定,而往往實際上并不需要鎖定整個子表,而僅僅需要鎖定子表中的幾條記錄。這樣就會大大影響資料庫通路的并發性,甚至有可能造成死鎖的情況。

18、 什麼是分區;分區鍵類型。

–分區表是将大表的資料分成許多小的子集,而這些小的子集便稱為分區。

–分區類型

一. 範圍分區:

範圍分區将資料基于範圍映射到每一個分區,這個範圍是你在建立分區時指定的分區鍵決定的。這種分區方式是最為常用的,并且分區鍵經常采用日期。

二.清單分區:

該分區的特點是某列的值隻有幾個,基于這樣的特點我們可以采用清單分區。

三.散列分區:

這類分區是在列值上使用雜湊演算法,以确定将行放入哪個分區中。當列的值沒有合适的條件時,建議使用散列分區。散列分區為通過指定分區編号來均勻分布資料的一種分區類型,因為通過在I/O裝置上進行散列分區,使得這些分區大小一緻。

–分區鍵:表分區鍵是一個或多個表列的有序集合。表分區鍵列中的值用來确定每個表行所屬的資料分區。

7.集中式資料庫和分布式資料庫含義;應用場景;有哪些不同的應用。

–集中式資料庫

  1. 含義

    叢集是指多台伺服器集中在一起,實作同一業務,作為一個整體存在,向使用者提供一組網絡資源,這些單個的伺服器就是叢集的節點。

    2.場景

    一、科學計算叢集,它可以把一個問題的資料分布到多台的計算機上,利用這些計算機的共同資源來完成計算任務,進而可以解決單機不能勝任的工作

    二、高可用叢集,這類叢集緻力于提供高度可靠的服務。就是利用叢集系統的容錯性對外提供7*24小時不間斷的服務,如高可用的檔案伺服器、資料庫服務等關鍵應用。

    3.應用

    天氣預報、石油勘探與油藏模拟、分子模拟、生物計算等。

    –分布式資料庫

  2. 含義

    是指将一個業務拆分不同的子業務,分布在不同的機器上執行,每台計算機可單獨放在一個地方,有自己局部的資料庫,位于不同地點的許多計算機通過網絡互相連接配接,共同組成一個完整的、全局的、邏輯上集中、實體上分布的大型資料庫。

  3. 場景

    一、 提供多個對外的接口,按照一定規則,分派不同請求由不同接口來處理。

    二、把一個功能拆分成多個功能,不同功能分布部署到不同伺服器上

    3.應用

    大型應用QQ、物聯網資料、檔案索引(大量的圖檔、文檔、視訊資料)

◆ DDL:資料定義語言(Data Definition

Language),用于定義資料庫的三級結構,包括外模式、概念模式、内模式及其互相之間的映象,定義資料的完整性、安全控制等限制。

◆ DML:資料操縱語言(Data ManipulationLanguage),用于讓使用者或程式員使用,實作對資料庫中資料的操作。基本的資料操作分成兩類四種:檢索(查詢)和更新(插入、删除、修改)。DML分成互動型DML和嵌入型DML兩類。依據語言的級别,DML又可分成過程性DML和非過程性DML兩種。

◆超鍵:在關系中能唯一辨別元組的屬性集稱為關系模式的超鍵。(注意,超鍵是一個屬性集)

◆候選鍵:不含有多餘屬性的超鍵稱為候選鍵。

◆主鍵:使用者選作元組辨別的一個候選鍵為主鍵。

◆外鍵:某個關系的主鍵相應的屬性在另一關系中出現,此時該主鍵在就是另一關系的外鍵,如有兩個關系S和SC,其中S#是關系S的主鍵,相應的屬性S#在關系SC中也出現,此時S#就是關系SC的外鍵。

◆ 宿主語言:編寫應用程式的語言(即進階程式設計語言)在資料庫技術中稱為宿主語言(host

language),簡稱主語言。

◆ DDL:資料定義語言(Data DefinitionLanguage),用于定義資料庫的三級結構,包括外模式、概念模式、内模式及其互相之間的映象,定義資料的完整性、安全控制等限制。

◆ DML:資料操縱語言(Data ManipulationLanguage),用于讓使用者或程式員使用,實作對資料庫中資料的操作。基本的資料操作分成兩類四種:檢索(查詢)和更新(插入、删除、修改)。DML分成互動型DML和嵌入型DML兩類。依據語言的級别,DML又可分成過程性DML和非過程性DML兩種。

◆ 互動型DML:這類DML自成系統,可在終端上直接對資料庫進行操作。

◆ 嵌入型DML:這類DML是嵌入在主語言中使用。此時主語言是經過擴充能處理DML語句的語言。

◆ 過程性DML:使用者程式設計時,不僅需要指出“做什麼”(需要什麼樣的資料),還需要指出“怎麼做”(怎麼獲得資料)。層狀、網狀的DML屬于過程性語言。

◆ 非過程性DML:使用者程式設計時,隻需要指出“做什麼”,不需要指出“怎麼做”。關系型DML屬于非過程性語言。

補充部分:

1.故障的種類

事物内部故障(預期故障)

系統故障:造成系統停止并需要重新開機的任何事件

媒體故障(硬碟等實體機部件損壞)

計算機病毒

2.可串行化排程

多個并發執行的事物的結果與非并發執行時這些事物按某種順序執行時的結果一樣,則該并發執行的結果正确,該排程是可串行化排程。

3. 沖突

不同僚物對同一個資料的讀寫操作和寫寫操作。

4. 沖突可串行化

通過排程兩個不同僚物的不沖突操作,來使化解沖突,得到可串行的操作。沖突可串行化是可串行化排程的充分條件。

5. 鎖的協定

一級鎖協定:事物修改某資料前需對該資料加X鎖(排他鎖)

二級鎖協定:一級的基礎上增加讀取資料前需加S鎖(共享鎖), 讀完資料後釋放

三級鎖協定:二級把讀取後釋放S鎖改為事物結束後釋放

一級鎖防丢失修改,二級鎖防讀髒資料,三級鎖防止了不可重複讀取

6. 日志

用來記錄事物對資料庫的更新操作的檔案(機關可以是記錄也可以是資料

塊)

7. 檢查點

檢查點的是資料庫恢複過程中盡快找到需要檢視的日志開始讀取更新操作而在日志檔案中新增的記錄,具體内容為:

  1. 建立檢查點時刻所有正在執行的事物清單;
  2. 這些事物最近的一個日志位址。

8. 資料庫的恢複過程

事物恢複:rollback過程,反向掃描日志,對更新操作進行逆操作直至該事物的開始标記。

系統故障恢複:正向掃描日志檔案,将故障發生前的已送出的事物放入重做隊列;未完成的事物放入撤銷隊列。先對撤銷隊列undo再對重做序列redo。

媒體故障的恢複:先将資料庫後備副本裝好,再根據日志恢複資料。

使用檢查點的恢複:先找到檢查點,将記錄檢查點時正發生的所有時間先放入撤銷隊列,然後正向掃描檢查點記錄的日志。發現新的事物,暫且将該事物放入撤銷隊列;發現事物送出,将該事物放入重做序列。待掃描完成後對撤銷隊列進行undo操作,完成後再對重做隊列内的事物redo。

9. 觸發器

定義:使用者定義在關系表上的一類由事件驅動的資料庫對象,也是一種保證

資料完整性的方法。

功能:實作主鍵和外鍵不能保證的複雜的參照完整性和資料的一緻性進而

有效保護表中資料。

10.為什麼不給所有的單個屬性都建立索引?

A. 索引的建立和維護需要時間,給所有屬性建立索引大大增加了資料庫管理者的工作量;

B. 索引本身需要占用實體記憶體,為所有屬性建立索引的代價太大;

C. 表中資料變化時,其索引也有可能發生變化,降低了資料的維護速度。

11.如何建立好的索引?

A. 主鍵、外鍵一定建立索引;

B. 經常查詢的資料如經常在where字句中出現的資料,經常在order by、group by、distinct後出現的字段最好建立索引;

C. 對于需要在指定範圍内的快速或高頻率查詢的資料建立索引;

D. 對于查詢中很少涉及的列,重複值比較多的列,資料類型為text、image和bit的列,經常存取的列不要建立索引;

E. 限制表上的索引數目,對于存在大量更新操作的表,索引數目一般不要超過3個,最多不超過5個。

12.登記日志的原則?

一,嚴格按照操作的執行順序登記日志;二,先登記日志,再執行操作。

13.請描述鎖機制和多種鎖結構,并舉例說明以及描述其應用場景。大部分鎖機制是資料庫配置後自動執行,請舉例描述哪些情況下,必須利用程式語言控制并發更新?

鎖機制是sql為了保證并發性的一種手段。它使用了三級鎖協定來避免寫入的資料丢失、讀“髒”資料和可重複讀資料。為了保證事物的并發,使用了先來先服務的排程算法和死鎖的診斷和解除等技術(逾時法、等待圖法等)來避免活鎖和死鎖的出現。再用兩段鎖協定保證了事物的沖突可串行化,保證了并發執行的正确性最終實作了事物的并發執行。

悲觀鎖主要有以下幾種:

A. 共享鎖(S鎖):讀取資料前對資料加s鎖以保證其他事物無法對該資料修改導緻讀“髒”資料。

B. 排它鎖(X鎖):更新資料前,對該資料加x鎖以保證其他事物不會更新或讀取該資料。

C. 意向鎖:在将要加鎖的屬性上可先加上意向鎖。

對于某些隔離級别比較高的,需要手動加鎖的事物,需要用程式語言控制并發更新。