??? 摘? 要: 分析了IDEF1X的實體引用關系描述方法和引用關系類型,剖析了實體間的依賴性對引用關系的影響,討論了引用關系的維護策略及在ERwin中的實現(xiàn)方法。
關鍵詞: IDEF1X方法? 實體關系? 實體依賴
?
IDEF(Integrated Computer-Aided Manufacturing DEFinition)方法是美國空軍ICAM項目建立的。最初開發(fā)了功能建模(IDEF0)、信息建模(IDEF1)、動態(tài)建模(IDEF2)三種方法。隨著信息系統(tǒng)的相繼開發(fā),又開發(fā)出了一系列IDEF族方法。其中用于數(shù)據(jù)建模的方法IDEF1X(IDEF1 extended)是IDEF1的擴展版本,它是IDEF1方法和LDDT(邏輯數(shù)據(jù)庫設計技術)相結(jié)合的產(chǎn)物。數(shù)據(jù)建模的關鍵是對數(shù)據(jù)之間關系的表達。IDEF1X方法為數(shù)據(jù)間關系的描述提供了較豐富的表達能力。
1?引用關系的描述方法
E-R模型中的實體可以分為獨立實體和依賴實體二類。獨立實體(Independent Entity)是指不需要模型中任何其他實體標識的實體,其鍵屬性完全由自身給定。依賴實體(Dependent Entity)是指依賴于模型中其他實體的實體,其屬性中包括了其他實體的主鍵屬性(外部鍵)。在依賴實體(子實體)和被依賴實體(父實體,可能是獨立實體,也可能是依賴實體)之間將存在引用關系(也稱引用完整性)。引用關系直接表達的是父實體與子實體之間的一對多關系,即子實體的某(些)屬性取值來源于其父實體的鍵值。
通常,二個實體的引用關系可表示為:
其中:s是描述被依賴實體的關系(父關系),r是描述依賴實體的關系(子關系),X是r的屬性子集,K是s的主鍵屬性集,且X和K滿足并相容規(guī)則(在ERwin所構造的模型中X是K的遷移)。
根據(jù)父實體中的鍵(K)向子實體遷移的位置不同,可以對一對多關系進一步分類。
(1)標識關系(Identifying Relationship)。父實體的鍵遷移到子實體的鍵區(qū),成為子實體標識的一部分,即子實體的標識依賴于父實體。標識關系運用其業(yè)務規(guī)則,通過父實體的標識符來標識子實體。引入?yún)⑴c度的概念,父實體的參與度為(0,1),子實體的參與度為(1,n)。即在標識關系中,存在著父實體部分參與、子實體完全參與的一對多聯(lián)系(zero-or-one-to-one-or-more)。
(2)非標識關系(Non-Identifying Relationship)。父實體的鍵遷移到子實體的非鍵區(qū)(數(shù)據(jù)區(qū)),即子實體的標識不依賴于父實體。對于非標識關系還應該區(qū)分二種情況:①非標識強制關系(Non-Identifying Mandatory Relationship)。即從子實體看,非標識關系是強制(mandatory)的,盡管子實體不由父實體所標識,但子實體的存在仍然依賴于父實體。引入?yún)⑴c度的概念,父實體的參與度為(0,1),子實體的參與度為(1,n)。即在非標識強制關系中,也存在父實體部分參與、子實體完全參與的一對多聯(lián)系;②非標識非強制關系(Non-Identifying Non-Mandatory Relationship)。即非標識關系是可選的,子實體既不由父實體標識,也不依賴于父實體而存在。引入?yún)⑴c度的概念,父實體的參與度為(0,1),子實體的參與度為(0,n),即在非標識非強制關系中,存在著父實體部分參與、子實體也部分參與的一對多聯(lián)系。
通常,一對多關系引起父子實體間的依賴。不論父實體的鍵遷移到子實體的鍵區(qū)還是數(shù)據(jù)區(qū),若子實體的存在依賴于父實體的存在,則稱這種父子關系存在依賴(Existence-dependency)。所以標識關系和非標識強制關系總是導致存在依賴。存在依賴表達了二種關系,即伴隨關系和限制關系。在伴隨關系中,子實體將伴隨著父實體的刪除而被自動刪除,例如:學生被開除,其選課記錄也應該一同刪除。在限制關系中,子實體的存在將限制父實體的刪除,例如:有學生選修的課程不得刪除。若父實體的鍵遷移到子實體的鍵區(qū),則子實體由父實體所標識,這種父子關系稱標識依賴(Identification-Dependency)。所以標識關系總是導致標識依賴。值得注意的是,非標識關系從不引起標識依賴(因為遷移鍵只到數(shù)據(jù)區(qū))。
一對多關系是關系數(shù)據(jù)模型可以直接表達的關系,其他的關系在轉(zhuǎn)化為數(shù)據(jù)模型時可以用一對多關系來表示。例如:子類(Subtype)和超類(Supertype)的關系實際上就是一個父子關系(一對多),只是為了進一步描述一個實體集中某些實體的不同性質(zhì),從該實體集中取出一部分實體構成一個(或多個)新的實體集,即原來實體集的子類,而原實體集是新實體集的超類。顯而易見,子類和超類之間體現(xiàn)的是標識關系(子類由超類標識)。一個實體可以是某一實體的子類,同時,也可以是另一實體的超類。
從實用上講多對多關系(也為不確定關系)沒有意義。如圖1所示,在學生選課系統(tǒng)中,實體STUDENT(學生)和COURSE(課程)之間是多對多關系。但是,在引入一個關聯(lián)實體STUDENT_COURSE(學生選課)以后,就可以將這個多對多關系轉(zhuǎn)化為二個一對多關系,即STUDENT與STUDENT_COURSE、COURSE與STUDENT_COURSE二個一對多關系,并且這種關系是標識關系。因為STUDENT和COURSE的鍵均遷移到關聯(lián)實體STUDENT_COURSE的鍵區(qū),共同構成了關聯(lián)實體STUDENT_COURSE的鍵。此時的關系就具有明確意義了。
?
綜上所述,實體之間的關系可以歸納為標識關系和非標識關系二類。標識關系和非標關系均導致父子實體之間的引用關系。標識關系與非標識強制關系遵循的引用規(guī)則為“zero-or-one-to-one-or-more”(0或1對1或多);非標識非強制關系遵循的引用規(guī)則為“zero-or-one-to-zero-or-one-or-more”(0或1對0或1或多)。
2? 引用關系的維護策略
對數(shù)據(jù)庫進行更新可能破壞實體之間的引用關系(引用完整性)。因此,在對具有引用關系的實體關系,例如r(子關系)和s(父關系)進行更新時,應該設法維護引用完整性。下面是一般規(guī)則。
(1)如果在r中插入一個實例t,則系統(tǒng)必須保證在s中有一個實例u使u[K]=t[X]。也就是說必須保證t[X]∈ΠK(s)。(2)如果從s中刪除一個實例u,則在r中的相應實例集合σX=u[K](r),如果不是空集,則系統(tǒng)或者拒絕執(zhí)行該命令,或者自動刪除r中的相應實例(即實施級聯(lián)刪除)。(3)對更新操作應該考慮二種情況:對子關系r的更新和對父關系s的更新。
如果更新r中的實例t,并且更新涉及到X的值,則應該做類似于在r中插入實例的處理。設t′表示實例t的新值,則系統(tǒng)應該保證t′[X]∈ΠK(s)。
如果更新s中的實例u,并且更新涉及到K的值,則應該做類似于在s中刪除實例的處理。對于子實體關系r中相應實例集合σX=u[K](r),如果不是空集,則系統(tǒng)或者拒絕執(zhí)行該更新操作,或者進行按上述級聯(lián)刪除方式作級聯(lián)更新,以確保r中的實例引用s中K的新值。
具體地說,對標識關系和非標識關系應分別采取不同的處理策略。
當刪除實體中的實例時,應遵循如下刪除規(guī)則:若父子實體之間存在依賴(即標識關系和非標識強制關系),當父子實體之間為伴隨關系時,刪除父實體的實例,子實體的相應實例則實施級聯(lián)(cascade)刪除(父去子消);當父子實體之間為限制關系時,子實體的實例將限制(restrict)對父實體相應實例的刪除(子在父存)。標識依賴旨在表達父實體對子實體的鑒別關系,不關心子實體的存亡,所以在數(shù)據(jù)更新時可以不考慮。為維護既無存在依賴又無標識依賴的非標識非強制關系中的引用關系,在刪除父實體實例時,可以將子實體中的相應遷移鍵設置為空值(NULL)。
例如:圖1中STUDENT與STUDENT_COURSE是標識關系,STUDENT的鍵(S_NO)是STUDENT_COURSE主鍵的一部分。根據(jù)基數(shù)規(guī)則,STUDENT_COURSE的每一個實例都有一個STUDENT實例與之對應,標識關系明確地記載了STUDENT_COURSE存在依賴于STUDENT,且這種存在依賴為伴隨關系。所以,若刪除STUDENT的實例,則應刪除STUDENT_COURSE中與STUDENT已刪除實例對應的全部實例。而COURSE與STUDENT_COURSE也是標識關系,二者之間為存在依賴,但這種存在依賴為限制關系。所以,若要刪除COURSE的實例,只要STUDENT_COURSE中存在著對應于COURSE的實例,就禁止刪除COURSE。
如上所述,刪除規(guī)則決定了實體中的一個實例(即表中的一行數(shù)據(jù))被刪除時數(shù)據(jù)庫的反映;插入和替換規(guī)則決定了當數(shù)據(jù)行被插入或改變時數(shù)據(jù)庫的反映。
當在實體中插入與替換實例時,應遵循如下規(guī)則:
對于插入,若父子實體之間有存在依賴,則只有在子實體引用的外鍵與父實體中已存在的鍵值匹配時,子實體實例才能被插入;若父子實體之間為非標識非強制關系,則可以先令外鍵為空值將子實體的實例插入。在效果上,替換與插入應使用同樣的規(guī)則。
例如,在學生選課系統(tǒng)中,STUDENT_COURSE與STUDENT、COURSE之間都是標識關系,構成了存在依賴。因此,不能在STUDENT_COURSE中插入STUDENT中沒有的學生和COURSE中不存在的課程。而在圖2所示的機票預訂系統(tǒng)中,PASSENGER和SEAT-RESERVATION之間是非標識非強制關系,所以,沒有被旅客預訂的機票也可以插入SEAT-RESERVATION中。此時,外鍵屬性passenger-name取空值,這是符合現(xiàn)實的。
3?ERwin對引用關系的實現(xiàn)
ERwin的正向工程可以自動為每個父實體建立刪除和更改2個觸發(fā)器,為每個子實體建立插入和更改2個觸發(fā)器。若一個實體既是父實體又是子實體,則建立插入、刪除和更改3個觸發(fā)器。各類觸發(fā)器的功能因引用關系類型不同而有所差異。
圖2所示為一個航班座位預訂系統(tǒng)的ERwin邏輯視圖。在該系統(tǒng)中,PASSENGER和SEAT-RESERVATION之間是非標識非強制關系,FLIGHT和SEAT-RESERVATION之間是標識關系。它們之間的引用關系上面已經(jīng)作了分析。當ERwin進行正向工程時,這些引用關系將由一系列的觸發(fā)器來實現(xiàn)和維護。例如,為了維護PASSENGERT和SEAT-RESERVATION之間的非標識非強制關系,在PASSENGER上建立了刪除觸發(fā)器tD_PASSENGER(涉及屬性passenger-name的)和更改觸發(fā)器tU_PASSENGER。當在PASSENGER中進行刪除和更改時,它們都將SEAT-RESERVATION中相應實例的屬性passenger-name置空值。
4? 結(jié)束語
數(shù)據(jù)建模是數(shù)據(jù)庫設計的關鍵,IDEF1X數(shù)據(jù)建模奠定了數(shù)據(jù)庫設計的基礎。目前,IDEF1X方法在國內(nèi)外已廣泛應用于政府、工業(yè)和商業(yè)領域中,支持廣泛的企業(yè)應用。在建立企業(yè)信息管理系統(tǒng)之前,采用IDEF1X方法為信息系統(tǒng)建立合適的信息模型,對實體間的引用關系做出充分、準確、清晰的描述是十分必要的,這也是企業(yè)信息管理系統(tǒng)開發(fā)成敗的關鍵。