《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > 實(shí)體間引用關(guān)系的描述方法與維護(hù)策略分析

實(shí)體間引用關(guān)系的描述方法與維護(hù)策略分析

2009-08-20
作者:王杰文 張大方

??? 摘? 要: 分析了IDEF1X的實(shí)體引用關(guān)系描述方法和引用關(guān)系類型,剖析了實(shí)體間的依賴性對(duì)引用關(guān)系的影響,討論了引用關(guān)系的維護(hù)策略及在ERwin中的實(shí)現(xiàn)方法。

  關(guān)鍵詞: IDEF1X方法? 實(shí)體關(guān)系? 實(shí)體依賴

?

  IDEF(Integrated Computer-Aided Manufacturing DEFinition)方法是美國(guó)空軍ICAM項(xiàng)目建立的。最初開(kāi)發(fā)了功能建模(IDEF0)、信息建模(IDEF1)、動(dòng)態(tài)建模(IDEF2)三種方法。隨著信息系統(tǒng)的相繼開(kāi)發(fā),又開(kāi)發(fā)出了一系列IDEF族方法。其中用于數(shù)據(jù)建模的方法IDEF1X(IDEF1 extended)是IDEF1的擴(kuò)展版本,它是IDEF1方法和LDDT(邏輯數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù))相結(jié)合的產(chǎn)物。數(shù)據(jù)建模的關(guān)鍵是對(duì)數(shù)據(jù)之間關(guān)系的表達(dá)。IDEF1X方法為數(shù)據(jù)間關(guān)系的描述提供了較豐富的表達(dá)能力。

1?引用關(guān)系的描述方法

  E-R模型中的實(shí)體可以分為獨(dú)立實(shí)體和依賴實(shí)體二類。獨(dú)立實(shí)體(Independent Entity)是指不需要模型中任何其他實(shí)體標(biāo)識(shí)的實(shí)體,其鍵屬性完全由自身給定。依賴實(shí)體(Dependent Entity)是指依賴于模型中其他實(shí)體的實(shí)體,其屬性中包括了其他實(shí)體的主鍵屬性(外部鍵)。在依賴實(shí)體(子實(shí)體)和被依賴實(shí)體(父實(shí)體,可能是獨(dú)立實(shí)體,也可能是依賴實(shí)體)之間將存在引用關(guān)系(也稱引用完整性)。引用關(guān)系直接表達(dá)的是父實(shí)體與子實(shí)體之間的一對(duì)多關(guān)系,即子實(shí)體的某(些)屬性取值來(lái)源于其父實(shí)體的鍵值。

  通常,二個(gè)實(shí)體的引用關(guān)系可表示為:

  

  其中:s是描述被依賴實(shí)體的關(guān)系(父關(guān)系),r是描述依賴實(shí)體的關(guān)系(子關(guān)系),X是r的屬性子集,K是s的主鍵屬性集,且X和K滿足并相容規(guī)則(在ERwin所構(gòu)造的模型中X是K的遷移)。

  根據(jù)父實(shí)體中的鍵(K)向子實(shí)體遷移的位置不同,可以對(duì)一對(duì)多關(guān)系進(jìn)一步分類。

  (1)標(biāo)識(shí)關(guān)系(Identifying Relationship)。父實(shí)體的鍵遷移到子實(shí)體的鍵區(qū),成為子實(shí)體標(biāo)識(shí)的一部分,即子實(shí)體的標(biāo)識(shí)依賴于父實(shí)體。標(biāo)識(shí)關(guān)系運(yùn)用其業(yè)務(wù)規(guī)則,通過(guò)父實(shí)體的標(biāo)識(shí)符來(lái)標(biāo)識(shí)子實(shí)體。引入?yún)⑴c度的概念,父實(shí)體的參與度為(0,1),子實(shí)體的參與度為(1,n)。即在標(biāo)識(shí)關(guān)系中,存在著父實(shí)體部分參與、子實(shí)體完全參與的一對(duì)多聯(lián)系(zero-or-one-to-one-or-more)。

  (2)非標(biāo)識(shí)關(guān)系(Non-Identifying Relationship)。父實(shí)體的鍵遷移到子實(shí)體的非鍵區(qū)(數(shù)據(jù)區(qū)),即子實(shí)體的標(biāo)識(shí)不依賴于父實(shí)體。對(duì)于非標(biāo)識(shí)關(guān)系還應(yīng)該區(qū)分二種情況:①非標(biāo)識(shí)強(qiáng)制關(guān)系(Non-Identifying Mandatory Relationship)。即從子實(shí)體看,非標(biāo)識(shí)關(guān)系是強(qiáng)制(mandatory)的,盡管子實(shí)體不由父實(shí)體所標(biāo)識(shí),但子實(shí)體的存在仍然依賴于父實(shí)體。引入?yún)⑴c度的概念,父實(shí)體的參與度為(0,1),子實(shí)體的參與度為(1,n)。即在非標(biāo)識(shí)強(qiáng)制關(guān)系中,也存在父實(shí)體部分參與、子實(shí)體完全參與的一對(duì)多聯(lián)系;②非標(biāo)識(shí)非強(qiáng)制關(guān)系(Non-Identifying Non-Mandatory Relationship)。即非標(biāo)識(shí)關(guān)系是可選的,子實(shí)體既不由父實(shí)體標(biāo)識(shí),也不依賴于父實(shí)體而存在。引入?yún)⑴c度的概念,父實(shí)體的參與度為(0,1),子實(shí)體的參與度為(0,n),即在非標(biāo)識(shí)非強(qiáng)制關(guān)系中,存在著父實(shí)體部分參與、子實(shí)體也部分參與的一對(duì)多聯(lián)系。

  通常,一對(duì)多關(guān)系引起父子實(shí)體間的依賴。不論父實(shí)體的鍵遷移到子實(shí)體的鍵區(qū)還是數(shù)據(jù)區(qū),若子實(shí)體的存在依賴于父實(shí)體的存在,則稱這種父子關(guān)系存在依賴(Existence-dependency)。所以標(biāo)識(shí)關(guān)系和非標(biāo)識(shí)強(qiáng)制關(guān)系總是導(dǎo)致存在依賴。存在依賴表達(dá)了二種關(guān)系,即伴隨關(guān)系和限制關(guān)系。在伴隨關(guān)系中,子實(shí)體將伴隨著父實(shí)體的刪除而被自動(dòng)刪除,例如:學(xué)生被開(kāi)除,其選課記錄也應(yīng)該一同刪除。在限制關(guān)系中,子實(shí)體的存在將限制父實(shí)體的刪除,例如:有學(xué)生選修的課程不得刪除。若父實(shí)體的鍵遷移到子實(shí)體的鍵區(qū),則子實(shí)體由父實(shí)體所標(biāo)識(shí),這種父子關(guān)系稱標(biāo)識(shí)依賴(Identification-Dependency)。所以標(biāo)識(shí)關(guān)系總是導(dǎo)致標(biāo)識(shí)依賴。值得注意的是,非標(biāo)識(shí)關(guān)系從不引起標(biāo)識(shí)依賴(因?yàn)檫w移鍵只到數(shù)據(jù)區(qū))。

  一對(duì)多關(guān)系是關(guān)系數(shù)據(jù)模型可以直接表達(dá)的關(guān)系,其他的關(guān)系在轉(zhuǎn)化為數(shù)據(jù)模型時(shí)可以用一對(duì)多關(guān)系來(lái)表示。例如:子類(Subtype)和超類(Supertype)的關(guān)系實(shí)際上就是一個(gè)父子關(guān)系(一對(duì)多),只是為了進(jìn)一步描述一個(gè)實(shí)體集中某些實(shí)體的不同性質(zhì),從該實(shí)體集中取出一部分實(shí)體構(gòu)成一個(gè)(或多個(gè))新的實(shí)體集,即原來(lái)實(shí)體集的子類,而原實(shí)體集是新實(shí)體集的超類。顯而易見(jiàn),子類和超類之間體現(xiàn)的是標(biāo)識(shí)關(guān)系(子類由超類標(biāo)識(shí))。一個(gè)實(shí)體可以是某一實(shí)體的子類,同時(shí),也可以是另一實(shí)體的超類。

  從實(shí)用上講多對(duì)多關(guān)系(也為不確定關(guān)系)沒(méi)有意義。如圖1所示,在學(xué)生選課系統(tǒng)中,實(shí)體STUDENT(學(xué)生)和COURSE(課程)之間是多對(duì)多關(guān)系。但是,在引入一個(gè)關(guān)聯(lián)實(shí)體STUDENT_COURSE(學(xué)生選課)以后,就可以將這個(gè)多對(duì)多關(guān)系轉(zhuǎn)化為二個(gè)一對(duì)多關(guān)系,即STUDENT與STUDENT_COURSE、COURSE與STUDENT_COURSE二個(gè)一對(duì)多關(guān)系,并且這種關(guān)系是標(biāo)識(shí)關(guān)系。因?yàn)镾TUDENT和COURSE的鍵均遷移到關(guān)聯(lián)實(shí)體STUDENT_COURSE的鍵區(qū),共同構(gòu)成了關(guān)聯(lián)實(shí)體STUDENT_COURSE的鍵。此時(shí)的關(guān)系就具有明確意義了。

?

  綜上所述,實(shí)體之間的關(guān)系可以歸納為標(biāo)識(shí)關(guān)系和非標(biāo)識(shí)關(guān)系二類。標(biāo)識(shí)關(guān)系和非標(biāo)關(guān)系均導(dǎo)致父子實(shí)體之間的引用關(guān)系。標(biāo)識(shí)關(guān)系與非標(biāo)識(shí)強(qiáng)制關(guān)系遵循的引用規(guī)則為“zero-or-one-to-one-or-more”(0或1對(duì)1或多);非標(biāo)識(shí)非強(qiáng)制關(guān)系遵循的引用規(guī)則為“zero-or-one-to-zero-or-one-or-more”(0或1對(duì)0或1或多)。

2? 引用關(guān)系的維護(hù)策略

  對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新可能破壞實(shí)體之間的引用關(guān)系(引用完整性)。因此,在對(duì)具有引用關(guān)系的實(shí)體關(guān)系,例如r(子關(guān)系)和s(父關(guān)系)進(jìn)行更新時(shí),應(yīng)該設(shè)法維護(hù)引用完整性。下面是一般規(guī)則。

  (1)如果在r中插入一個(gè)實(shí)例t,則系統(tǒng)必須保證在s中有一個(gè)實(shí)例u使u[K]=t[X]。也就是說(shuō)必須保證t[X]∈ΠK(s)。(2)如果從s中刪除一個(gè)實(shí)例u,則在r中的相應(yīng)實(shí)例集合σX=u[K](r),如果不是空集,則系統(tǒng)或者拒絕執(zhí)行該命令,或者自動(dòng)刪除r中的相應(yīng)實(shí)例(即實(shí)施級(jí)聯(lián)刪除)。(3)對(duì)更新操作應(yīng)該考慮二種情況:對(duì)子關(guān)系r的更新和對(duì)父關(guān)系s的更新。

  如果更新r中的實(shí)例t,并且更新涉及到X的值,則應(yīng)該做類似于在r中插入實(shí)例的處理。設(shè)t′表示實(shí)例t的新值,則系統(tǒng)應(yīng)該保證t′[X]∈ΠK(s)。

  如果更新s中的實(shí)例u,并且更新涉及到K的值,則應(yīng)該做類似于在s中刪除實(shí)例的處理。對(duì)于子實(shí)體關(guān)系r中相應(yīng)實(shí)例集合σX=u[K](r),如果不是空集,則系統(tǒng)或者拒絕執(zhí)行該更新操作,或者進(jìn)行按上述級(jí)聯(lián)刪除方式作級(jí)聯(lián)更新,以確保r中的實(shí)例引用s中K的新值。

  具體地說(shuō),對(duì)標(biāo)識(shí)關(guān)系和非標(biāo)識(shí)關(guān)系應(yīng)分別采取不同的處理策略。

  當(dāng)刪除實(shí)體中的實(shí)例時(shí),應(yīng)遵循如下刪除規(guī)則:若父子實(shí)體之間存在依賴(即標(biāo)識(shí)關(guān)系和非標(biāo)識(shí)強(qiáng)制關(guān)系),當(dāng)父子實(shí)體之間為伴隨關(guān)系時(shí),刪除父實(shí)體的實(shí)例,子實(shí)體的相應(yīng)實(shí)例則實(shí)施級(jí)聯(lián)(cascade)刪除(父去子消);當(dāng)父子實(shí)體之間為限制關(guān)系時(shí),子實(shí)體的實(shí)例將限制(restrict)對(duì)父實(shí)體相應(yīng)實(shí)例的刪除(子在父存)。標(biāo)識(shí)依賴旨在表達(dá)父實(shí)體對(duì)子實(shí)體的鑒別關(guān)系,不關(guān)心子實(shí)體的存亡,所以在數(shù)據(jù)更新時(shí)可以不考慮。為維護(hù)既無(wú)存在依賴又無(wú)標(biāo)識(shí)依賴的非標(biāo)識(shí)非強(qiáng)制關(guān)系中的引用關(guān)系,在刪除父實(shí)體實(shí)例時(shí),可以將子實(shí)體中的相應(yīng)遷移鍵設(shè)置為空值(NULL)。

  例如:圖1中STUDENT與STUDENT_COURSE是標(biāo)識(shí)關(guān)系,STUDENT的鍵(S_NO)是STUDENT_COURSE主鍵的一部分。根據(jù)基數(shù)規(guī)則,STUDENT_COURSE的每一個(gè)實(shí)例都有一個(gè)STUDENT實(shí)例與之對(duì)應(yīng),標(biāo)識(shí)關(guān)系明確地記載了STUDENT_COURSE存在依賴于STUDENT,且這種存在依賴為伴隨關(guān)系。所以,若刪除STUDENT的實(shí)例,則應(yīng)刪除STUDENT_COURSE中與STUDENT已刪除實(shí)例對(duì)應(yīng)的全部實(shí)例。而COURSE與STUDENT_COURSE也是標(biāo)識(shí)關(guān)系,二者之間為存在依賴,但這種存在依賴為限制關(guān)系。所以,若要?jiǎng)h除COURSE的實(shí)例,只要STUDENT_COURSE中存在著對(duì)應(yīng)于COURSE的實(shí)例,就禁止刪除COURSE。

  如上所述,刪除規(guī)則決定了實(shí)體中的一個(gè)實(shí)例(即表中的一行數(shù)據(jù))被刪除時(shí)數(shù)據(jù)庫(kù)的反映;插入和替換規(guī)則決定了當(dāng)數(shù)據(jù)行被插入或改變時(shí)數(shù)據(jù)庫(kù)的反映。

  當(dāng)在實(shí)體中插入與替換實(shí)例時(shí),應(yīng)遵循如下規(guī)則:

  對(duì)于插入,若父子實(shí)體之間有存在依賴,則只有在子實(shí)體引用的外鍵與父實(shí)體中已存在的鍵值匹配時(shí),子實(shí)體實(shí)例才能被插入;若父子實(shí)體之間為非標(biāo)識(shí)非強(qiáng)制關(guān)系,則可以先令外鍵為空值將子實(shí)體的實(shí)例插入。在效果上,替換與插入應(yīng)使用同樣的規(guī)則。

  例如,在學(xué)生選課系統(tǒng)中,STUDENT_COURSE與STUDENT、COURSE之間都是標(biāo)識(shí)關(guān)系,構(gòu)成了存在依賴。因此,不能在STUDENT_COURSE中插入STUDENT中沒(méi)有的學(xué)生和COURSE中不存在的課程。而在圖2所示的機(jī)票預(yù)訂系統(tǒng)中,PASSENGER和SEAT-RESERVATION之間是非標(biāo)識(shí)非強(qiáng)制關(guān)系,所以,沒(méi)有被旅客預(yù)訂的機(jī)票也可以插入SEAT-RESERVATION中。此時(shí),外鍵屬性passenger-name取空值,這是符合現(xiàn)實(shí)的。

3?ERwin對(duì)引用關(guān)系的實(shí)現(xiàn)

  ERwin的正向工程可以自動(dòng)為每個(gè)父實(shí)體建立刪除和更改2個(gè)觸發(fā)器,為每個(gè)子實(shí)體建立插入和更改2個(gè)觸發(fā)器。若一個(gè)實(shí)體既是父實(shí)體又是子實(shí)體,則建立插入、刪除和更改3個(gè)觸發(fā)器。各類觸發(fā)器的功能因引用關(guān)系類型不同而有所差異。

  圖2所示為一個(gè)航班座位預(yù)訂系統(tǒng)的ERwin邏輯視圖。在該系統(tǒng)中,PASSENGER和SEAT-RESERVATION之間是非標(biāo)識(shí)非強(qiáng)制關(guān)系,FLIGHT和SEAT-RESERVATION之間是標(biāo)識(shí)關(guān)系。它們之間的引用關(guān)系上面已經(jīng)作了分析。當(dāng)ERwin進(jìn)行正向工程時(shí),這些引用關(guān)系將由一系列的觸發(fā)器來(lái)實(shí)現(xiàn)和維護(hù)。例如,為了維護(hù)PASSENGERT和SEAT-RESERVATION之間的非標(biāo)識(shí)非強(qiáng)制關(guān)系,在PASSENGER上建立了刪除觸發(fā)器tD_PASSENGER(涉及屬性passenger-name的)和更改觸發(fā)器tU_PASSENGER。當(dāng)在PASSENGER中進(jìn)行刪除和更改時(shí),它們都將SEAT-RESERVATION中相應(yīng)實(shí)例的屬性passenger-name置空值。

4? 結(jié)束語(yǔ)

  數(shù)據(jù)建模是數(shù)據(jù)庫(kù)設(shè)計(jì)的關(guān)鍵,IDEF1X數(shù)據(jù)建模奠定了數(shù)據(jù)庫(kù)設(shè)計(jì)的基礎(chǔ)。目前,IDEF1X方法在國(guó)內(nèi)外已廣泛應(yīng)用于政府、工業(yè)和商業(yè)領(lǐng)域中,支持廣泛的企業(yè)應(yīng)用。在建立企業(yè)信息管理系統(tǒng)之前,采用IDEF1X方法為信息系統(tǒng)建立合適的信息模型,對(duì)實(shí)體間的引用關(guān)系做出充分、準(zhǔn)確、清晰的描述是十分必要的,這也是企業(yè)信息管理系統(tǒng)開(kāi)發(fā)成敗的關(guān)鍵。

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。