三大範式及儲存方式

來源:互聯網
上載者:User
 資料庫三大範式

第一範式(1NF):
是指資料庫表的每一列都是不可分割的基本資料項目,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。個人總結:不能有表中表。

如資料表不能這樣設計,因為資料表的一個二維表:

 

姓名 思想道德素質測評(20%)  專業素質測評(60%) 
基礎分 獎勵分 懲罰分 最後得分 排名  必修課成績  獎勵分 懲罰分 最後得分 排名
得分 排名
張三 78 0 0 78 2 71.7 1 0 0.0 71.7 1
王五 78 0 0 78 2 71.3 24 0.0 0.0 71.3 2
李四 78 0 0 78 2 70.8 25 0.0 2.0 68.8 3


而這樣設計是可以的:

 

 

姓名 C語言 java MySQL Oracle
張三 78 88 68 78
王五 78 55 87 78
李四 78 86 91 56

 

第二範式(2NF):
要求資料庫表中的每個執行個體或行必須可以被惟一地區分,資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些欄位決定非關鍵字段的情況),也即所有非關鍵字段都完全依賴於任意一組候選關鍵字。個人總結:非主屬性依賴於主屬性
如以下成績表

 

student_id course_id grade birthday
20101661 1 56 1991,07,14
20101662 3 58 1993,7,25

這樣設計不行,因為grade完全依賴於主碼student_id、course_id,而birthday只依賴於部分主碼student_id。所以要將其拆分成兩個表

 

student(student_id, birdthday);

grade(student_id, course_id, birthday); 

course_id為聯絡student表的外鍵

第三範式(3NF):
要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊,在第二範式的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴則符合第三範式。個人總結:不能有傳遞性

如以下表

 

student_id course_id birthday SD(所在系的名稱) SL(所在宿舍樓)
20101661 1 1991,07,14 軟體學院 1棟
20101662 3 1993,7,25 經管學院 2棟

 

student_id為主碼,SL依賴於student_id,但可以從非主碼屬性SD匯出,即知道了SD,也就知道了SL。可以獎這個表拆分成兩個表,如下:

grade(student_id, course_id,SD);

department(SD, SL);

SD為聯絡grade表的主鍵


資料庫的儲存方式

順序存放,平均查詢次數為關係的記錄個數的1/2;

雜湊存入,平均查詢次數由雜湊演算法決定;

索引存放,要確定建立何種索引,及建立索引的表和屬性;

聚簇存放,記錄聚簇是指將不同類型的記錄分配到相同的物理地區中,以充分利用順序性的優點,提高訪問速度。


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.