關係型資料庫:使用正規化建立資料庫(轉)
關係型資料庫:使用正規化建立資料庫(轉)[@more@] 關係型資料庫理論可能是20世紀60年代和70年代儲存系統先鋒的救星,但是從那是開始它就成了許多資料開發人員的毒藥,就是因為現代資料庫系統發展得如此之好,以至於它將其關係型支柱對開發人員隱藏了。設計良好的關係型資料庫很容易使用、很靈活,並且能夠保護資料的有效性。而設計不良的資料相反仍然能夠發揮相當的作用,但是最終可能會導致資料的無效、錯誤或者丟失。 開發人員有一些專用的規則,叫做正規化(normal forms),他們根據這些規則來建立設計良好的資料庫。在這裡,我將透過建立一個用於儲存書籍資訊的簡單資料庫來探討一下正規化。 本系列的第二部分 本文Builder.com是針對資料庫設計系列的第二部分。如果錯過了前一部分,你可以看看 ,它揭示了關係型資料庫理論發展的內在動力。 確定實體和元素 設計資料庫的第一步是做你的家庭作業並確定你所需要的實體。實體是資料一種型別的概念集。通常只從一兩個實體開始,再隨著你資料的規範化而增加列表。對於我們的示例資料庫,它看上去就好像我們只需要一個實體――書。 在確定了所需要實體的清單之後,你下一步就需要為每個實體建立資料元素(也就是說,你需要儲存的資訊)的清單。收集這樣的資訊有多種途徑,但是最有效的可能就是依賴你的使用者了。向你的使用者詢問他們日常工作的情況,要求檢視當前完成他們工作所需要的各種表格和報告。例如,訂單上可能會列出你建立銷售應用程式所需要的許多資料元素。 我們的書籍實體沒有書面表格和報告可用,但是下列元素清單將有助於我們開始設計這個資料庫: {Title, Author, ISBN, Price, Publisher, Category} 很重要的一點是,要注意,把我們這裡要用的實體移動到元素的過程並不能適用於所有狀況。你所需要的實體不會總是像我們書籍示例那樣清楚,所以你可能要從資料元素的一長串清單開始,在後面你會根據實體來劃分元素。 正規化的頭幾步 一旦有了實體清單(表格)和資料元素(欄位),你就準備好讓關係型資料庫理論運作了。這個理論的主要推動力是規範化――刪除任何重複的組和冗餘的資料,並把它們放到兩個或者更多相關表裡的過程。你並不是一定需要擁有一個以上的表格,但是你的資料簡單到只需要一個表格的機會並不多。 你應該小心地檢查資料(這些資料會出現在多條記錄裡)和依賴性錯誤的實體和元素清單,並把已損壞的欄位移動到不同的表格裡。例如,你可能列出同一個作者的多本書,並在資料庫裡重複了作者的名字。當你認為會一次又一次地看到相同的資料值時,你就應該考慮把這個欄位移動到另一個表格裡了。 要記住,在這一點上,你只是在操作潛在表格的列表,而不應該真正地建立這個表格:現在還是要用筆和紙來列表。 正規化簡介 資料庫規範化的過程非常著名,所以有正式的規則來保證規範化資料庫的建設。這些規則有七條,叫做正規化,而在大多數情況下頭四條就夠用了: 第一正規化(1NF)――這條規則有幾個要求,包括:無多值專案(multivalued item)和重複組(repeating group);每個欄位都是原子型的(atomic),也就是說每個欄位必須包含可能的最小資料元素;以及表格含有關鍵字(key)。 第二正規化(2NF)――表格必須按照1NF來規範化。所有的欄位必須引用(或者描述)主鍵值。如果主鍵基於一個以上的欄位,那麼每個nonkey欄位必須取決於複雜鍵(complex key),而不僅僅是一個沒有鍵的欄位。不支援主鍵的nonkey欄位應該被移動到另一個表格裡去。 第三正規化(3NF)――表格必須符合1NF和2NF的要求。所有的欄位都必須相互獨立。任何描述nonkey欄位的欄位都必須被移動到另一個表格裡。 Boyce-Codd正規化(BCNF)――一定不能存在依賴於nonkey的欄位。這條規則實際上是3NF的一個子規則,用於捕捉可能會透過程式的依賴性。這一點相當的抽象,一開始是很難應用的。 以上的規則很精確,但是技術定義以及規範化的規則能夠被簡化成下面幾點: 每個欄位必須儘量小。 每個欄位只能包含一個資料專案。 每條記錄都必須是唯一的。 注意重複的條目。 每個欄位都必須完全支援主鍵,而且只支援主鍵。 下一步該做什麼? 應用這些規範化規則,尤其是1NF的幾個要求,將會是個很需要技巧的過程。正如你會在下面內容裡看到的,我會開始真正地把正規化應用到實力資料庫上,在進行了其他規範化的步驟之後,你就會重新回到1NF。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-957183/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關係型資料庫:實現正規化(轉)資料庫
- 關係型資料庫設計三大正規化資料庫
- 關係型資料庫與非關係型資料庫介紹!資料庫
- NoSQL:從關係型資料庫到非關係型資料庫SQL資料庫
- 關係型資料庫資料庫
- OO資料庫和關係型資料庫資料庫
- 資料庫——關係型資料庫MySQL--簡單使用資料庫MySql
- 關係型資料庫和非關係型資料庫的區別資料庫
- 關係型資料庫效能優化總結(轉)資料庫優化
- 資料庫正規化那些事[轉]資料庫
- [轉]資料庫三大正規化資料庫
- PostgreSQL關係型資料庫SQL資料庫
- 關係型資料庫概要資料庫
- 關係型資料庫原理資料庫
- 關係型資料庫和非關係型資料庫的簡單對比資料庫
- 【資料庫】關係模式的正規化的簡明判斷資料庫模式
- NoSQL資料庫探討 -- 非關係型資料庫SQL資料庫
- 例項,資料庫,資料字典與資料庫建立的關係資料庫
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- 關係型資料庫之SQL資料庫SQL
- 關係型資料庫之索引資料庫索引
- 關係型資料庫的理解資料庫
- 關係型資料庫理論資料庫
- 非關係型資料庫:Cassandra資料庫
- redis—非關係型資料庫Redis資料庫
- 關係型資料庫,何以稱為“關係”資料庫
- 資料庫三正規化資料庫
- 資料庫 三大正規化資料庫
- 啥是資料庫正規化資料庫
- 資料庫設計---正規化資料庫
- 資料庫正規化那些事資料庫
- 細說資料庫正規化資料庫
- 資料庫三大正規化資料庫
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- 關係型資料庫和非關係型資料庫介紹及優劣勢比較資料庫
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫