基礎

2018-05-03 18:28 更新

筆者能力有限,總結有誤的地方,請讀者協(xié)作更正。

1.三范式

  • 第一范式(1NF):數(shù)據(jù)庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數(shù)、字符型、邏輯型、日期型等。

  • 第二范式(2NF):數(shù)據(jù)庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數(shù)依賴(部分函數(shù)依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的情況),也即所有非關鍵字段都完全依賴于任意一組候選關鍵字。

  • 第三范式(3NF):在第二范式的基礎上,數(shù)據(jù)表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函數(shù)依賴則符合第三范式。所謂傳遞函數(shù)依賴,指的是如 果存在"A → B → C"的決定關系,則C傳遞函數(shù)依賴于A。因此,滿足第三范式的數(shù)據(jù)庫表應該不存在如下依賴關系: 關鍵字段 → 非關鍵字段 x → 非關鍵字段y

2. 反范式

  • 第二范式和第三范式如何區(qū)別?

  • 第二范式:非主鍵列是否依賴主鍵(包括一列通過某一列間接依賴主鍵),要是有依賴關系的就是第二范式;

  • 第三范式:非主鍵列是否是直接依賴主鍵,不能是那種通過傳遞關系的依賴的。要是符合這種就是第三范式;

  • 使用范式有哪些優(yōu)點和缺點?

  1. 范式可以避免數(shù)據(jù)冗余,減少數(shù)據(jù)庫的空間,減輕維護數(shù)據(jù)完整性的麻煩。

  1. 范式再給我們帶來的上面的好處時,同時也伴隨著一些不好的地方:按照范式的規(guī)范設計出來的表,等級越高的范式設計出來的表越多。

  1. 如第一范式可能設計出來的表可能只有一張表而已,再按照第二范式去設計這張表時就可能出來兩張或更多張表,如果再按第三范式或更高的范式去設計這張表會出現(xiàn)更多比第二范式多的表。

  1. 表的數(shù)量越多,當我們去查詢一些數(shù)據(jù),必然要去多表中去查詢數(shù)據(jù),這樣查詢的時間要比在一張表中查詢中所用的時間要高很多。也就是說我們所用的范式越高,對數(shù)據(jù)操作的性能越低。

  1. 所以我們在利用范式設計表的時候,要根據(jù)具體的需求再去權衡是否使用更高范式去設計表。在一般的項目中,我們用的最多也就是第三范式,第三范式也就可以滿足我們的項目需求,性能好而且方便管理數(shù)據(jù);

  1. 當我們的業(yè)務所涉及的表非常多,經常會有多表發(fā)生關系,并且我們對表的操作要時間上要盡量的快,這時可以考慮我們使用“反范式”。

關于反范式

不滿足范式的模型,就是反范式模型。

  • 反范式跟范式所要求的正好相反,在反范式的設計模式,我們可以允許適當?shù)臄?shù)據(jù)的冗余,用這個冗余去取操作數(shù)據(jù)時間的縮短。本質上就是用空間來換取時間,把數(shù)據(jù)冗余在多個表中,當查詢時可以減少或者是避免表之間的關聯(lián);

3. 事物

  • 事務(Transaction)是并發(fā)控制的基本單位。所謂的事務,它是一個操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個不可分割的工作單位。事務是數(shù)據(jù)庫維護數(shù)據(jù)一致性的單位,在每個事務結束時,都能保持數(shù)據(jù)一致性。

  • 事務的特性,要想成為事務,必須滿足:ACID(原子性,一致性,隔離性,持久性)四特性,事務是恢復和并發(fā)控制的基本單位。原子性指的是事務是數(shù)據(jù)庫的邏輯工作單位,事務中操作要么都做,要么都不做;一致性指的是事務的執(zhí)行結果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變大另一個一致性狀態(tài),一致性和原子性是密切相關的;隔離性指的是一個事務執(zhí)行不能被其他事務干擾;持久性指的是一個事務一旦提交,他對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的。

4. 鎖

  • 數(shù)據(jù)庫鎖有“共享鎖”,“排它鎖”,“互斥鎖”,“寫鎖”,“讀鎖”,“悲觀鎖”,“樂觀鎖”,“行級鎖”,“表級鎖”,“頁級鎖”等,同時我們還會??吹健皝G失修改“,”不可重復讀“,”讀臟數(shù)據(jù)“這三個術語

  • 并發(fā)控制一般采用三種方法,分別是樂觀鎖和悲觀鎖以及時間戳。

  1. 樂觀鎖認為一個用戶讀數(shù)據(jù)的時候,別人不會去寫自己所讀的數(shù)據(jù);
  2. 悲觀鎖就剛好相反,覺得自己讀數(shù)據(jù)庫的時候,別人可能剛好在寫自己剛讀的數(shù)據(jù),其實就是持一種比較保守的態(tài)度;
  3. 時間戳就是不加鎖,通過時間戳來控制并發(fā)出現(xiàn)的問題。
  4. 悲觀鎖就是在讀取數(shù)據(jù)的時候,為了不讓別人修改自己讀取的數(shù)據(jù),就會先對自己讀取的數(shù)據(jù)加鎖,只有自己把數(shù)據(jù)讀完了,才允許別人修改那部分數(shù)據(jù),或者反過來說,就是自己修改某條數(shù)據(jù)的時候,不允許別人讀取該數(shù)據(jù),只有等自己的整個事務提交了,才釋放自己加上的鎖,才允許其他用戶訪問那部分數(shù)據(jù)。
  5. 樂觀鎖就比較簡單了,就是不做控制,這只是一部分人對于并發(fā)所持有的一種態(tài)度而已。
  6. 時間戳就是在數(shù)據(jù)庫表中單獨加一列時間戳,比如“TimeStamp”,每次讀出來的時候,把該字段也讀出來,當寫回去的時候,把該字段加1,提交之前 ,跟數(shù)據(jù)庫的該字段比較一次,如果比數(shù)據(jù)庫的值大的話,就允許保存,否則不允許保存,這種處理方法雖然不使用數(shù)據(jù)庫系統(tǒng)提供的鎖機制,但是這種方法可以大大提高數(shù)據(jù)庫處理的并發(fā)量,因為這種方法可以避免了長事務中的數(shù)據(jù)庫加鎖開銷(操作員A 和操作員B操作過程中,都沒有對數(shù)據(jù)庫數(shù)據(jù)加鎖),大大提升了大并發(fā)量下的系 統(tǒng)整體性能表現(xiàn)。

  • 悲觀鎖所說的加“鎖”,其實分為幾種鎖,分別是:排它鎖和共享鎖,其中排它鎖又稱為寫鎖,共享鎖又稱為讀鎖

5. 視圖

  • 視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢。

  • 只暴露部分字段給訪問者,所以就建一個虛表,就是視圖。

  • 查詢的數(shù)據(jù)來源于不同的表,而查詢者希望以統(tǒng)一的方式查詢,這樣也可以建立一個視圖,把多個表查詢結果聯(lián)合起來,查詢者只需要直接從視圖中獲取數(shù)據(jù),不必考慮數(shù)據(jù)來源于不同表所帶來的差異

6. 索引

  • 索引是對數(shù)據(jù)庫表中一或多個列的值進行排序的結構,是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結構

  • 你也可以這樣理解:索引就是加快檢索表中數(shù)據(jù)的方法。數(shù)據(jù)庫的索引類似于書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。在數(shù)據(jù)庫中,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù),而不必掃描整個數(shù)據(jù)庫。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號