回覆列表
  • 1 # 橘生淮南南巷秋水

    第一正規化(1NF)

    (必須有主鍵,列不可分)

    資料庫表中的任何欄位都是單一屬性的,不可再分

    createtableaa(idint,NameAgevarchar(100))

    insertaavalues(1,""無限-女"")

    沒有達到第一正規化

    createtableaa(idint,namevarcahr(10),agechar(2))

    insertaavalues(1,""無限"",""女"")

    達到第一正規化

    第二正規化(2NF)

    資料庫表中非關鍵欄位對任一候選關鍵欄位的都不存在部分函式依賴

    (當一個表是複合主鍵時,非主鍵的欄位不依賴於部分主鍵(即必須依賴於全部的主鍵欄位))

    createtablesci(

    snoint(32),cnoint(32),gradeint(32),creditint(32),

    primarykeysno,cno

    )

    課程(cno)1---1學分(credit)

    學生(sno)n---n課程(cno)

    學生+課程--->分數(grade)

    sci

    snocnogradecredit

    116080

    219080

    317080

    ....

    ....

    ....

    如此以來,學分被大量重複儲存,資料冗餘

    如要某課程學分,則要大量重複操作

    如要加新課程,由於sno和cno共同做為主鍵,則在加入新課程時,必須有人選該課

    總之

    這種設計不太好吧,非關鍵字屬性credit僅函式依賴於cno,也就是credit部分依賴組合關鍵字(sno,cno)而不是完全依賴

    解決

    分成兩個關係模式sc1(sno,cno,grade),c2(cno,credit)。新關係包括兩個關係模式,它們之間透過sc1中的外關鍵字cno相聯絡,需要時再進行自然聯接,恢復了原來的關係

    第三正規化(3NF)

    關係模式R(U,F)中的所有非主屬性對任何候選關鍵字都不存在傳遞依賴

    例----S1(SNO,SNAME,DNO,DNAME,LOCATION)

    學號姓名所在繫系名稱系地址

    原因:關係中存在傳遞依賴造成的。即SNO1->1DNO。而DNO1->nSNO卻不存在,而DNO->LOCATION存在,因此關鍵遼SNO對LOCATION函式決定是透過傳遞依賴SNO->LOCATION實現的。也就是說,SNO不直接決定非主屬性LOCATION。

    解決目地:每個關係模式中不能留有傳遞依賴。

    解決方法:分為兩個關係S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)

    注意:關係S中不能沒有外關鍵字DNO。否則兩個關係之間失去聯絡

  • 中秋節和大豐收的關聯?
  • 明成祖朱棣為什麼要發兵征討安南?