IDEF1X

<image>

資訊建模集成定義（IDEF1X）是語義數據模型開發的數據建模語言。IDEF1X被用來產生一個圖形資訊模型，它表示在環境或系統中的資訊的結構和語義。

IDEF1X允許的語義模型構造，足以支持管理數據為資源，資訊系統集成，和建造電腦資料庫。這個標準是軟體工程領域的IDEF建模語言家族的一部份。

## 概述

<image>

數據建模技術用來以標準的、一致的和可預測的方式來建模數據，從而將它作為資源來管理。它在一個機構內可以用於要求定義和分析數據資源的標準手段的項目中。這種項目包括將數據建模技術結合入方法論，管理數據為資源，集成資訊系統，或設計電腦資料庫。IDEF1X的根本目標是支持集成。集成的方法聚焦於捕獲、管理和使用被稱為概念模式的一個數據資源的單一語義定義。

在1980年代早期開發最初的IDEF1X的時候，主導系統開發的世界觀（view of the world）是以數據和過程作為框架。這種數據/過程（D/P）范型（paradigm）的建模方法被歸結為：

- 世界由活動和事物構成。
- 事物是集成的。活動是獨存的（free-standing）。
- 活動操作在事物上。

在這種方法中，資訊建模技術的主要目標是：

- 提供理解和分析一個機構內數據資源的方式。
- 提供表示和推理數據的通用方式。
- 提供體現運行一個企業所需數據的總體視圖的方法。
- 提供定義可被使用者檢驗並轉化成物理資料庫設計的不依賴於應用的數據視圖的方式。
- 提供從現存數據資源導出集成數據定義的方法。

D/P范型對資訊技術的所有方面施加了強大和普遍的影響。對於IDEF的結果是產生了兩種不同的技術：IDEF0用於過程而IDEF1X用於數據。使用D/P世界觀已經開發出了數以千計的成功系統，很多開發者繼續成功的採用著這種技術。IDEF1X97（IDEFobject）採用了面向對象（OO）的世界觀。

## 歷史

在1970年代中期美國空軍在集成電腦輔助製造（ICAM）規劃中認識到了對語義數據模型的需要。這個規劃的目標是通過電腦技術的系統應用增進位造生產力。ICAM規劃確認了在增進位造生產力中所涉及到的人們需要更好的分析和交流技術。作為結果，ICAM規劃開發了叫作IDEF（ICAM定義）方法的一系列技術，包括如下：

- IDEF0，用來產生「功能模型」，它是在環境或系統中活動或過程的結構表示。
- IDEF1，用來產生「資訊模型」，它表示在環境或系統中的資訊的結構和語義。
- IDEF2，用來產生「動態模型」，它表示在環境或系統中隨時間變化的行為特徵。

IDEF資訊建模（IDEF1）的最初方法由ICAM規劃在1981年發表，基於了當年的研究和工業需求。這種方法的理論根源來自Edgar F. Codd在關係模型理論上和Peter Chen在實體聯繫模型上的早先工作。最初的IDEF1技術基於了休斯飛機公司的Dr. R. R. Brown和Mr. T. L. Ramey和D. Appleton公司（DACOM）的Mr. D. S. Coleman的工作，有著Charles Bachman、Peter Chen、Dr. M. A. Melkanoff和Dr. G. M. Nijssen的關鍵評論和影響。

在1983年，美國空軍發起了在ICAM規劃之下的集成資訊支持系統（I2S2）計劃。這個計劃的目標是提供一種技術，能夠在邏輯上和物理上集成異構計算機硬體和軟體的網路。這個計劃和工業實驗的結果是，認識到了對資訊建模的增強技術的需求。

從空軍IDEF規劃的合同管理的視角看來，IDEF1X是ICAM IISS-6201計劃的結果並由IISS-6202計劃進一步的擴展了。為了滿足IISS-6202計劃確定的數據建模增強要求，子承包商DACOM，獲取了邏輯資料庫設計技術（LDDT）和它的支持軟體（ADAM）的許可證。從建模技術的技術內容視角看來，IDEF1X是重命名了的LDDT。

LDDT是資料庫設計組（DBDG）的Robert G. Brown在1982年設計的，他完全在IDEF規劃之外並且不知情IDEF1。然而IDEF1和LDDT的中心目標是一致的。LDDT基於了關係模型、實體聯繫模型和J. M. Smith與D. C. P. Smith的數據泛化（generalization）概念。LDDT的圖形語法不同於IDEF1，並且更加重要的是，LDDT包含很多不出現於IDEF1的相互聯繫的建模概念。因此不再擴展IDEF1，DACOM的Dr. Mary E. S. Loomis使用儘可能兼容於IDEF1的術語，寫了一份LDDT的實質子集的語法和語義的簡要總結。DACOM將結果標記為IDEF1X（擴展的IDEF1）並提交給了ICAM規劃，它在1985年將其發表。

在1993年1月DBDG的Robert G. Brown完成了IDEF1X形式化。他得到了多次草案所受評論的幫助，評論者包括：Tom Bruce、Ben Cohen、Dave Brown、Twyla Courtot、Chris Dabrowski、Jack Boudreaux、Dan Spar和Mary Loomis。在1993年12月，美國政府發行了IDEF0標準（聯邦資訊處理標準刊物183即FIPS 183）和IDEF1X標準（FIPS 184），並由國家標準技術研究所（NIST）來維護。

IEEE Std 1320.2-1998繼續了IDEF1X語言的演化。最初的工作由DBDG的Robert G. Brown在1994年和1995年早期為NIST完成，對IDEF1X向完全覆蓋的對象建模的優雅進化，提供了所需要的基本元素。這個標準描述了IDEF1X97（IDEFobject）的語法和語義，它由兩個概念建模語言組成：一個「鍵風格」語言後向兼容FIPS 184，它支持關係資料庫和對象關係資料庫，和新的「標識風格」語言，它適合於對象資料庫和面向對象建模。

在2008年9月2日，有關的NIST標準FIPS 183和FIPS 184被撤銷。自從2012年9月，IDEF0和IDEF1X97（IDEFobject）一起成為ISO/IEC/IEEE國際標準，在2019年二者被確認仍是當前標準。

## IDEF1X語法和語義

<image>

- 實體語法

<image>

- 域層級

<image>

- 聯繫的勢語法

<image>

- 未明確聯繫語法

實體（entity）: 實體表示真實或抽象的事物（人、物體、處所、事件、想法、事物的組合等）的集合，這些事物由於共享著相同的特徵並可以參與相同的聯繫，從而被識別為同一類的實例。一個實體是「獨立標識符」（identifier-independent）實體，如果這個實體的每個實例都可以唯一的標識出來，不用確定它的到其他實體的聯繫。一個實體是「依賴標識符」（identifier-dependent）實體，如果這個實體的實例要唯一的標識出來，得依賴於它的到其他實體的聯繫。在實體聯繫模型中，將不能單獨用自身特性唯一的標識出來的實體稱為弱實體；有兩種類型的弱實體：關聯實體和子類型實體，子類型實體基於超類型實體的鑑別器（discriminator）的值來繼承它的特性。

類（class）: 人們在心智上將在某種意義上類似的事物歸類（classify）入一個類，以此意義（sense）命名並表示所有這種類似的事物。所有人都做這種歸類，這是常理的一部份。以這種方式歸類的事物是個體的事物，每個都明顯不同（distinct）於所有其他事物。在IDEF1X97中，一個類是一組類似事物的知識（數據）和行為（過程）的抽象。狀態類表示具有可變更的狀態的那些實例。實體對應於只有特性屬性的狀態類。依賴狀態類是其實例就本性而言，內在的有關於特定的其他狀態類的實例的狀態類。獨自擁有一個依賴狀態類的實例而無關於另一個狀態類的一個實例是不適當的，進一步的說，更換與其有關的實例是沒有意義的。獨立狀態類是並非依賴狀態類的狀態類。歸類入一個類的任何事物都被稱為這個類的一個實例。每個實例都被認為有一個唯一的、內在（intrinsic）的標識（identity），無關於它的屬性（property）值或它所歸屬的類。一個實例的唯一標識將它區分於所有其他實例。在IDEF1X97中，對於狀態類，對象標識符（oid）表示了標識的概念。就一個表示系統（例如例子、形式化或軟體）而言，oid代表了實例。在狀態類實例的樣本實例表中，每一行都有一個關聯的oid。注意oid不是特性，oid對客戶總是隱藏的。資料庫中的代理鍵（surrogate key）是在所建模世界中實體實例亦或資料庫中對象的唯一標識符。代理鍵不導出自應用數據，而導出自應用數據的鍵稱為自然鍵。

數據域（domain）: 域是具有相同數據類型的（固定的或可能無限數目的）數據值的命名集合，特性實例從其中取得實際值。域可被當作不可變值的類，它包含的值不隨時間改變。在IDEF1X97中，域被稱為值類。所有特性都必須恰好的定義在一個底層域之上。多個特性可以基於相同的底層域之上。類型（typed）域是基礎類型或其他類型域的子類型，它可以進一步的約束這個域的可接受的值。一個類型域存在，如果它具有數據類型，並且滿足它的超類型域的域規則。可以按這種方式定義域的層級，從層級自上而下具有更加緊縮的域規則。域層級是泛化層級，不同於實體的分類結構，這裡不含攝域子類型要相互排斥。在關係資料庫中，要求各種表的所有列都聲明在一個定義了的域之上被稱為域完整性約束。關係模型中的主要數據單元即數據項是不可分解或原子性的。

<image>

聯繫（relationship）: 聯繫是在兩個實體的實例之間或相同實體的實例之間的關聯（association）。聯繫的勢（cardinality）是在一個聯繫中一個實體的可以相互關聯的實例數目。在聯繫上可以指明特定的勢 (數據建模)，實體的實例在一個聯繫中通常有四種類型中的一種勢：極小0極大1，極小0極大不限，極小1極大1，極小1極大不限。在實體聯繫模型中，實體的一個或多個實例參與（participate）一個單一的聯繫，聯繫對應於這些實體的數學關係，最常見的是兩個實體間的二元關係，例如一個實體的一個實例和另一個實體的n個實例參與的一個單一的聯繫，對應n個有序對構成的二元關係。對於在集合X和集合Y上的二元關係R：

- 左唯一（left-unique）也稱為內射關係（injective）：對於所有y∈Y存在最多一個x∈X使得xRy。這等價於：對於所有x∈X，所有z∈X，所有y∈Y，如果xRy且zRy，則x=z。這裡的集合Y叫作二元關係R的主鍵。
- 右唯一（right-unique）也稱為部份函數（functional）：對於所有x∈X存在最多一個y∈Y使得xRy。這等價於：對於所有x∈X，所有y∈Y，所有z∈Y，如果xRy且xRz，則y=z。這裡的集合X叫作二元關係R的主鍵。
- 左全體（left-total）也稱為序列關係（serial）：對於所有x∈X存在最少一個y∈Y使得xRy。
- 右全體（right-total）也稱為滿射關係（surjective）：對於所有y∈Y存在最少一個x∈X使得xRy。

通過唯一性性質，可以定義出特殊類型的二元關係：一對多 (數據模型)，內射且非泛函；多對一，泛函且非內射；一對一 (數據模型)，內射且泛函；多對多 (數據模型)，非泛函且非內射。通過唯一性和全體性性質，可以定義函數為泛函且連續的二元關係，進一步的定義出內射函數、滿射函數和雙射（bijective）函數。

IDEF1X限制為只使用二元聯繫，因為它們比多元聯繫易於定義和理解，還有直接的圖形表示。缺點是在表示多元聯繫時必然顯得笨拙，但是不會有能力上的損失，因為任何多元聯繫都可以使用多個二元聯繫來表達。

存在依賴（existence dependency）: 存在依賴是在兩個有關的實體之間的約束，指出一個實體（子實體）的實例不能存在卻無關於另一個實體（父實體）的實例。下述聯繫類型中，標識聯繫、強制非標識聯繫和分類聯繫體現了存在依賴。

未明確（non-specific）聯繫: 未明確聯繫表示兩個實體之間的多對多 (數據模型)聯繫，其中任何一個實體的實例都可以關聯於另一個實體的任何數目的實例。為了解決未明確聯繫而介入的實體有時叫做交叉（intersection）實體或關聯實體。

<image>

- 特性和主鍵語法

<image>

- 替代鍵語法

<image>

- 外鍵語法

<image>

- 角色名字語法

特性（attribute）: 特性是共同於一個實體的某些或所有實例的一個屬性（property）或特徵。特性表示域在一個實體的上下文中的使用。實體的特性通常要滿足一組規範化理論約束，即關係模型中的第一範式、第二範式和第三範式。實體的實例對這個實體關聯的特性不可給與多於一個的值，這個規則被稱為不重複（no-repeat）規則。

唯一鍵（key）: 鍵是一個實體的一個特性或特性的組合，它的值唯一的標識出每個實體實例。每個這種集合構成一個候選鍵（candidate key）。

主鍵（primary key）: 主鍵是已選擇為一個實體的唯一性標識的候選鍵。其他候選鍵則成為替代鍵（alternate key）。組成主鍵的那些特性都不能有空值。主鍵和替代鍵必須只包含對唯一性標識作出貢獻的那些特性，具有複合鍵主鍵的實體必須不能夠拆分成具有更簡單主鍵的多個實體，這個規則叫做最小鍵規則。函數依賴是其應用局限在一個單一實體之內的一種特殊的完整性約束，這個實體的特性「X」的每個值都有與之相關聯的最多一個它的特性「Y」的值（在任何一個時刻），特性「X」和「Y」可以是複合的，特性「Y」部份函數（functional）依賴於特性「X」。如果主鍵由多於一個特性組成，則每個非鍵（nonkey）特性的值必須函數依賴於整個主鍵，這個規則叫做完全函數依賴規則。不是主鍵或替代鍵的一部份的所有特性，必須只函數依賴於主鍵和每個替代鍵，這個規則叫做無傳遞依賴規則。在關係資料庫中，要求確保表的每行都有唯一且非空的主鍵值被稱為實體完整性約束。每個替代鍵都可以指定唯一約束。

外鍵（foreign key）: 外鍵是子或分屬（category）實體實例的一個特性或特性組合，它的值匹配於有關的父或總屬（generic）實體實例的主鍵中的值。在外鍵中的特性或特性組合可以指派一個角色（role）名字，反映在子或分屬實體中它的角色。外鍵可以被看作父或總屬實體的主鍵通過明確（specific）的聯結聯繫或分類聯繫「遷移」而來的結果。遷移來的特性可以被用作實體的要麼全部的主鍵要麼主鍵的一部份、替代鍵或非鍵特性。如果一個子實體有到同一個父實體的多個聯繫，則在子實體中為每個聯繫都遷移一次父實體的主鍵特性。如果父實體的所有主鍵特性都被遷移為子實體的主鍵的一部份，則這個聯繫叫作"標識聯繫"。如果有任何的遷移來的特性不是子實體的主鍵的一部份，則這個聯繫叫作「非標識聯繫」。當一個遷移來的主鍵只有一部份特性成為子實體的主鍵的一部份，而餘下的特性成為子實體的非鍵特性的時候，這個非標識聯繫促成的外鍵叫作「分裂鍵」。在分類聯繫中，所有分屬實體的主鍵都是通過這個聯繫從總屬實體遷移來的。在關係資料庫中，通常要求外鍵等於主表中的某行的候選鍵，或者沒有值即有空值，這個規則叫做兩個表之間的參照完整性約束。在參照或子表中的多個行可以涉及在被參照或父表中的相同行。在這種情況下，在被參照表和參照表之間的聯繫是一對多 (數據模型)聯繫。

標識符依賴（identifier dependency）: 標識符依賴是在兩個有關的實體之間的約束，要求一個實體（子實體）中的主鍵包含另一個實體（父實體）的整個主鍵。下述聯繫類型中，標識聯繫和分類聯繫體現了標識符依賴。

<image>

- 標識聯繫語法

<image>

- 強制非標識聯繫語法

<image>

- 可選非標識聯繫語法

<image>

- 分類聯繫語法

聯結（connection）聯繫: 聯結聯繫也叫做父子聯繫，有明確的勢 (數據建模)定義。它是在兩個實體之間的關聯或聯結，其中被稱為父實體的一個實體的每個實例，都關聯於被稱為子實體的另一個實體的零個、一個或多個實例。聯結聯繫分為子實體為「依賴標識符」實體的標識（identifying）聯繫，和子實體為「獨立標識符」實體的非標識（non-identifying）聯繫。在強制（mandatory）非標識聯繫中，子實體的每個實例都恰好的關聯於父實體的一個實例。在可選（optional）非標識聯繫中，子實體的每個實例關聯於父實體的零個或一個實例。在標識聯繫和強制非標識聯繫中，子實體總是存在依賴於父實體。可選非標識聯繫表示有條件的存在依賴。其中此聯繫的每個外鍵特性都有一個值的子實體的實例，必須有關聯的父實體實例，其中此父實體實例的主鍵特性在值上等於子實體實例的外鍵特性。

分類（categorization）聯繫: 分類聯繫是其中兩個實體的實例表示相同的真實或抽象事物的聯繫。一個實體（總屬實體）表示這個事物完全集合，另一個實體（分屬實體）表示這種事物的一個子類型或子分類。分屬實體可以有一個或多個特徵，或與其他實體的實例的聯繫，不共享於所有的總屬實體實例。分類簇（category cluster）是一個或多個分類聯繫的集合。總屬實體的一個實例可以關聯於這個簇里分屬實體中只有一個實體的實例，而分屬實體的每個實例都恰好的關聯於總屬實體的一個實例。因為總屬實體的一個實例在分類簇中不能關聯於多於一個分屬實體的一個實例，分屬實體是相互排斥的。在總屬實體或它的一個前輩實體中的一個特性，可以被指派為這個實體的特定分類簇的鑑別器。在完備（complete）分類簇中，總屬實體的所有實例都關聯於一個分屬實體的一個實例，也就是說所有可能的分類都出現了。在不完備（incomplete）分類簇中，總屬實體的一個實例可以存在卻不關聯於任何分屬實體的一個實例，也就是說某些分類被省略了。分類結構是廣泛化/特殊化構造。在增強實體聯繫模型中，子類型實體和超類型實體之間是一種Is-a聯繫。在IDEF1X中，子類型聯繫按分類實體集合是否完備而分為完備子類型聯繫和不完備子類型聯繫。

視圖（view）: 視圖是為了某種用途而組裝的實體和指定的特性（域）的一個搜集。IDEF1X中定義了三種層次的視圖：實體聯繫（ER）、基於鍵（KB）和全特性（FA）。它們在抽象層次上有所不同。ER層次是最抽象的，它建模主題領域中最基礎元素，即實體和它們的聯繫，它在作用範圍上比其他層次要更寬廣。KB層次增加鍵，而FA層次增加所有特性。功能視圖是構造用來顯示所建模企業某方面功能有關的數據結構的視圖框圖。

## IDEF1基本概念回顧

<image>

IDEF1X使用的術語非常類似於IDEF1，二者採用的理論基礎和概念卻有著根本的差異。實體在IDEF1中表示在一個特定機構內維持的關於物理或概念對象（比如人、處所、事物或想法）的資訊。術語實體類在IDEF1中指稱實體的搜集，或保管的關於真實世界中對象的資訊的類。實體類可以被想像為是存放3英寸×5英寸卡片的盒子，每個卡片都是實際的實體。盒子外面標記著：⑴描述盒子中有何種類型的卡片的一個實體類名字，⑵向最終放進來的單個卡片提供的一個模板（template）。

實體擁有關聯的特徵特性，用來記錄真實世界中對象的屬性。使用卡片檔案（card file）模型，特性類是向在這些單個檔案卡片中找到的特性-值對提供的模板。術語特性類指稱特性-值對的集合，這是通過將在檔案盒子外面找到的特性的名字，和列出在這些單個卡片自身上的、對於單個實體類成員（實體）的這個特性的值，組合起來形成的。鍵類是一個或多個特性的一個搜集，憑藉它就可將卡片或實體類成員相互區分開來。鍵類通過放置到模板的左上角並加以下劃線來指示。

關係（relation）在IDEF1中是在兩個單個的資訊映像（image）之間的關聯。這種參照的存在，是通過注意到一個實體類的這些特性類，包含了被參照的實體類成員的鍵類的那些特性類而發現（或驗證）的。一個關係類可以被想像為是向實體類之間存在的關聯提供的模板。需要注意到一個要點，如果關於兩個或多個真實世界中對象之間的關聯沒有保管資訊，那麼從IDEF1的視角看來就不存在關係。關係類在IDEF1框圖中表示為在實體類盒子之間的連結（link）。在連結端部的菱形和在連結中部的半菱形，編碼了關於關係類的額外資訊（就是勢和依賴）。這些連結經常指示出一個機構的業務規則的存在。

同IDEF1X有關的底層概念，意圖將關於真實世界事物的自然語言事實的建模，橋接於邏輯數據結構的建模。這相當不同於IDEF1的目標，它嚴格關注於真實世界事物的資訊映像（不是事物自身，也不是表示關於事物的資訊的數據結構）。

## 來自最初ICAM工作的概念和過程

### 三模式方法

<image>

在軟體工程中，三模式方法是建造資訊系統和系統資訊管理的方法，提倡概念模型作為完成數據集成的關鍵。

模式（schema）是一種模型，通常描繪為示意圖並且有時還結合語言描述。這個方法用的三個模式是：

- 用於使用者視圖的外部模式。
- 集成外部模式的概念模式。
- 定義物理存儲結構的內部模式。

位於中心的概念模式，定義使用者所思考和談論的概念的本體。物理模式描述在資料庫中存儲的數據的內部格式，而外部模式定義應用程式表現出的數據的視圖。這個框架嘗試將多個數據模型用於外部模式。

概念模式提供一個企業內數據的一種單一的集成定義，它不偏向於數據的任何單一應用，並且不依賴於數據在物理上如何存儲和訪問。概念模式的主要目標是提供對數據的含義和相互關係的一種一致性定義，它可以被用於集成、共享和管理數據的完整性。概念模式必須有三個重要特徵：

- 一致於業務的下部結構並跨越所有應用領域都是真實的。
- 是可擴展的，使得新數據可以定義而不需更改以前定義的數據。
- 可轉化成需要的使用者視圖和各種數據存儲及訪問結構二者。

### 建模指南

建模過程可以分成模型開發的五個階段。

零階段 – 項目初始：項目初始階段的目標包括：

- 項目定義：一般陳述已經做了什麼、為什麼要做和怎樣做。
- 來源材料：獲取來源材料的規劃，包括索引和文件歸檔。
- 作者約定：約定（和可選的方法）的基礎聲明，作者選擇它們用來製作和管理這個模型。

<image>

- 綜合出一個實體

<image>

- 實體聯繫矩陣

<image>

- 實體層次框圖例子

<image>

- 聚焦一個單一實體的「實體框圖」

第一階段 – 實體定義：實體定義階段的目標是標識和定義屬於要建模的問題領域的實體。實體是從基本實體實例綜合出來的結果，這些實例成為這個實體的成員。第一階段的產出是：

- 實體池。實體池包含在此刻已知模型的上下文內的所有實體的名字。在第四階段結束時，這個列表中的一些名字很有可能不能存留為實體。此外隨著建模的前進和資訊理解的增進，一些新的實體將被增加到這個列表並成為這個資訊模型的一部份。
- 實體術語表（glossary）。在這個階術語表只是實體定義的一個搜集。一個實體定義的構件包括：實體名字，實體定義和實體別名。

第二階段 – 聯繫定義：聯繫定義階段的目標是標識和定義在實體之間的基本聯繫。在建模的這個階段，一些聯繫可以是未明確的並且需要在後續階段來精製。從這個階段主要的輸出是：

- 聯繫矩陣。要識別在各種實體之間觀察到聯繫，可能要求開發一個實體的聯繫矩陣來指示出所有可能的實體之間的聯繫。
- 聯繫定義。這些定義包括：依賴的指示，聯繫名字，和關於聯繫的敘事陳述。作為規定聯繫的結果，可能還會拋棄一些聯繫和增加新的聯繫。
- 實體層次框圖。在建模的這個階段，所有實體都展示為方框並允許未明確聯繫。

<image>

- 特性實例和它們分別的實體實例

<image>

- 未明確聯繫精製

<image>

- 對鍵特性應用不重複規則精製

<image>

- 用來去除多餘聯繫的路徑斷定

第三階段 - 鍵定義：鍵定義階段的目標是：

- 精製來自第二階段未明確聯繫。精製聯繫的過程將每個未明確聯繫轉化或轉換兩個明確聯繫，為此演進出新的實體。
- 定義每個實體的鍵特性。標識鍵的過程包括：標識出一個實體的候選鍵，選擇一個候選鍵作為這個實體的主鍵，標記這個實體的替代鍵。本階段結束時產出鍵特性定義。特性定義包含：特性名字，特性定義和特性別名。
- 遷移主鍵來建立外鍵。有三個規則支配這個過程：在一個聯繫中遷移總是發生於從父或總屬實體到子或分屬實體，整個主鍵（就是這個主鍵的所有成員特性）對這個實體對共享的每個聯繫都必須被遷移一次，非鍵特性永不被遷移。
- 驗證聯繫和鍵。應用各種規則對模型進行精製。通過路徑斷定去除多餘的聯繫。隨著主鍵成員被標識出來，涉及過的特性形成一個特性池。使用實體/特性矩陣來標識整個模型中特性的分布和使用。

<image>

- 實體/特性矩陣

<image>

- 第三階段功能視圖框圖的例子

<image>

- 對非鍵特性應用不重複規則精製

<image>

- 第四階段功能視圖的例子

第四階段 - 特性定義：特性定義階段的目標是：

- 開發特性池。擴展第三階段建立的特性池來包含非鍵特性。特性池是潛在可行的特性名字的一個搜集，是在這個模型中用到的特定名字的來源。
- 確立特性從屬。這一步為每個非鍵特性指定一個所屬實體。
- 定義非鍵特性。特性定義包含：特性名字，特性定義和特性別名/同義詞。
- 驗證和精製數據結構。應用各種規則對模型進行精製。

## 形式化

<image>

形式化（formalization）的目的，是通過向IDEF1X的每個建模構造，提供到形式的一階語言中的一組等價句子的映射，精確的陳述這些構造意味著什麼。圖形語言可以被當作表達等價形式句子的實際的簡潔方式。

IDEF1X結合了關係模型、實體聯繫模型和數據泛化的元素。增加了視圖、術語表（glossary）和模型層級的想法，來解決實際中遇到的那種規模的問題。結果是IDEF1X的形式化，不能嚴格的只依據關係模型，而是直接使用一階邏輯。為了增進形式化的能用性，只使用邏輯的有限子集，本質上為入門教程所涵蓋。

一部份的形式化依託於IDEF1X的元模型。形式化中解釋（interpretation）所指定的關係，可以非正式的看作在IDEF1X中使用的常見的樣本實例表。建模構造的形式句子，可以非正式的看作在這些實例表上的初步的查詢語言。元模型、實例表和查詢語言僅憑視角（points of view）自身就是有用的，不依賴於詳細的形式化。

形式化預期向依靠IDEF1X構造的含義的如下領域提供堅實基礎，如SQL或其他代碼生成，與其他建模方式來迴轉化，與其他種類的模型集成，像靜態屬性一樣捕獲動態屬性。這些領域都要求形式化提供的嚴格定義的語義。

### IDEF1X理論

IDEF1X模型構成自（比如以框圖、語言或表格表達的那些實體、特性和聯繫的）一個或多個視圖，加上一組術語定義，至少包括這些視圖（直接或間接）用到的全部的實體和域。形式化處理過程產生相應的一階邏輯中的理論 (數理邏輯)。

一階邏輯可以被當作是自然語言的用來描述和推理事物的那些方面的形式語言版本。個體事物使用常量、變量和函數符號來指稱；在事物之間的關係使用謂詞 (數理邏輯)符號來陳述；而關於事物聯繫的句子通過邏輯聯結詞比如與、或、非，和全稱（for all）及存在（for some）量詞來陳述。

一階邏輯理論構成自其中常量、函數和謂詞符號被限定於特定詞彙表（vocabulary）的一階邏輯的語言，加上這個語言中的一組句子（叫做公理）。IDEF1X理論的起點是帶有等式的一階邏輯，假定已有整數和列表的理論的詞彙和公理。補充的IDEF1X的詞彙和公理來自如下本質想法：

- 每個有`n`個特性的實體類都變成一個`n+1`元謂詞符號。

這個謂詞將一個實體實例關聯上它的特性值。如果有`2`個特性的一個實體類被表示為`3`元謂詞符號`p`，它的第1個特性是`a1`，第2個特性是`a2`，則`p(I, A1, A2)`意味著，標識為`I`的個體是這個實體類的成員，並且作為這個類的成員，有一個`a1`特性值`A1`，和一個`a2`特性值`A2`。如果`A1`（或`A2`）是空，這意味著`I`（所標識的個體）沒有給`a1`（或`a2`）特性的值。

- 每個聯繫都變成一個二元謂詞符號。

這個謂詞將父實體的實例（的標識）關聯上子實體的實例（的標識）。如果這個聯繫被表示為二元謂詞符號`r`，則`r(I, J)`意味著，`I`（所標識的個體）是`J`（所標識的個體）的父親。

- 定義了謂詞`exists`來說明一個實體或域實例是否存在。

注意`exists`不是存在量詞。`exists C: I`意味著，`C: I`是一個存在的實體（或域）類實例。在這裡如果`C`是一個實體類，則`I`是一個實體標識符，如果`C`是一個域類，則`I`是一個表示 (數學)（representation）值。注意術語`C: I`只是提名某個事物可以是一個類實例。`C: I`事實上是一個存在的類實例，若且唯若`exists C: I`成立。

- 定義了謂詞`has`來說明一個實體實例，是否持有特定的特性值，或者關聯於特定的其他實體實例。

`C: I has P: V`意味著，實體類實例`C: I`，持有屬性`P`的值，並且這個值是`V`。屬性（property）`P`，可以是一個特性（attribute），或一個參與 (哲學)（participant）屬性。如果`P`是特性，則值`V`是域實例。參與屬性引起自聯繫，在一個聯繫中的每個實體，都為與其有關聯的實體實例持有一個參與屬性，如果`P`是一個參與屬性，則值`V`是有關聯的實體實例（的標識符）。

- 規則（這個理論中的公理）使用約束實體、域和聯繫的謂詞`exists`和`has`來書寫。

不直接使用底層的`n`元和二元謂詞，轉而依據類實例的存在性和這些實例的屬性值，來表達IDEF1X建模構造的形式含義。用`exists`和`has`書寫的句子，可以被非正式的當作對樣本實例表的初步的查詢語言。

IDEF1X所建模的是一個企業所關心的事物，不是這些事物的名目，也不是關於這些事物的數據，一個IDEF1X模型預期成為這個企業所關心的事物的概念模型。這種論域UOD（universe of discourse）在它的模型之外有獨立的存在和現實。在任何時間點上，UOD都處在特定狀態（state）下，就是說有特定的實體實例存在，它有特定的屬性值，並擁有特定的與其他實體實例的聯繫。對於任何UOD狀態，一些句子是真的，而另一些句子是假的。一些UOD狀態是可能的，另一些是不可能的。關於UOD的句子是真還是假，不依賴於它的任何模型。

一個IDEF1X模型被認為是正確的，如果它以有關（relevant）的方式匹配UOD。一個正確的IDEF1X模型允許所有可能的UOD狀態，並拒絕所有不可能狀態，它們直接衝突於這個模型的顯式斷定 (數理邏輯)。換句話說，一個IDEF1X模型是正確的，如果它堅持為真的句子（公理），事實上在所有可能UOD狀態下是真的，在所有不可能狀態下是假的。

真實是依據解釋來定義的。一個解釋將來自UOD的元素指定（assign）給這個理論的符號。特別是，一個解釋將某一個關係指定給每個謂詞符號。作為結果，在理論中的句子變成關於UOD的句子，並且它們的真實要依據UOD的現實來確定。以這種方式，每個句子在這個解釋中要麼是真要麼是假。一個解釋被稱為一個理論的「模型」，如果這個理論的所有公理在這個解釋中都是真的。一個IDEF1X模型是正確的，若且唯若對應於它的理論，僅擁有所有的將可能的UOD狀態指定給這個理論的符號的那些解釋作為「模型」。

在形式化中，一個實體類（或聯繫）成為一個謂詞符號。在邏輯中，一個解釋將一個關係指定給這個謂詞符號。在預期解釋中，針對一個IDEF1X模型的UOD構成自：視圖、實體、域、域實例、視圖實體、視圖實體實例，視圖聯繫、視圖聯繫實例、視圖實體特性和視圖實體特性值。這些在IDEF1X中都非正式的用樣本實例表來展示。非正式的實例表是對指定給謂詞符號的形式關係的一種表示。在形式化的語境中，樣本實例表展現了一個（可能的）UOD。在示例的樣本實例表的左側的`iN`表示被歸類為是對應於這個表的實體類的成員的一個「事物」的標識。

### IDEF1X元模型

<image>

IDEF1X可以被用來建模IDEF1X自身。這種元模型有多種用途，比如倉庫（repository）設計、工具設計或用於規定有效的IDEF1X模型的集合。依賴於用途，會得到略微不同的模型。對元模型有兩個重要的限制。首先它們規定語法而非語義。其次元模型必須補充採用自然或形式語言的約束。IDEF1X的形式理論提供了表達所需約束的語義和方式二者。

IDEF1X標準在規定了IDEF1X模型到一階理論的映射之後，定義了IDEF1X元模型。在這個模型上的約束使用一階語言來表達。這些約束成為這個元模型的IDEF1X理論的一部份。一個有效的IDEF1X模型接著被定義為這個元模型的IDEF1X理論的「模型」。

## IDEF1X97的概念

面向對象（OO）世界觀的湧現已經嚴重影響了IDEF1X的演變。對象范型採用了根本上不同的世界觀。在這個范型中，建模方法可以歸結為：

- 世界構成自對象。
- 對象具有知識和行為。
- 沒有獨存（free-standing）的活動。活動是通過對象的協作完成的。
- 知識和行為是在責任（responsibility）抽象後面的，在一起考慮的，同一對象的不同方面（aspect）。

這種方式中，建模技術的主要目標是：

- 提供理解和分析一個機構關切的對象的方式。
- 提供表示和推理這些對象的通用方式。
- 提供體現運行一個企業所需的對象的總體視圖的方法。
- 提供定義可被使用者檢驗並轉化成物理設計的不依賴於應用的對象視圖的方式。

D/P和OO范型的方式是不同的。對於IDEF1X，從D/P和OO方式湧現出來的概念不是完全不兼容的，實際上概念有高度的對應性。

數據/過程范型假定｜面向對象范型假定｜對比

實例｜實體實例是一個企業需要為其保管數據的人、處所或事物（等）。｜對象是具有相關的知識（數據）或行為（過程）的與眾不同（distinct）的事物。｜對象合併了數據和過程（知識和行為）並將它們隱藏在責任抽象的後面。

數據｜沒有獨存的數據。所有數據都圍繞著共享的一個企業的真實世界實體而組織。數據是通過過程來訪問的並遍及應用共享的。｜沒有獨存的知識（數據）。所有知識都圍繞著共享的一個企業的真實世界對象而組織。知識對遍及應用的其他對象是通過請求而可獲得的（和可修改的）。｜在D/P范型中，過程直接訪問並改變一個實體的數據。在OO范型中，必須向一個對象請求它的知識，它的知識不是可以直接訪問的。只有對象自己可以改變它的知識。一個對象的知識是來自記憶還來自推導只有這個對象知道。

過程｜過程是獨存的。過程是圍繞功能來組織的，過程訪問實體並獨一於一個應用。｜沒有獨存的行為（過程）。所有行為都圍繞著共享的一個企業的真實世界對象而組織。行為是對象的責任，並且對遍及應用的其他對象是通過請求而可獲得的。｜在OO范型中，所有過程都通過對象的行動來完成。一個對象通過利用自己和經過請求利用協作對象的知識和行為來行動。對一個請求確切的做了什麼只有這個對象知道。

類｜類似的實體實例被歸類入類，而類通過聚集和廣泛化關聯起來。｜類似的對象（實例）被歸類入類，而類通過聚集和廣泛化關聯起來。｜本質上相同的想法，除了對象類包括行為之外。

標識｜一個類中每個實體實例都通過它的數據值來區別於所有其他實例。｜每個對象都不同於所有其他對象。它有著內在的、不可變的標識，不依賴於它的知識、行為或類。｜OO模型能夠將被D/P范型當作不可區分的東西識別為不同的。

約束｜有在數據上的約束。｜有在知識和行為二者上的約束。｜對象模型需要更一般種類的約束。

規則｜規則是通過定義支持它們的過程而併入的。｜規則是通過定義支持它們的行為而併入的。｜D/P和OO范型在這點上都是可以改進的。如果規則可以解脫於行為就更好了。

## IDEF1X97的構造

IDEF1X97的語言構造包括：

類: 類是一組類似的事物的知識和行為的抽象。被歸類入一個類的任何事物都被稱為這個類的實例。給定類的所有實例都有相同的責任。就是說它們擁有相同種類的知識，展現相同種類的行為，服從相同種類的規則。實例是離散的，它給事物綁定上一個內在的、不可變的和唯一的標識。每個類要麼是狀態類要麼是值類。

- 狀態類。狀態類表示帶有可變更狀態那些實例。它的實例可以有來往（come and go）並隨時間而改變，就是說它們的屬性值可以變更。
- 值類。值類表示純值的那些實例。它的實例不可來往並不可變更。

泛化: 類被用來表示「具有有關的知識或行動的那些事物」的概念。由於一些真實世界事物是其他真實世界事物的廣泛化，一些類必須在某種意義上是其他類的廣泛化。向更一般性的一個類指定了增補的、不同的責任的一個類，叫做這個更一般性的類（它的超類）的子類。這個子類的每個實例都表示與它的超類中的實例相同的真實世界事物。類結構作為一個廣泛化分類法（層級或網路），確定在這些類之間的責任繼承。

聯繫: 聯繫表達在兩個狀態類之間的聯結，它被視為相關於特定的範圍和用途。它以這些實例據此而有關的那種意義來命名。

責任: 一個實例擁有知識，展現行為，服從規則。這些概念在集體上的被稱為這個實例的責任。一個類抽象了共同於它的實例的責任。在最初的模型開發期間，責任可以簡單的用一般性術語來陳述，並且不明顯的區分為特性、參與屬性、操作或約束。還可以指定對象複合#聚集（aggregate）責任，而非個體屬性。寬泛陳述的責任最終被精製為特定的特性和約束。

- 屬性。一些責任由知識和行為來承擔，而它們順次由屬性來確定。屬性是顯露一個對象的知識或行為的某些方面的，固有（inherent）的或獨特的特徵或特質（trait）。有三種屬性（property）：特性（attribute）、源於聯繫的參與 (哲學)（participant）屬性和運算（operation）。類擁有屬性，實例擁有屬性值。
- 特性。特性是從一個類到一個值類的映射。一個特性表達一般共同於一個類的那些實例的一些特徵。特性的名字是這個值類在描述這個類時所扮演的角色的名字，它可以簡單的是這個值類的名字（只要使用值類名字不導致歧義）。
- 參與屬性。參與屬性是從一個狀態類到一個有關的（不必須不同的）狀態類的映射。當在兩個狀態之間存在聯繫的時候，每個類都為這個聯繫包含一個參與屬性。每個參與屬性的名字都是其他的類在這個聯繫中扮演的角色名字，它可以簡單的是在聯繫另一端的類的名字（只要使用這個類名字不導致歧義）。參與屬性的值是一個有關實例的標識。對於其中可以有很多有關實例的聯繫，這裡的一個參與屬性按上述描述來命名但後綴著`(s)`，它是從這個狀態類到一個搜集類的映射，這個搜集的成員是有關的那些實例。
- 運算。類的運算規定它的實例的行為。運算是從這個類的那些實例和輸入參數類型的那些實例（的叉積），到另一個（輸出）參數類型的那些實例（的叉積）的映射。如若特性或參與屬性是一個實例知道什麼的抽象，則運算是一個實例做什麼的抽象。
- 約束。其他的責任通過符合約束來承擔。約束是對一個類或一個類的實例要求為真的那些事實的陳述。約束以關於屬性值或約束的邏輯句子的形式來表達。一個實例符合這個約束，如果這個邏輯句子對這實例為真。一些約束固有於建模構造中，並可輕易的使用圖形來表示；另一些約束特定於特殊的模型，並使用規定語言來陳述。
- 註解。註解（note）是描述一些一般性注釋或關於模型某部份的特殊約束的自由文本的主體。前導於使用規定語言捕獲約束，註解可以用在早期的高層視圖中，註解可以通過提供解釋和例子進一步的澄清一個規則。註解還可以用於不涉及規則的有「一般性利益」的注釋。這些註解可以伴隨於模型圖形。

請求 : 請求（request）是從一個對象（發送者）發送到另一個對象（接收者）的一個消息，指導接收者履行它的責任。特別是，一個請求可以針對一個特性的值，針對一個參與屬性的值，針對一個運算的應用，或針對一個約束的真值。

實現: 責任的實現（realization）規定如何承擔責任。一個實現被陳述為給出承擔責任的必要和充分條件的邏輯句子。

模型下部結構構造: 建模構造是以視圖來體現的，並且被包裝為模型，提供文檔元素比如文字描述。

- 視圖。視圖是主題域、類、聯繫、責任、屬性、約束和註解（和可能的其他視圖）的搜集，為特定用途而組裝或建立並覆蓋特定範圍。視圖可以覆蓋整個建模領域或只是這個領域的一部份。
- 層次。層次是一個視圖的覆蓋範圍和詳細程度的指定。有多個層次的視圖。
- 環境。環境是概念空間，就是說在其中概念有一致的含義和用於這個概念的一個或多個一致的的名字。所有視圖都為特定環境而開發。
- 術語表。術語表是在一個環境中可以用來定義概念（視圖、主題域、類、聯繫、責任、屬性和約束）的所有術語的名字和描述的搜集。模型術語表是出現在一個模型的視圖中的所有定義了概念的名字和描述的搜集。
- 模型。模型是一個或多個視圖和與之一起的敘事描述和對視圖及在模型的視圖中使喚的視圖構件（類、責任等）的規定語言的包裝。

## 參見

- Crow腳註法。
- Enterprise Architect，支持IDEF1X。
- IDEF0。
- EXPRESS (數據建模語言)，形式化於STEP (ISO 10303)。
- DBeaver，它的實體聯繫圖預設使用IDEF1X表示法。

## 延伸閱讀

- Thomas A. Bruce (1992). Designing Quality Databases With Idef1X Information Models. Dorset House Publishing.
- Y. Tina Lee & Shigeki Umeda (2000). "An IDEF1x Information Model for a Supply Chain Simulation".

## 外部連結

- ISO/IEC/IEEE 31320-2:2012
- FIPS Publication 184 Announcing the IDEF1X Standard December 1993 by the Computer Systems Laboratory of the National Institute of Standards and Technology (NIST). (Withdrawn by NIST 08 Sep 02 see Withdrawn FIPS by Numerical Order Index)
- Federal Register vol. 73 / page 51276 withdrawal decision
- Overview of IDEF1X at www.idef.com
- IDEF1X Overview from Essential Strategies, Inc.