??? 摘? 要: 分析了IDEF1X的實(shí)體引用關(guān)系描述方法和引用關(guān)系類(lèi)型,剖析了實(shí)體間的依賴(lài)性對(duì)引用關(guān)系的影響,討論了引用關(guān)系的維護(hù)策略及在ERwin中的實(shí)現(xiàn)方法,。
關(guān)鍵詞: IDEF1X方法? 實(shí)體關(guān)系? 實(shí)體依賴(lài)
?
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í)體和依賴(lài)實(shí)體二類(lèi),。獨(dú)立實(shí)體(Independent Entity)是指不需要模型中任何其他實(shí)體標(biāo)識(shí)的實(shí)體,其鍵屬性完全由自身給定。依賴(lài)實(shí)體(Dependent Entity)是指依賴(lài)于模型中其他實(shí)體的實(shí)體,其屬性中包括了其他實(shí)體的主鍵屬性(外部鍵)。在依賴(lài)實(shí)體(子實(shí)體)和被依賴(lài)實(shí)體(父實(shí)體,可能是獨(dú)立實(shí)體,也可能是依賴(lài)實(shí)體)之間將存在引用關(guān)系(也稱(chēng)引用完整性),。引用關(guān)系直接表達(dá)的是父實(shí)體與子實(shí)體之間的一對(duì)多關(guān)系,即子實(shí)體的某(些)屬性取值來(lái)源于其父實(shí)體的鍵值,。
通常,二個(gè)實(shí)體的引用關(guān)系可表示為:
其中:s是描述被依賴(lài)實(shí)體的關(guān)系(父關(guān)系),r是描述依賴(lài)實(shí)體的關(guān)系(子關(guān)系),X是r的屬性子集,K是s的主鍵屬性集,且X和K滿(mǎn)足并相容規(guī)則(在ERwin所構(gòu)造的模型中X是K的遷移)。
根據(jù)父實(shí)體中的鍵(K)向子實(shí)體遷移的位置不同,可以對(duì)一對(duì)多關(guān)系進(jìn)一步分類(lèi),。
(1)標(biāo)識(shí)關(guān)系(Identifying Relationship),。父實(shí)體的鍵遷移到子實(shí)體的鍵區(qū),成為子實(shí)體標(biāo)識(shí)的一部分,即子實(shí)體的標(biāo)識(shí)依賴(lài)于父實(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í)不依賴(lài)于父實(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í)體的存在仍然依賴(lài)于父實(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í),也不依賴(lài)于父實(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í)體間的依賴(lài)。不論父實(shí)體的鍵遷移到子實(shí)體的鍵區(qū)還是數(shù)據(jù)區(qū),若子實(shí)體的存在依賴(lài)于父實(shí)體的存在,則稱(chēng)這種父子關(guān)系存在依賴(lài)(Existence-dependency),。所以標(biāo)識(shí)關(guān)系和非標(biāo)識(shí)強(qiáng)制關(guān)系總是導(dǎo)致存在依賴(lài),。存在依賴(lài)表達(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)系稱(chēng)標(biāo)識(shí)依賴(lài)(Identification-Dependency)。所以標(biāo)識(shí)關(guān)系總是導(dǎo)致標(biāo)識(shí)依賴(lài),。值得注意的是,非標(biāo)識(shí)關(guān)系從不引起標(biāo)識(shí)依賴(lài)(因?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)表示。例如:子類(lèi)(Subtype)和超類(lèi)(Supertype)的關(guān)系實(shí)際上就是一個(gè)父子關(guān)系(一對(duì)多),只是為了進(jìn)一步描述一個(gè)實(shí)體集中某些實(shí)體的不同性質(zhì),從該實(shí)體集中取出一部分實(shí)體構(gòu)成一個(gè)(或多個(gè))新的實(shí)體集,即原來(lái)實(shí)體集的子類(lèi),而原實(shí)體集是新實(shí)體集的超類(lèi),。顯而易見(jiàn),子類(lèi)和超類(lèi)之間體現(xiàn)的是標(biāo)識(shí)關(guān)系(子類(lèi)由超類(lèi)標(biāo)識(shí)),。一個(gè)實(shí)體可以是某一實(shí)體的子類(lèi),同時(shí),也可以是另一實(shí)體的超類(lèi)。
從實(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)系二類(lèi)。標(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)該做類(lèi)似于在r中插入實(shí)例的處理,。設(shè)t′表示實(shí)例t的新值,則系統(tǒng)應(yīng)該保證t′[X]∈ΠK(s),。
如果更新s中的實(shí)例u,并且更新涉及到K的值,則應(yīng)該做類(lèi)似于在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í)體之間存在依賴(lài)(即標(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í)依賴(lài)旨在表達(dá)父實(shí)體對(duì)子實(shí)體的鑒別關(guān)系,不關(guān)心子實(shí)體的存亡,所以在數(shù)據(jù)更新時(shí)可以不考慮,。為維護(hù)既無(wú)存在依賴(lài)又無(wú)標(biāo)識(shí)依賴(lài)的非標(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存在依賴(lài)于STUDENT,且這種存在依賴(lài)為伴隨關(guān)系,。所以,若刪除STUDENT的實(shí)例,則應(yīng)刪除STUDENT_COURSE中與STUDENT已刪除實(shí)例對(duì)應(yīng)的全部實(shí)例,。而COURSE與STUDENT_COURSE也是標(biāo)識(shí)關(guān)系,二者之間為存在依賴(lài),但這種存在依賴(lài)為限制關(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í)體之間有存在依賴(lài),則只有在子實(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)成了存在依賴(lài)。因此,不能在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ā)器,。各類(lèi)觸發(fā)器的功能因引用關(guān)系類(lèi)型不同而有所差異,。
圖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)鍵,。