資料庫設計正規化的理解

2021-06-18 13:45:28 字數 1374 閱讀 9480

前言

為什麼要寫這篇文章呢,從去年年底開始,就和很多做技術的朋友交流過,從資料庫設計到資料庫架構各個方面的內容。有一些朋友執著於orm,執著於所謂的資料庫設計,卻忘記了一切技術是要為業務服務這個基石。當然這文章裡也有一些自己的理解,想向大家表達。

正規化是什麼

正規化是符合某一種級別的關係模式的集合。關聯式資料庫中的關係必須滿足一定的要求,即滿足不同的正規化。目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、第四正規化(4nf)、第五正規化(5nf)和第六正規化(6nf)。滿足最低要求的正規化是第一正規化(1nf)。在第一正規化的基礎上進一步滿足更多要求的稱為第二正規化(2nf),其餘正規化以次類推。一般說來,資料庫只需滿足第三正規化(3nf)就行了。

正規化的原理

正規化的說明

我對正規化的理解

乙個嚴格恪守資料庫設計正規化來進行資料庫設計的人,必定是個傻球;

乙個沒有研究過資料庫設計正規化就進行資料庫設計的人,必定也是個傻球;

在現代資料庫設計中,尤其是web 2.0的系統中的資料庫設計,我可以斷言,大多數都是違反2nf、3nf的,少數設計甚至是違反1nf的。資料庫設計正規化只是對資料庫慣用設計的一些說明,並不能定性為標準。

而從資料庫的發展來看,以mysql舉例,隨著mysql實現越來越多的功能,它的宣傳材料上會越來越多的出現以前被mysql所摒棄的複雜設計理念,並且宣稱這是mysql所獨創或一貫倡導的。這是乙個資料庫系統發展所必然經歷的過程。而這卻會給mysql的使用者以極大的誤導,從而忽視了是否新特性是業務所真正需要的。

資料庫設計不是一種程式語言這麼簡單,與物件導向、面向過程無關。資料庫設計代表的是一種與應用開發語言完全不同的思想。現在絕大多數的程式,無論任何人採用什麼方式進行程式開發,其最終還是會回歸到對資料庫的操作上(當然如果你的程式只是個教學演示則不在此範圍內)。

資料庫發展

從下面的列表可以看出當前sns的**對於高併發、高效能的資料庫解決方案有多麼渴求,facebook貢獻了cassandra、linkedin貢獻了voldemort、mixi.jp貢獻了tokyo cabinet和tokoy tyrant、green.jp貢獻了flare、甚至包括google的bigtable。

總結

寫到這裡,我發現單單是這些新的資料庫解決方案就有太多可寫的內容,而這些已經超過了本文所要說明的主要內容,而現在所寫的內容就全當是個引子吧,我寫的很意猶未盡。後面會就反正規化設計例項,記憶體快取方案、nosql資料庫等逐漸展開。

tags:

mysql

, memcache

, 優化

資料庫設計正規化理解

看書的時候有一點迷不好理解,所以找了個時間查了一下。參考文件 設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3...

資料庫設計正規化的理解

正規化是什麼 正規化是符合某一種級別的關係模式的集合。關聯式資料庫中的關係必須滿足一定的要求,即滿足不同的正規化。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四正規化 4nf 第五正規化 5nf 和第六正規化 6nf 滿足最低要求的正規化是第一正規化 ...

資料庫設計三正規化理解

在網上查詢一些資料,加上自己的理解做了一些筆記 這是設計表的依據,按照三正規化設計的表不會出現資料冗餘。正規化說明 第一正規化 1nf 每乙個表都需要有主鍵,每乙個欄位的具有原子性,不可再分 第二正規化 2nf 有主鍵,非主鍵字段完全依賴主鍵,不能產生部分依賴 第三正規化 3nf 非主鍵字段不能相互...