ER圖
Entity Relationship,實體關系圖。
(圖源自csdn,最初的博主未知)
1、先畫出所有實體,矩形圈出來
2、再畫出每個實體的屬性,橢圓圈出來,實體、屬性之前用實線連接。為了方便找出主鍵,作為主鍵的屬性可以畫一條下划線。
3、標注實體之間的關聯關系:一對一(1,1)、一對多(1,n),多對多(m,n)。關系用菱形表示,並在菱形2邊的線上標上1、m、n這些表示2個實體之間關聯關系的字符。
關聯關系:
一對一,一個人只對應一張身份證,一張身份證也只對應一個人。(2個一對一)
一對多,一個用戶可以擁有多個訂單,一個訂單只能屬於一個用戶。(1個一對一、1個一對多)
多對多,一個老師可以教多個學生,一個學生可以有多個老師。(2個一對多)
比如實體A、B,先把A作為1,看B是1還是多;再把B作為1,看A是1還是多。
如果2個都是一對一,那A、B就是一對一;
如果1個一對一、1個一對多,那A、B是一對多;
如果2個都是一對多,那A、B就是多對多。
數據庫三大范式
數據庫有8種范式(Normal Form),通常只用到前3種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。
1NF 屬性的原子性(不可再分)
數據庫中的每一個字段都要是不可再分隔的基本
2NF 屬性完全依賴於主鍵
一張表中的每一條記錄都要是可區分的,只通過主鍵來區分,所以一張表必須要有一個unique字段。
第二范式建立在第一范式的基礎上,滿足第二范式必須要先滿足第一范式。
3NF 屬性不能有依賴傳遞(不依賴於主鍵之外的其它屬性)
比如tb_student存儲學生信息,學生成績這個列依賴於課程,課程依賴於課程id,tb_student的主鍵時學生id,表中的記錄只能依賴於學生id,
學生成績不能放在tb_student中,因為放在tb_student中,這一列依賴課程id,依賴的是這張表主鍵(學生id)之外的列(課程id),所以要划出去單獨用一張表來存儲學生成績。
第三范式建立在第二范式的基礎上,滿足第三范式需要先滿足第二范式。
我們設計的關系型數據庫要滿足以上3種范式。