在計算機畢業設計中,很多同學會選擇做管理系統,在論文中數據建模畫ER圖時,很多同學會忘記ER圖的功能,出現一個誤區:
例如,小萍同學做了一個新聞管理系統,系統中有用戶管理、角色管理、文章管理、文章類型管理,系統管理員用戶可以對用戶、角色、文章以及文章類型進行增刪改查的操作。于是小萍同學想到每個系統管理員用戶可以管理多個用戶、多個角色、多個文章、多個文章類型,而每個用戶、角色、文章和文章類型能被多個系統管理員用戶管理,那么系統管理員用戶與用戶、角色、文章、文章類型是多對多的關系。于是小萍畫了以下的ER圖:
乍一看,小萍畫的圖好像沒有什么問題,但是她設計的數據庫只有用戶表、角色表、文章表、文章類型表共四張表。對標題理解的同學或許已經發現小萍同學缺少了四張表了。
首先我們回顧一下ER圖的三個關系:一對一,一對多,多對多。
(1) 一對一聯系(1 ∶1)
對于兩個實體集A和B,若A中的每一個值在B中至多有一個實體值與之對應,反之亦然,則稱實體集A和B具有一對一的聯系。
一個學校只有一個正校長,而一個校長只在一個學校中任職,則學校與校長之間具有一對一聯系。
(2) 一對多聯系(1 ∶N)
對于兩個實體集A和B,若A中的每一個值在B中有多個實體值與之對應,反之B中每一個實體值在A中至多有一個實體值與之對應數據庫邏輯關系圖,則稱實體集A和B具有一對多的聯系。
例如,某校教師與課程之間存在一對多的聯系"教",即每位教師可以教多門課程數據庫邏輯關系圖,但是每門課程只能由一位教師來教。一個專業中有若干名學生,而每個學生只在一個專業中學習,則專業與學生之間具有一對多聯系
(3) 多對多聯系(M ∶N)
對于兩個實體集A和B,若A中每一個實體值在B中有多個實體值與之對應,反之亦然,則稱實體集A與實體集B具有多對多聯系
例如,表示學生與課程間的聯系"選修 "是多對多的,即一個學生可以學多門課程,而每門課程可以有多個學生來學。聯系也可能有屬性。例如,學生" 選修" 某門課程所取得的成績,既不是學生的屬性也不是課程的屬性。由于" 成績" 既依賴于某名特定的學生又依賴于某門特定的課程,所以它是學生與課程之間的聯系" 選修"的屬性。
實際上,一對一聯系是一對多聯系的特例,而一對多聯系又是多對多聯系的特例。 聯系是隨著數據庫語義而改變的,假如有如下3種語義規定:
例如,一個部門有一個經理,而每個經理只在一個部門任職,則部門與經理的聯系是一對一的。
一個員工可以同時是多個部門的經理,而一個部門只能有一個經理,則這種規定下"員工"與"部門"之間的"管理"聯系就是1:n的聯系了。
一個員工可以同時在多個部門工作,而一個部門有多個員工在其中工作,則"員工"與"部門"的"工作"聯系為m:n聯系。
ER圖轉化為數據庫表注意的事項:
(1)一對多的關系中,要在“多”的實體的數據庫表中引入“一”的實體的數據庫表的主鍵當作外鍵。
(2)多對多的關系中,要產生一個新的數據庫表存儲多對多雙方的主鍵當作外鍵。
小萍的新聞管理系統的ER圖缺少了什么表呢?
按小萍對系統的解讀的話,那么有四個多對多的關系,那么數據庫表除了用戶表、角色表、文章表和文章類型表,還應該有系統管理員用戶管理用戶表、系統管理員用戶管理角色表、系統管理員用戶管理文章表、系統管理員用戶管理文章類型表。這時,小萍說:“這四張表在系統中沒有用,我不想要。但是按我的理解就是多對多的關系呀。”
這就回到了標題所講的,ER圖表示的是數據關系,而不是業務關系。如果你認為是多對多的關系請看ER圖轉化為數據庫表注意的事項。
(PS:第一次寫博客,如有不對,請告知!!!謝謝!!!)