SQL Server設計三範式

來源:互聯網
上載者:User

標籤:

第一範式(1NF)

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

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

 

create table aa(id int,NameAge varchar(100))
insert aa values(1,‘‘無限-女 ‘‘)
沒有達到第一範式

create table aa(id int,name varcahr(10),age char(2))
insert aa values(1,‘‘無限‘‘,‘‘女 ‘‘)
達到第一範式

 

第二範式(2NF)

資料庫表中非關鍵字段對任一候選關鍵字段的 都 不存在部分函數依賴

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

 

create table sci(

   sno int(32),cno int(32),grade int(32),credit int(32),

primary key sno,cno

)

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

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

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

sci

sno cno grade credit

1    1   60     80

2    1    90     80

3   1    70     80

.   .   .      .

.   .   .     .

.    .   .     .

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

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

如要加新課程,由於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)

          學號 姓名   所在系 系名稱 系地址
關鍵字SNO決定各個屬性。由於是單個關鍵字,沒有部分依賴的問題,肯定是2NF。但這關係肯定有大量的冗餘,有關學生所在的幾個屬性DNO,DNAME,LOCATION將重複儲存,插入,刪除和修改時也將產生類似以上例的情況。
原因:關係中存在傳遞依賴造成的。即SNO 1->1 DNO。 而DNO 1->n SNO卻不存在, 而DNO -> LOCATION存在, 因此關鍵遼 SNO 對 LOCATION 函數決定是通過傳遞依賴 SNO -> LOCATION 實現的。也就是說,SNO不直接決定非主屬性LOCATION。
解決目地:每個關係模式中不能留有傳遞依賴。
解決方案:分為兩個關係 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
注意:關係S中不能沒有外關鍵字DNO。否則兩個關係之間失去聯絡

SQL Server設計三範式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.