摘要:E-R圖設(shè)計(jì)是數(shù)據(jù)庫(kù)設(shè)計(jì)的關(guān)鍵,目前諸多流行的數(shù)據(jù)庫(kù)原理教材,對(duì)E-R圖設(shè)計(jì)部分的討論均顯得不夠精細(xì)。針對(duì)這一現(xiàn)狀,文章通過(guò)分析不同應(yīng)用環(huán)境下實(shí)體之間的聯(lián)系,提出E-R圖的精細(xì)設(shè)計(jì)方案,說(shuō)明E-R圖的正確設(shè)計(jì)方法。
關(guān)鍵詞:數(shù)據(jù)庫(kù)設(shè)計(jì);E-R圖;實(shí)體;聯(lián)系
0.引言
數(shù)據(jù)庫(kù)原理是計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的一門(mén)專(zhuān)業(yè)主干課,目的是使學(xué)生掌握數(shù)據(jù)庫(kù)的基本概念、基本理論和基本操作方法,理解數(shù)據(jù)庫(kù)作為目前最有效的數(shù)據(jù)管理手段,在信息系統(tǒng)中的基礎(chǔ)地位和重要作用,學(xué)會(huì)用數(shù)據(jù)庫(kù)對(duì)大量數(shù)據(jù)進(jìn)行有效的組織、存儲(chǔ)和管理。因此,針對(duì)一個(gè)具體的應(yīng)用環(huán)境,設(shè)計(jì)一個(gè)結(jié)構(gòu)良好的數(shù)據(jù)庫(kù)就成為該門(mén)課程的教學(xué)重點(diǎn)之一。
數(shù)據(jù)庫(kù)設(shè)計(jì)人員設(shè)計(jì)的數(shù)據(jù)庫(kù)結(jié)構(gòu)能否真正符合應(yīng)用環(huán)境和普通用戶(hù)的要求,需要由普通用戶(hù)來(lái)進(jìn)行評(píng)判,這就要求在設(shè)計(jì)數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)之前,先設(shè)計(jì)一個(gè)普通用戶(hù)也能夠理解的、更加抽象的概念結(jié)構(gòu),通過(guò)概念結(jié)構(gòu)使普通用戶(hù)能夠積極地參與到數(shù)據(jù)庫(kù)設(shè)計(jì)中來(lái),以保證整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的最終成功運(yùn)行。因此,概念結(jié)構(gòu)設(shè)計(jì)是數(shù)據(jù)庫(kù)設(shè)計(jì)的關(guān)鍵,最常用來(lái)描述概念結(jié)構(gòu)的工具就是E-R圖。
然而,目前諸多流行的數(shù)據(jù)庫(kù)原理教材對(duì)E-R圖設(shè)計(jì)部分的討論均不夠精細(xì),實(shí)際教學(xué)也大都跟隨教材浮于表面,從而使學(xué)生難以設(shè)計(jì)正確反映應(yīng)用環(huán)境實(shí)際語(yǔ)義的E-R圖,造成隨后轉(zhuǎn)換得到的關(guān)系模式碼不正確、數(shù)據(jù)冗余度大、規(guī)范化程度低等問(wèn)題。
1.E-R圖的設(shè)計(jì)
E-R圖設(shè)計(jì)的正確與否取決于數(shù)據(jù)庫(kù)設(shè)計(jì)人員能否真正把握應(yīng)用環(huán)境的業(yè)務(wù)流程以及在該業(yè)務(wù)流程中所涉及的各個(gè)客觀對(duì)象和他們之間發(fā)生的活動(dòng),這需要作準(zhǔn)確深入的用戶(hù)需求分析。這些客觀對(duì)象如果需要記錄的話,就抽象為E-R圖中的實(shí)體(描述實(shí)體的眾多相關(guān)數(shù)據(jù)就抽象為實(shí)體的屬性,將具有相同屬性的眾多實(shí)體抽象為實(shí)體型)o它們之間發(fā)生的活動(dòng)如果也需要記錄的話,就抽象為E-R圖中的聯(lián)系,這是E-R圖設(shè)計(jì)的重點(diǎn)。
以高校學(xué)生選課系統(tǒng)為例,假設(shè)學(xué)校只有一種類(lèi)型的學(xué)生,每名學(xué)生有唯一的一個(gè)學(xué)號(hào),還有姓名、性別、年齡和班級(jí)信息;學(xué)校開(kāi)設(shè)了多門(mén)課程,每門(mén)課程有唯一的一個(gè)課程號(hào),還有課程名、學(xué)分、先行課和課程簡(jiǎn)介信息。由于一門(mén)課程同時(shí)可以由多個(gè)教師講授,因此,在上一學(xué)期末進(jìn)行選課的時(shí)候,每名學(xué)生可以根據(jù)主講教師(有唯一的教師編號(hào))的姓名、性別、年齡和職稱(chēng)信息,有選擇地選修由某些教師講授的某些課程。每個(gè)教師同時(shí)可以講授多門(mén)課程,每門(mén)課程可以供多名學(xué)生選修,如果由某個(gè)教師講授的某門(mén)課程沒(méi)有學(xué)生選修,則取消由這個(gè)教師講授的這門(mén)課程。主講教師會(huì)在學(xué)期末將自己所教學(xué)生的所有課程成績(jī)輸入到數(shù)據(jù)庫(kù)中,以供學(xué)生在網(wǎng)上進(jìn)行查詢(xún)。
首先,我們根據(jù)用戶(hù)需求,分析潛在的實(shí)體。實(shí)體通常是需求文檔中的中心名詞,主要活動(dòng)都是圍繞它們開(kāi)展的。顯然,該系統(tǒng)存在學(xué)生、課程和教師這3類(lèi)客觀對(duì)象,每一類(lèi)客觀對(duì)象都有很多數(shù)據(jù)需要記錄,這就構(gòu)成了該系統(tǒng)需要記錄的第一部分主要數(shù)據(jù);此外,該系統(tǒng)中的主要活動(dòng)——課程的選修與講授以及成績(jī)的輸入與查詢(xún),都是圍繞這3類(lèi)客觀對(duì)象開(kāi)展的。因此,這3類(lèi)客觀對(duì)象就抽象為E-R圖中的3個(gè)實(shí)體型,描述這3個(gè)實(shí)體型的E-R圖如圖1所示(帶有下劃線的屬性為碼)。
其次,根據(jù)用戶(hù)需求,確定實(shí)體之間的聯(lián)系。實(shí)體之間的聯(lián)系通常是需求文檔中的中心動(dòng)詞,表示實(shí)體之間發(fā)生的活動(dòng)或隸屬關(guān)系。在該系統(tǒng)中,這3個(gè)實(shí)體型之間發(fā)生的主要活動(dòng)包括學(xué)生選修教師的課程(或教師給學(xué)生講授課程)、教師輸入成績(jī)和學(xué)生查詢(xún)成績(jī)。由于一名學(xué)生可以有選擇地選修由不同教師講授的不同課程,一個(gè)教師可以給不同學(xué)生講授不同課程,一門(mén)課程可以由不同教師給不同學(xué)生講授。因此,選修(或講授)活動(dòng)涉及這3個(gè)實(shí)體型,是這3個(gè)實(shí)體型之間的一個(gè)多對(duì)多聯(lián)系(在這種情況下,選修和講授是同一個(gè)聯(lián)系)。將該活動(dòng)抽象為E-R圖中的一個(gè)聯(lián)系,是因?yàn)橄到y(tǒng)需要記錄這樣的活動(dòng),即哪名學(xué)生選修了哪個(gè)教師講授的哪門(mén)課程,以及由此活動(dòng)產(chǎn)生的數(shù)據(jù)——成績(jī)(抽象為該聯(lián)系的一個(gè)屬性),這就構(gòu)成了該系統(tǒng)需要記錄的另外一部分主要數(shù)據(jù)。該系統(tǒng)還有兩個(gè)活動(dòng):教師輸入成績(jī)和學(xué)生查詢(xún)成績(jī),由于它們都只是對(duì)成績(jī)屬性的數(shù)據(jù)操作,系統(tǒng)并不需要對(duì)這樣的數(shù)據(jù)操作也進(jìn)行記錄,因此,它們并不抽象為E-R圖中的聯(lián)系。該E-R圖如圖2所示。
很多教材都將圖2中的選修聯(lián)系看成是學(xué)生和課程這2個(gè)實(shí)體型之間的一個(gè)多對(duì)多聯(lián)系(如圖3所示),但這只有在學(xué)生只管選課而無(wú)需考慮主講教師的情況下是正確的。在這種情況下,為了確定成績(jī)最終由哪個(gè)主講教師向數(shù)據(jù)庫(kù)中輸入(在圖2所示的情況下,這是很直接的),一個(gè)教師只能被指定為某一個(gè)或幾個(gè)班級(jí)講授課程,如圖4所示,這樣才可以根據(jù)學(xué)生所在的班級(jí)及其選修的課程來(lái)綜合確定哪個(gè)教師是其主講教師,負(fù)責(zé)為其輸人成績(jī)。因此,E-R圖的設(shè)計(jì)應(yīng)該具體情況具體分析,要根據(jù)應(yīng)用環(huán)境的業(yè)務(wù)流程有針對(duì)性地進(jìn)行設(shè)計(jì)。
2.E-R圖的精細(xì)設(shè)計(jì)
圖2和圖4還存在一定的問(wèn)題。雖然學(xué)生(在圖4中為班級(jí))、課程和教師之間是多對(duì)多聯(lián)系,但一名學(xué)生(在圖4中為班級(jí))選修了一門(mén)課程,只會(huì)有一個(gè)主講教師,這在圖2和圖4中是反映不出來(lái)的。
此外,根據(jù)E-R圖向關(guān)系模型的轉(zhuǎn)換原則——“3個(gè)或3個(gè)以上實(shí)體間的一個(gè)多元聯(lián)系可以轉(zhuǎn)換成一個(gè)關(guān)系模式,各實(shí)體的碼組成關(guān)系的碼或關(guān)系碼的一部分”,圖2中的選修聯(lián)系和圖4中的講授聯(lián)系分別轉(zhuǎn)換為:
選修(學(xué)號(hào),課程號(hào),教師編號(hào),成績(jī))
和
講授(班號(hào),課程號(hào),教師編號(hào))(班號(hào)為班級(jí)實(shí)體的碼)。
然而,根據(jù)上述語(yǔ)義,存在函數(shù)依賴(lài)“(學(xué)號(hào),課程號(hào))-教師編號(hào)”和“(班號(hào),課程號(hào))-教師編號(hào)”,因此,這2個(gè)關(guān)系模式的碼并不正確,應(yīng)改為:
選修(學(xué)號(hào),課程號(hào),教師編號(hào),成績(jī))
和
講授(班號(hào),課程號(hào),教師編號(hào))。
然而,這與轉(zhuǎn)換原則相悖。
為解決這個(gè)問(wèn)題,我們對(duì)以上E-R圖進(jìn)行更加精細(xì)的設(shè)計(jì),引入教學(xué)班實(shí)體型,選修同一個(gè)教師、同一門(mén)課程的所有學(xué)生組成一個(gè)教學(xué)班(這也是很多高校的實(shí)際做法)。一名學(xué)生參加了一個(gè)教學(xué)班,就意味著選修了某個(gè)教師講授的某門(mén)課程,因此,教師、課程和學(xué)生之間是通過(guò)教學(xué)班聯(lián)系起來(lái)的(如圖5所示)。
再舉一個(gè)例子。一般的銷(xiāo)售系統(tǒng)都存在顧客瀏覽和訂購(gòu)商品這樣的主要活動(dòng),其中,顧客瀏覽商品只能算是一個(gè)數(shù)據(jù)操作,顧客訂購(gòu)商品需要系統(tǒng)記錄相應(yīng)的數(shù)據(jù),包括哪個(gè)顧客訂購(gòu)了哪些商品及其訂購(gòu)數(shù)量、訂購(gòu)時(shí)間、收貨地址等,因此需要抽象為E-R圖中的一個(gè)聯(lián)系,如圖6所示。
然而,圖6還存在一定的問(wèn)題,一個(gè)顧客一次訂購(gòu)了多種商品,它們的訂購(gòu)時(shí)間和收貨地址是完全相同的,其后果就是由圖6轉(zhuǎn)換得到的關(guān)系模式“訂購(gòu)(顧客編號(hào)、商品編號(hào)、訂購(gòu)數(shù)量、訂購(gòu)時(shí)間、收貨地址)”(顧客編號(hào)和商品編號(hào)分別為顧客和商品這2個(gè)實(shí)體型的碼)存在大量的數(shù)據(jù)冗余。事實(shí)上,顧客訂購(gòu)商品是通過(guò)訂單體現(xiàn)的,訂購(gòu)時(shí)間和收貨地址只是訂單實(shí)體型的2個(gè)屬性,因此,圖6應(yīng)修正為圖7。
現(xiàn)在很多銷(xiāo)售系統(tǒng)都會(huì)進(jìn)行打折,以實(shí)現(xiàn)提高顧客忠誠(chéng)度和促銷(xiāo)商品的雙重目的,為此,E-R圖中需要增加一個(gè)折扣規(guī)則實(shí)體型,以存放這些打折信息,但不同系統(tǒng)進(jìn)行打折的方法是不同的,相應(yīng)的E-R圖自然也要有所區(qū)別。
有的系統(tǒng)會(huì)根據(jù)顧客的等級(jí)進(jìn)行打折,而不考慮該顧客購(gòu)買(mǎi)的是哪些商品,這樣的系統(tǒng)主要為提高顧客忠誠(chéng)度,這種情況下的E-R圖就應(yīng)該如圖8所示。
有的系統(tǒng)只是對(duì)商品進(jìn)行打折,而不考慮是哪些顧客購(gòu)買(mǎi)了該商品,這樣的系統(tǒng)主要為促銷(xiāo)商品,這種情況下的E-R圖就應(yīng)該如圖9所示。
然而,在實(shí)際應(yīng)用中,如果系統(tǒng)足夠復(fù)雜,為了簡(jiǎn)化E-R圖,上述的參照聯(lián)系也可以不用畫(huà)出來(lái)。
3.結(jié)語(yǔ)
針對(duì)目前流行的數(shù)據(jù)庫(kù)原理教材對(duì)E-R圖設(shè)計(jì)部分討論不夠精細(xì),從而使學(xué)生難以準(zhǔn)確掌握E.R圖設(shè)計(jì)的問(wèn)題,我們給出了一些E-R圖精細(xì)設(shè)計(jì)的案例,從中可以理解E-R圖設(shè)計(jì)的根本在于正確分析具體應(yīng)用環(huán)境中的業(yè)務(wù)流程及其語(yǔ)義,尤其是實(shí)體之間存在的各種聯(lián)系,以克服E-R圖描述不清、隨后轉(zhuǎn)換得到的關(guān)系模式碼不正確、數(shù)據(jù)冗余度大、規(guī)范化程度低等問(wèn)題。通過(guò)兩年的教學(xué)實(shí)踐,這些教學(xué)案例的應(yīng)用效果良好。為了應(yīng)付各行各業(yè)信息系統(tǒng)的需要,今后還需要進(jìn)一步豐富各行各業(yè)的教學(xué)案例,使學(xué)生能更好地掌握E-R圖的分析與設(shè)計(jì)方法。