數據庫三大范式、E-R圖


第一范式(1NF):數據表中的每一列(每個字段)必須是不可拆分的最小單元,也就是確保每一列的原子性;

例如:userInfo:山東省煙台市  131777368781           userAds:山東0省煙台市  userTel:131777368781 

 

第二范式(2NF):滿足1NF后,要求表中的所有列,都必須依賴於主鍵,而不能有任何一列與主鍵沒有關系,也就是說一個表只描述一件事情;

例如:訂單表只描述訂單相關的信息,所以所有字段都必須與訂單id相關       

產品表只描述產品相關的信息,所以所有字段都必須與產品id相 關;

因此不能在一張表中同時出現訂單信息與產品信息;如下圖所示(1張表拆成2張表):

 

 第三范式(3NF):必須先滿足第二范式(2NF),要求:表中的每一列只與主鍵直接相關而不是間接相關,(表中的每一列只能依賴於主鍵);

例如:訂單表中需要有客戶相關信息,在分離出客戶表之后,訂單表中只需要有一個用戶id即可(外鍵),而不能有其他的客戶信息。因為其他的客戶信息直接關聯於用戶id,而不是直接與訂單id直接相關。

第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在的員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三范式(3NF)也應該構建它,否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴於其它非主屬性。此解釋轉自這里

【如何更好的區分三大范式】

         第 一范式和第二范式在於有沒有分出兩張表,第二范式是說一張表中包含了多種不同的實體屬性,那么要必須分成多張表, 第三范式是要求已經分成了多張表,那么一張表中只能有另一張表中的id(主鍵),而不能有其他的任何信息(其他的信息一律用主鍵在另一表查詢)。

總結:

第1范式:每個表中都有1列,並且該列是不可拆分的最小單元(強調的是列的原子性,即列不能夠再分成其他幾列)

第2范式:1張表只描述一件事情(非主鍵列是否完全依賴於主鍵,還是依賴於主鍵的一部分)

第3范式:用外鍵做表的關聯(非主鍵列是直接依賴於主鍵,還是直接依賴於非主鍵列)

【數據庫五大約束】

1.primary KEY:設置主鍵約束;
2.UNIQUE:設置唯一性約束,不能有重復值;
3.DEFAULT 默認值約束,height DOUBLE(3,2)DEFAULT 1.2 height不輸入是默認為1,2
4.NOT NULL:設置非空約束,該字段不能為空;
5.FOREIGN key :設置外鍵約束。

【主鍵】
1.主鍵的注意事項?
主鍵默認非空,默認唯一性約束,只有主鍵才能設置自動增長,自動增長一定是主鍵,主鍵不一定需要自動增長;
2.設置主鍵的方式?
在定義列時設置:ID INT PRIMARY KEY
在列定義完之后設置:primary KEY(id)

【外鍵】

1.設置外鍵的注意事項:   

只有INNODB的數據庫引擎支持外鍵,修改my.ini文件設置default-storage-engine=INNODB    外鍵必須與參照列的數據類型必須相同(數值型要求長度和無符號都相同,字符串要求類型相同,長度可以不同)。

2設置外鍵的語法:

   CONSTRAINT 外鍵名 FOREIGN KEY (外鍵字段)REFERENCES 參照表 (參照字段)    ON DELETE SET NULL ON UPDATE CASCADE 設置參照完整性

3.外鍵約束的參照操作?  

  參照表的完整性操作:當對參照表的參照字段進行刪除或更新時,外鍵表中的外鍵如何應對;   

參照操作可選值:

      RESTRICT拒絕參照表刪除或更新參照字段;               

      RESTRICT和NO ACTION相同,但這個指令只在mysql生效;                

      CASCADE刪除或更新參照表的參照字段時,外鍵表的記錄同步刪除更新;               

      SET NULL 刪除或更新參照表的參照字段時,外鍵表的外鍵設為NULL; 

E-R圖

一、那么什么是E-R模型?

 E-R模型即實體-聯系模型,E-R模型的提出基於這樣一種認識,數據庫總是存儲現實世界中有意義的數據,而現實世界是由一組實體和實體的聯系組,E-R模型可以成功描述數據庫所存儲的數據。

二、為什么要設計E-R模型?

 設計E-R模型能夠更有效和更好的模擬現實世界。

三、E-R模型的基本要素

1) 實體 :實體是E-R模型的基本對象,是現實世界中各種事物的抽象,凡是可以相互區別,並可以被識別的事、物概念等均可認為是實體。在一個單位中,具有共性的一類實體可以划分為一個實體集,例如,學生李明,黃穎等都是實體,為了便於描述,可以定義學生這樣的一個實體集,所有學生都是這個集合的成員。

2)屬性:每個實體都具有各種特征,稱其為實體的屬性,如學生有學號,姓名,年齡等屬性。實體的屬性值是數據庫存儲的主要數據。能唯一標識實體的屬性或屬性組稱為實體鍵,如一個實體有多個鍵存在。則可從中選取一個作為主鍵。

3)聯系:實體間會存在各種關系,如人與人之間可能存在領導與雇員關系等,實體間的關系被抽象為聯系。

四、E-R圖的四個組成的部分

矩形框:表示實體,在矩形框中寫上實體的名字

橢圓形框:表示實體或聯系的屬性

菱形框:表示聯系,在框中記入聯系名

連線:實體與屬性之間;實體與聯系之間;聯系與屬性之間用直線相連,(對於一對一聯系,要在兩個實體連線方向各寫1; 對於一對多聯系,要在一的一方寫1,多的一方寫N;對於多對多關系,則要在兩個實體連線方向各寫N,M。)。

五、將E-R模型轉化為關系模型

1、實體轉化為關系  

實體集轉化為關系非常簡單,只需將實體的屬性作為關系的列即可(實體的所有屬性);

2、聯系轉化為關系

1)一對一聯系需要將其中一個實體的主鍵作為另一個實體的屬性。反映到映射中,將一個關系的主鍵作為另一個關系的普通列聯系本身的屬性也應當以列的形式植入。對於一對一關系可將主從關系顛倒,也不會導致信息丟失

        可將角色編號作為用戶關系中的一個普通列,反過來也可以!

2)一對多聯系,需要將一的一方作為主表,多的一方作為從表。聯系的所有屬性為從表的列,這樣才不會導致信息丟失。

  如學生與班級:學生信息為從表,班級信息為主表

3)一對多。無論聯系加入到哪一方都將造成信息丟失。

  如學生與選課。可以將學號,課程Id,以及關系的屬性---學分作為新關系的列

六、例子

E-R圖表示某個工廠物資管理的概念模型

實體包括:

倉庫: 倉庫號、面積、電話號碼;

零件 :零件號、名稱、規格、單價、描述;

供應商:供應商號、姓名、地址、電話號碼、帳號;

項目:項目號、預算、開工日期;

職工:職工號、姓名、年齡、職稱;

實體之間的聯系

倉庫------零件

1、一個倉庫可以存放多種零件,一種零件可以存放在多個倉庫中。倉庫和零件是多對多的關系。

2、用庫存量來表示某種零件在某個倉庫中的數量

倉庫------職工

1、一個倉庫擁有多個職工,一個職工只能在一個倉庫中工作,倉庫和職工是一對多的關系

2、職工之間有領導和被領導的關系,因為管倉庫肯定有個頭,所以有領導和被領導的關系。

E-R圖如下所示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM