回去好好惡補了下基礎知識,才知道原來自己基礎有多麼糟糕,很多問題都想不明白是因為知識不夠,所謂學而不思則罔,思而不學則殆。
好了,開始記錄幾天的學習歷程
資料庫設計過程中的關鍵的問題是如何把現實世界表達成適合他們的關係模型
設計乙個教學管理系統資料庫x
學生學號
學生姓名
學生年齡
學生所在系別
系主任姓名
課程號成績
s1張三
17計算機
劉偉c1
90s1
張三17
計算機劉偉
c285
s2張三
17資訊
孫斌c5
80s2
李四18
資訊孫斌
c670
s2李四
18資訊
孫斌c7
75s2
李四18
資訊孫斌
c550
s3王五
20資訊
孫斌c10s3
王五20
資訊孫斌
c265
s3王五
20資訊
孫斌c4
95s4
趙六21
自動化劉偉
c185
怎麼樣確定一條記錄呢,由上面表可以看出是由學生學號和課程號組合(學生學號,課程號)聯合主鍵來確定一條記錄
看看此表中的資料會發現幾個問題
1 資料冗餘
由於主鍵是學生學號和課程號,所有會造成資料有學生學號*課程號那麼多,而如此多的記錄對應重複學生姓名和年齡,浪費了儲存空間
2插入異常
如果只有系名和系主任的資訊,而沒有學生資訊,就無法完成插入,因為沒有學生意味著沒有學生學號和課程號,沒有主鍵記錄 當然不能插入資料
3刪除異常
刪除學生資訊時,會相應的刪除系名稱,此時如果本系的學生全部刪除,那麼將不存在這個系,很明顯學生刪除會影響系的存在,這很不合理
4更新異常
如果學生改名,將會逐一更改學生姓名,又比如某個系換主任,則屬於該系的學生都要更換主任,稍有不慎,就會漏改。
綜上所述,原因是這一條記錄包含了太多的資訊
如何講這些資訊分離,將複雜的關係分解成簡單的關係,將不好的關係設計成好的關係,就是資料的規範化。 也就是我們所說的資料庫正規化
終於到正題了^_^
第一正規化(不滿足第一正規化的就不是關聯式資料庫)
資料庫中的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果有重複屬性,就需要定義乙個新實體,新實體與原實體為一對多的關係。
舉個例子
部門員工
員工員工
生產部小王
小花小妹妹
部門對應多個員工,出現重複屬性,不滿足組正規化1
第一正規化要滿足不能將部門中的資訊都放在一列中顯示,也不能將其中的兩列或者多列在一列中顯示,說白了,一列就只能放置乙個值。 列無重複
同時,部門資訊表的每一行只表示乙個部門資訊,乙個部門資訊在資訊表中只出現一次。
資料庫中的字段都是單一屬性,不可再分
第二正規化(主鍵唯一)
資料庫表中的每乙個例項或行必須可以被唯一地區分,為實現唯一區分,一般都會加入乙個唯一標識列。
第二正規化要求實體的屬性完全依賴主關鍵字。如果不完全依賴於關鍵字,就會出現最上面圖的情況。
(學號,課程名稱)->(姓名,年齡,成績,學分)
應改為(課程名稱)->(學分)
(學號)->(姓名,年齡)
第三正規化(消除非主屬性依賴)
第三正規化要求每乙個非主屬性既不部分依賴,也不傳遞依賴於碼
(學號)->(姓名,年齡,所在學院,學院地點,學院**)
符合第二正規化,但不符合第三正規化
存在(學號)->(所在學院)->(學院地點,學院**)
出現非主屬性傳遞依賴,不是直接依賴於碼(學號),而是依賴於所在學院。
資料庫設計正規化
目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四正規化 4nf 第五正規化 5nf 和第六正規化 6nf 滿足最低要求的正規化是第一正規化 1nf 在第一正規化的基礎上進一步滿足更多要求的稱為第二正規化 2nf 其餘正規化以次類推。一般說來,資料庫只需滿...
資料庫設計正規化
前言 為什麼要寫這篇文章呢,從去年年底開始,就和很多做技術的朋友交流過,從資料庫設計到資料庫架構各個方面的內容。有一些朋友執著於orm,執著於所謂的資料庫設計,卻忘記了一切技術是要為業務服務這個基石。當然這文章裡也有一些自己的理解,想向大家表達。正規化是什麼 正規化是符合某一種級別的關係模式的集合。...
資料庫正規化設計
在軟體開發過程中,資料庫的設計是非常重要的。可以說,良好的資料庫設計,是對使用者需求的理解的精準定位。它不僅能夠使得軟體開發起來非常便捷,而且還能夠使軟體系統高效執行,同時,為日後的維護或者更換資料庫提供便利。在最近開發系統的過程中,感覺收穫最大的也是關於資料庫的操作。最初開發機房收費系統的時候,由...