資料庫之介紹篇 一

2021-09-23 06:08:50 字數 4015 閱讀 2852

資料庫通常分為層次式資料庫、網路式資料庫和關係式資料庫三種。

而不同的資料庫是按不同的資料結構來聯絡和組織的。

而在當今的網際網路中,最常見的資料庫模型主要是兩種,即關係型資料庫和非關係型資料庫。

當前在成熟應用且服務與各種系統的主力資料庫還是關係型資料庫。

代表:oracle、sql server、mysql

隨著時代的進步與發展的需要,非關係型資料庫應運而生。

代表:redis、mongodb

nosql資料庫在儲存速度與靈活性方面有優勢,也常用於快取。

經過一系列的步驟,我們現在終於將客戶的需求轉換為資料表並確立這些表之間的關係,那麼是否我們現在就可以在開發中使用呢?答案否定的,為什麼呢!同乙個專案,很多人參與了需求的分析,資料庫的設計,不同的人具有不同的想法,不同的部門具有不同的業務需求,我們以此設計的資料庫將不可避免的包含大量相同的資料,在結構上也有可能產生衝突,在開發中造成不便。

要設計規範化的資料庫,就要求我們根據資料庫設計正規化――也就是資料庫設計的規範原則來做。正規化可以指導我們更好地設計資料庫的表結構,減少冗餘的資料,藉此可以提高資料庫的儲存效率,資料完整性和可擴充套件性。

設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴德斯科正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf,又稱完美正規化)。滿足最低要求的正規化是第一正規化(1nf)。在第一正規化的基礎上進一步滿足更多規範要求的稱為第二正規化(2nf),其餘正規化以次類推。一般說來,資料庫只需滿足第三正規化(3nf)就行了。

第一正規化(1nf)

所謂第一正規化(1nf)是指在關係模型中,對列新增的乙個規範要求,所有的列都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化(1nf)表中的每個域值只能是實體的乙個屬性或乙個屬性的一部分。簡而言之,第一正規化就是無重複的域。

例如:表1-1中,其中」工程位址」列還可以細分為省份,城市等。在國外,更多的程式把」姓名」列也分成2列,即」姓」和「名」。

雖然第一正規化要求各列要儲存原子性,不能再分,但是這種要求和我們的需求是相關聯的,如上表中我們對」工程位址」沒有省份,城市這樣方面的查詢和應用需求,則不需拆分,」姓名」列也是同樣如此。

表1-1   原始表

工程號

工程名稱

工程位址

員工編號

員工名稱

薪資待遇

職務

p001

港珠澳大橋

廣東珠海

e0001

jack

6000/月

工人p001

港珠澳大橋

廣東珠海

e0002

join

7800/月

工人p001

港珠澳大橋

廣東珠海

e0003

8000/月

高階技工

p002

南海航天

海南三亞

e0001

jack

5000/月

工人第二正規化(2nf)

在1nf的基礎上,非key屬性必須完全依賴於主鍵。第二正規化(2nf)是在第一正規化(1nf)的基礎上建立起來的,即滿足第二正規化(2nf)必須先滿足第一正規化(1nf)。第二正規化(2nf)要求資料庫表中的每個例項或記錄必須可以被唯一地區分。選取乙個能區分每個實體的屬性或屬性組,作為實體的唯一標識。

第二正規化(2nf)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上乙個列,以儲存各個例項的唯一標識。簡而言之,第二正規化就是在第一正規化的基礎上屬性完全依賴於主鍵。

例如:表1-1中,乙個表描述了工程資訊,員工資訊等。這樣就造成了大量資料的重複。按照第二正規化,我們可以將表1-1拆分成表1-2和表1-3:

表1-2   工程資訊表

工程編號

工程名稱

工程位址

p001

港珠澳大橋

廣東珠海

p002

南海航天

海南三亞

l  員工資訊表(員工編號,員工名稱,職務,薪資水平):

表1-3   員工資訊表

員工編號

員工姓名

職務

薪資水平

e0001

jack

工人3000/月

e0002

join

工人3000/月

e0003

高階技工

6000/月

這樣,表1-1就變成了兩張表,每個表只描述一件事,清晰明了。

第三正規化(3nf)

第三正規化是在第二正規化基礎上,更進一層,第三正規化的目標就是確保表中各列與主鍵列直接相關,而不是間接相關。即各列與主鍵列都是一種直接依賴關係,則滿足第三正規化。

第三正規化要求各列與主鍵列直接相關,我們可以這樣理解,假設張三是李四的兵,王五則是張三的兵,這時王五是不是李四的兵呢?從這個關係中我們可以看出,王五也是李四的兵,因為王五依賴於張三,而張三是李四的兵,所以王五也是。這中間就存在一種間接依賴的關係而非我們第三正規化中強調的直接依賴。

現在我們來看看在第二正規化的講解中,我們將表1-1拆分成了兩張表。這兩個表是否符合第三正規化呢。在員工資訊表中包含:」員工編號」、」員工名稱」、」職務」、」薪資水平」,而我們知道,薪資水平是有職務決定,這裡」薪資水平」通過」職務」與員工相關,則不符合第三正規化。我們需要將員工資訊表進一步拆分,如下:

l  員工資訊表:員工編號,員工名稱,職務

l  職務表:職務編號,職務名稱,薪資水平

現在我們已經了解了資料庫規範化設計的三大正規化,下面我們再來看看對錶1-1優化後的資料表:

員工資訊表(employee)

員工編號

員工姓名

職務編號

e0001

jack

1e0002

join

1e0003

2工程資訊表(projectinfo)

工程編號

工程名稱

工程位址

p001

港珠澳大橋

廣東珠海

p002

南海航天

海南三亞

職務表(duty)

職務編號

職務名稱

工資待遇1

工人3000/月 2

高階技工

6000/月

工程參與人員記錄表(project_ employee_info)

編號

工程編號

人員編號1

p001

e0001 2

p001

e0002 3

p002

e0003

通過對比我們發現,表多了,關係複雜了,查詢資料變的麻煩了,程式設計中的難度也提高了,但是各個表中內容更清晰了,重複的資料少了,更新和維護變的更容易了,哪麼如何平衡這種矛盾呢?

MySQL入門 資料庫介紹篇

1.什麼是資料庫 資料庫是是按照資料結構來組織 儲存和管理資料的倉庫 2.資料庫的發展史 最早的資料庫通過大量的分類 比較和 繪製的機器執行數百萬穿孔卡片來進行資料的處理,其執行結果在紙上列印出來或者製成新的穿孔卡片。而資料管理就是對所有這些穿孔卡片進行物理的儲存和處理。當時計算機開始廣泛地應用於資...

資料庫之mysql篇

這段時間找工作,拿起一本mysql進行學習,現把最近學習的相關知識進行總結,以備後查。什麼是資料庫?以某種有組織的方式儲存的資料集合 通常是乙個檔案或一組檔案 資料庫常見概念 表 某種特定型別資料的結構化清單。模式 關於資料庫和表的布局及特性的資訊。列 表中的乙個字段,儲存著表的某部分資訊。行 表中...

注釋資料庫介紹之GO KEGG資料庫

做過測序的小夥伴肯定都知道go kegg資料庫,我們想要知道基因發揮什麼功能 參與什麼途徑,就一定要看基因功能注釋的結果,而go kegg這兩個資料庫是基因功能注釋常用的資料庫,也是常常出現在測序文章中,但是你真的了解這兩個資料庫嗎?go資料庫 1 go資料庫的命名 go gene ontology...