ORM (Object Relational Mapping) 是目前在做資料庫應用程式中,用來定義型別,然後透過這些定義好的型別建立資料庫和程式中的資料 Entity 對應的一種方法。
不過,這個 ORM 與本文的 Object Role Modeling (ORM) 是完全不同的東西,跟他們之間有關的就是他們都涉及資料庫,除此之外這篇文章不應混談 Role Modeling 跟 Relational Mapping。
對於資料庫設計的圖表以及其關聯性設計,我選了三種的建模方法來介紹:
這三種建模方法都是針對問題領域的建模方式,這篇文章要介紹的是其中之一 ORM。
ORM 使用較多文字語義化的方式來描述資料模型和他們的業務邏邏輯,這可以讓非專業人士也能夠讀懂他們的關係。
一個具體的例子來自開發此方法的 Dr. Terry Halpin 的網站:
從第一個例子,就可以知道這是一個用語義化的方式來呈現,我將圖稍微修改了一下,從這張圖可以知道這裡有兩個最主要的資料庫 Table 以及傳入的資料。
[學生.nr]
於 (日期) 被授予 [學位.code]
。
[學生.nr]
攻讀 [學位.code]
。
在這段話中,描述了某個資料的學生攻讀目標學位 (可能是任何形式的學位,所以要用 code),等到完成攻讀後,學生就會在某個指定的資料日期被授予某個學位。
資料庫的設計就會有這兩個資料,而攻讀、被授予本身就是一個事務關聯。
從這張圖中,也可以看到在完成一個事務處理的當下,要組合哪一些資料進來:
所以連接的空格子不但要描述行為以外,還要給空格子關聯其他的物件。
Orm.net 本身也衍生了一個 ORM 很重要的使用方式: Conceptual Queries (概念查詢),剛才這個例子其實就是概念的查詢。
假設要使用語意化的方式來定義模型有哪些關聯,可以參考下圖:
在這裡可以得到一個結論,ORM 關注的點是物件被 [什麼事務]
關聯,這似乎很適合用來描述待開發的系統細節,例如下圖是一個頗複雜的電影院系統:
Wiki 上,ORM 的一個完整的範例圖是:
顯然這是某一個特定問題領域的 ORM 概念查詢,圖中先用圖的方式定義 Employee (員工)
的 has
, was born on
, was hired on
, uses
的事務關聯之後,在下方寫了語意化的概念:
我還發現了市面上有一個很酷的語意畫軟體,可以使用自然語言來建模 ORM:
Natural language interface to a Object-Role Modeling aware database
這個軟體是: Viev 開發的 Boston Professional,不過看起來是要錢。
除了上述對 ORM 圖形的看法之外,我在 [7] 另外找到了手寫的畫法,這個圖中包含了一些舉例:
最上方的事務中,繪製了一個包含兩個事務的箭頭,這表示 【A 學生參加研討會 / 參加研討會的 A 學生】 之間是唯一性的關聯。
下方的查詢則不同,下方是【學生協辦研討會】,一個學生本身可以協辦很多個研討會,因此沒有唯一性,可是【P 研討會參與的學生】是有唯一性的,因為 P 研討會只會有一個 A 學生。
ORM 的相關文件和教學可以參考 [1] 的網站或是下方的參考中了解看看。
References:
[1] http://www.orm.net/
[2] https://victormorgante.medium.com/object-role-modeling-software-boston-d693ddb43cb8
[3] https://towardsdatascience.com/why-learn-object-role-modelling-4eebd93dcda2
[4] https://www.conceptdraw.com/solution-park/software-orm
[5] https://www.viev.com/index.php/products-menu/boston-professional
[6] http://epaper.gotop.com.tw/pdf/ACL021100.pdf
[7] https://victormorgante.medium.com/why-put-object-role-modeling-at-the-heart-of-a-knowledge-graph-database-f5891c58d42f
[8] http://agilemodeling.com/artifacts/ormDiagram.htm