**Objekto vaidmenų modeliavimas** (angl. *Object Role Modeling*, **ORM**) - tai semantinis duomenų modeliavimo būdas, modeliuojamą sritį išreiškiantis per objektus ir jų atliekamus vaidmenis (sąsajas tarp objektų). ORM supaprastina duomenų modelių projektavimo procesą naudojant natūralios kalbos elementus. Be to, lengvai suprantamos diagramos gali būti iš karto patikrinamos pavyzdžiais, o duomenų modeliai transformuojami į reliacinius duomenų modelius (ar kitos kalbos duomenų modelius). Turtinga grafinė notacija, kaip ir gausybė ribojimų, suteikia galimybę aiškiai bei tiksliai išreikšti verslo taisykles.

ORM išsivystė iš natūralios kalbos informacijos analizės metodo - NIAM (angl. *Natural language Information Analysis Method*) ir binarinių sąryšių modeliavimo (angl. *Binary Relationship Modeling*), kurie buvo sukurti XX a. VIII dešimtmečio viduryje.

Pagrindinis ORM vystytojas ir plėtotojas - Dr. Terry Halpin. Jis ir pateikė pirmąją ORM formalizaciją .

Pagrindiniai ORM elementai
--------------------------

### Faktai

**Faktas** yra teiginys arba tvirtinimas apie tam tikrą taikomosios srities informacijos dalį. ORM modeliavimo požiūriu, faktų nustatymas yra taikomosios srities pažinimo proceso dalis. Todėl, kiekvienas faktas turėtų būti tikrovinis bei atpažįstamas bet kam, susijusiam su taikomąją sritimi. 

Pats paprasčiausias fakto pavyzdys galėtų būti elementarus faktas (vientisas, nedalomas): 
„Žmogus rūko"

Pav. 1 Elementarus ORM faktas

Faktas apima įvairovę komponentų, kurie padeda tiek išreikšti faktą žodžiais, tiek suteikti jam išraiškingumo. Paprastai, faktas susideda iš objektų ir jų atliekamų vaidmenų. Didžiausia faktų dalis susideda iš dviejų vaidmenų. Fakto vaidmenys sudaro fakto predikatą. Aiškumo dėlei, panagrinėkime pavyzdį:

***Studentas**, kurio **studento kodas** yra  **„25615720"**, **studijuoja** **studijų programą**, kurios **kodas „612209P109"***

  

Pav. 2 ORM fakto struktūra

### Predikatai

Faktą apibrėžia predikatas. Predikatas yra veiksmažodis ar žodžių junginys su veiksmažodžiu, kuris objekto tipus sujungia į faktą, bei parodo objektų semantinį kontekstą, t. y. sąryšį tarp objektų. Predikatas susideda iš vieno ar daugiau vaidmenų. Vaidmenys vaizduojami langeliais, t. y. vieną vaidmenį atitinka vienas langelis. Vaidmenų skaičius predikatuose yra vadinamas predikato dimensija. Nors teoriškai predikatas gali būti sudarytas iš bet kiek (bet ne mažiau nei vieno) vaidmens, tačiau paprastai predikato dimensija neviršija dviejų vaidmenų.

### Objektų tipai

Objekto tipas nurodo tam tikrą duomenų aibę (sritį). ORM požiūriu taikomoji sritis dalinama į prasmines objektų aibes, kurios siejamos faktais. Konkrečiu atveju (Pav. 2), objekto tipas „Studentas" nagrinėjamą sritį padalina į tai kas yra studentai ir kas nėra. Paprastai bet kuris taikomosios srities dalykas (arba daiktavardis) yra modeliuojami kaip objekto tipai. Objekto tipas gali būti esybė arba reikšmė. 

Pav. 3 ORM objekto tipai

Esybė – tai bet koks atvaizduojamos aplinkos dalykas, kuris yra identifikuojamas unikalumo nuoroda. Unikalumo nuoroda (angl. *Reference mode*) – tai esybės sąryšis su reikšme, kuri skirta identifikuoti konkretų objektą. Kitaip tariant, tai esybės egzempliorių unikalumą pažyminti reikšmė. Reikšmė tai yra objekto tipas, kurio egzemplioriumi gali būti tik reikšmė išreikšta tam tikru duomenų tipu.

### ORM ribojimai

Kaip jau minėta, ORM iš kitų modeliavimo būdų išsiskiria tuo, kad pasiūlo daugybę įvairių duomenų ribojimų, bei galimybę ribojimus kombinuoti kartu, išgaunant naujus.

#### Vidiniai unikalumo ribojimai

Kiekvienas faktas privalo turėti nors vieną vidinį unikalumo ribojimą. Vidinis unikalumo ribojimas turi apimti bent jau du vaidmenis trinariui fakto tipui ir bent jau tris vaidmenis fakto tipui susidedančiam iš keturių vaidmenų.

Kiekvienas predikatas, išskyrus vienanarį, turi turėti bent jau vieną aiškų vidinį unikalumo ribojimą. Nepritaikius daugianariams (narių skaičius daugiau arba lygus 2), nėra nusakomas esybės egzempliorių skaičius sąryšyje.

#### Privalomo vaidmens ribojimai

Privalomo vaidmens ribojimas nusako, kad esybė privalo atlikti pažymimą vaidmenį. Privalomą vaidmenį gali atlikti kai kurie esybės, priklausomai nuo modeliuotojo pasirinkimo, tačiau nei vienas reikšmės objekto tipas negali atlikti privalomą vaidmenį.

Pav. 5 Privalomo vaidmens ribojimas

#### Išoriniai unikalumo ribojimai

Išoriniai unikalumo ribojimai išreiškia objekto tipą, kuris unikaliai identifikuojamas dvejais vaidmenimis.

Pav. 6 Išorinis unikalumo ribojimas

Taikant išorinį unikalumo ribojimą yra svarbu nustatyti taikytinus vaidmenis. Dažniausiai pasitaikanti išorinio unikalumo taikymo klaida yra netinkamų vaidmenų parinkimas.

#### Sudėtiniai objektų tipai (pirminių sąryšių ribojimai)

Pirminiai sąryšių ribojimai nusako kuris vaidmuo pirmiausiai identifikuoja sudėtinį objekto tipą. 
Pirminis sąryšio ribojimas išreiškia išorinio unikalumo ribojimo buvimą, todėl diagramose paprastai jie kartu tiems patiems vaidmenims netaikomi. 
Pirminis sąryšio ribojimas parodo, jog sudėtinis objekto tipas pirmiausia identifikuojamas ribojamais vaidmenimis. 

Pav. 7 Pirminio sąryšio ribojimas

#### Indeksų ribojimai

Indekso ribojimas nedraudžia vaidmenų, kuriems jis yra taikomas, egzempliorių. Indeksai taikomi numanant galimus duomenų paieškos atvejus, siekiant paspartinti duomenų paieškas.

Pav. 8 Indeksų ribojimai

#### Disjunktyvūs privalomo vaidmens ribojimai

Disjunktyvus privalomo vaidmens ribojimas išsiskiria nuo paprasto privalomo vaidmens ribojimo tuo, kad yra taikomas dvejiems ar daugiau vaidmenims, atliekamiems tuo pačiu objekto tipu.
Disjunktyvus privalomo vaidmens ribojimas nusako tai, jog kiekvienas objekto tipo populiacijos egzempliorius turi pasirodyti bent jau viename iš ribojamų vaidmenų. 

Pav. 9 Disjunktyvus privalomo vaidmens ribojimas

#### Išskyrimo ribojimai

Išskyrimo ribojimas nusako, jog objekto tipas gali atlikti tik vieną vaidmenį iš dviejų ar daugiau vaidmenų susidedančios grupės, kuriai yra taikomas ribojimas. 
Kiekvienas objekto tipo populiacijos egzempliorius gali atlikti tiktai vieną iš ribojamų vaidmenų, tačiau gali neatlikti ir nei vienos. Žinoma, jei tai nenumatyta kitų ribojimų.

Pav. 10 Išskyrimo ribojimas

#### Žiediniai ribojimai

Žiedinis ribojimas taikomas to paties objekto tipo vaidmenų porai fakte.
Dažniausiai naudojami binariniuose fakto tipuose, tačiau gali būti taikomi ir aukštesnės eilės (trinariuose, keturių ar daugiau narių) fakto tipuose, kuriuose tas pats objekto tipas atlieka du vaidmenis. 
Išskiriami šeši pagrindiniai žiediniai ribojimai: simetrinis (sym), nesimetrinis (ans) asmiterinis (as), neciklinis (ac), nerefleksyvus (ir), netranzityvus **(**it.**)**. Gali būti taikomi keli žiediniai ribojimai vienai vaidmenų porai. Žiedinių ribojimų sąsaja pateikiama T. Halpin  1 , išreiškiama:

Pav. 11 Žiedinių ribojimų sąsajos

##### Simetrinis ribojimas

Apribojimas „Simetrinis" (angl. Symmetric, SYM) reikalauja, kad to paties objekto priešingas vaidmuo taip pat būtų teisingas. Jeigu egzistuoja egzemplioriaus A ryšys su B, tuomet egzistuoja ir egzemplioriaus B ryšys su A. 

Pav. 12 Simetrinis ribojimas

Pavyzdžiui, jei asmuo A yra asmens B brolis, tuomet asmuo B taip pat yra asmens A brolis (jeigu Jonas yra Tomo brolis (Jonas, Tomas), tuomet Tomas taip yra Jono brolis (Tomas, Jonas)).

Pav. 13 Simetrinio ribojimo pavyzdys

##### Asimetrinis ribojimas

Apribojimas „Asimetrinis" (angl. *Asymmetric*, AS) apriboja priešingo vaidmens egzistavimą tarp dviejų skirtingų objekto tipo egzempliorių. Asimetrinis ribojimas nusako, jog esant duomenų kombinacijai (A,B) negalima duomenų kombinacija (B,A), t. y. jei esybės egzempliorius A turi ryšį su tos pačios esybės egzemplioriumi B, egzempliorius B negali turėti ryšio su tokia pat role su tuo pačiu esybės A egzemplioriumi (jei A yra tėvas, o B sūnus, tai A negali būti B sūnus). 

Pav. 14 Asimetrinis ribojimas

Pavyzdžiui, jei Tomas yra vyresnis Jono brolis (Tomas, Jonas), tuomet Jonas negali būti vyresnis Tomo brolis (Jonas, Tomas). 

Pav. 15 Asimetrinio ribojimo pavyzdys

Asimetrinis ribojimas nusako nerefleksyvaus ribojimo egzistavimą. 

##### Nesimetrinis ribojimas

Apribojimas „Nesimetrinis" (angl. *Antisymmetric*, ANS) kaip ir „Asimetrinis" apribojimas neleidžia egzistuoti priešingai rolei tarp skirtingų esybės egzempliorių, tačiau priešingai negu „Nerefleksyvus" apribojimas leidžia, kad ta pati esybė dalyvautų abiejose ryšio vaidmenyse. Šis apribojimas leidžia esybės egzemplioriui A turėti ryšį su tos pačios esybės A egzemplioriumi ir leidžia egzemplioriui A turėti ryšį su egzemplioriumi B, tačiau draudžia egzemplioriui B turėti ryšį su egzemplioriumi A.

Pav. 16 Nesimetrinis ribojimas

Pavyzdžiui, asmuo yra vyresnis ar tokio pat amžiaus kaip ir kitas asmuo. 

Pav. 17 Nesimetrinio ribojimo pavyzdys

##### Neciklinis ribojimas

Apribojimas „Neciklinis" (angl. *Acyclic*, AC) nurodo, kad negali egzistuoti ciklų sąryšyje. Pavyzdžiui, jei yra duomenų kombinacija (A,B) ir (B,C), tuomet negalima duomenų kombinacija (C,A), t. y. jeigu esybės egzempliorius A turi ryšį su tos pačios esybės B egzemplioriumi ir egzempliorius B turi ryšį su tos pačios esybės C egzemplioriumi, egzemplioriaus C ryšys su A egzemplioriumi yra negalimas.

Pav. 18 Neciklinis ribojimas

Pavyzdžiui, asmuo A yra vyresnis už asmenį B, o asmuo B vyresnis už asmenį C, tuomet asmuo C negali būti vyresnis už asmenį A.

Pav. 19 Neciklinio ribojimo pavyzdys

Neciklinis ribojimas nusako egzistavimą asimetrinio ir nerefleksyvaus ribojimo.

##### Nerefleksyvus ribojimas

Apribojimas „Nerefleksyvus" (angl. *Irreflexive*, IR) reikalauja, kad tas pats objekto tipas nedalyvautų abiejuose ryšio vaidmenyse tuo pačiu metu. Nerefleksyvus apribojimas nusako, jog vieno vaidmens egzempliorius negali būti kito vaidmens egzempliorius vienu metu (A,A), t. y. esybės egzempliorius A negali turėti ryšio pats su savimi.

Pav. 20 Nerefleksyvus ribojimas

Pavyzdžiui, asmuo negali būti pats savo tėvas.

Pav. 21 Nerefleksyvaus ribojimo pavyzdys

##### Netranzityvus ribojimas

Apribojimas „Netranzityvus" (angl. *Intransitive*, IT) nusako, kad esant duomenų kombinacijai (A,B) ir (B,C), negalima duomenų kombinacija (A,C), t. y. jeigu esybės egzempliorius A turi ryšį su tos pačios esybės B egzemplioriumi ir egzempliorius B turi ryšį su tos pačios esybės C egzemplioriumi, egzemplioriaus A ryšys su C egzemplioriumi yra negalimas.

Pav. 22 Netranzityvus ribojimas

Pavyzdžiui, jei asmuo A yra asmens B dėdė, tuomet jei asmuo B yra asmens C dėdė, tai asmuo A negali būti asmens C dėdė (jeigu Rimas yra Vyto dėdė (Rimas, Vytas), o Vytas yra Tado dėdė (Vytas, Tadas), tuomet Rimas negali būti Tado dėde (Rimas, Tadas)). 

Pav. 23 Netranzityvaus ribojimo pavyzdys

Netranzityvus ribojimas nusako ne refleksyvaus ribojimo egzistavimą.

#### Lygybės ribojimas

Lygybės ribojimas nustato sąryšį, kurio ribojamų vaidmenų ar vaidmenų sekų populiacija turi būti tokia pati. 

Pav. 24 Lygybės ribojimas

Lygybės ribojimas nurodo, jog esybė1 atlieka vaidmenį sąryšyje su esybe2, jeigu tik esybė1 atlieka vaidmenį sąryšyje su esybe3.

#### Poaibio ribojimai

Poaibio ribojimas, kaip ir lygybės ribojimas, suvaržo vaidmens ar vaidmenų sekos populiacijos sąryšį su kito vaidmens ar vaidmenų sekos populiacija. Naudojama, norint parodyti, jog kiekvienas vaidmens ar vaidmenų sekos populiacijos egzempliorius turi būti įtrauktas kitoje populiacijoje.

Pav. 25 Vaidmenų poaibio ribojimas

#### Pasikartojimo ribojimai

Pasikartojimo ribojimas nusako kiek kartų kiekvienas egzempliorius pasitaikys vieno ar daugiau vaidmenų populiacijoje.
Pasikartojimo ribojimas gali būti išreiškiamas kaip specifinė reikšmė, reikšmių intervalas arba mažiausia reikšmė. 

Pav. 26 Pasikartojimo arba dažnumo ribojimai

Koncepcinės schemos projektavimo procedūra
------------------------------------------

arba Conceptual Schema Design Procedure, nusako informacijos modeliavimo procesą, modeliuojant ORM.

Koncepcinio modelio sudarymo procedūra susideda iš septynių žingsnių:

1) Informacija apie taikomąją sritį transformuojama į elementariuosius faktus, bei patikrinamas faktų teisingumas;

2) Faktai perkeliami į modelį bei patikrinami galimi faktų variantai;

3) Tikrinami esybių tipai, kurie turėtų būti apibendrinti, bei pažymimi bet kokie aritmetiniai išvedimai (angl. *Arithmetic derivations*);

4) Pridedami unikalumo apribojimai, peržiūrimi fakto narių skaičiai;

5) Pridedami privalomo vaidmens apribojimai ir patikrinamos loginės išvestys (*angl. logical derivations*);

6) Pridedami reikšmės, aibių palyginimo (angl. *set comparision*) bei potipių apribojimai;

7) Pridedami kiti apribojimai ir atliekamas galutinis patikrinimas.

ORM modeliavimo priemonės
-------------------------

NORMA (Neumont ORM Architect) – priemonė, palaikanti ORM2 notaciją. NORMA yra įskiepis (angl. *plug-in*) į MS Visual Studio 2005 platformą.

MS VISIO Enterprise Architects - palaiko ORM modeliavimą.

Nuorodos
--------

* ORM.net
* objectrolemodeling.com[neveikianti nuoroda]
* NIAM/ORM

Išnašos
-------

1. ↑  T. A. Halpin. Information Modeling and Relational Databases, Morgan Kaufmann, San Francisco, 2001
2. ↑  T. A. Halpin. A Logical Analysis of Information Systems: static aspects of the data-oriented perspective. Daktaro disertacija, University of Queensland, 1989.