Objekto vaidmenų modeliavimas

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Peršokti į: navigaciją, paiešką

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 [1]. Jis ir pateikė pirmąją ORM formalizaciją [2].

Pagrindiniai ORM elementai[taisyti | redaguoti kodą]

Faktai[taisyti | redaguoti kodą]

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“

1 ElementarusFaktas.jpg

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“


2 BinarinioFaktoPavyzdys.jpg

Pav. 2 ORM fakto struktūra

Predikatai[taisyti | redaguoti kodą]

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[taisyti | redaguoti kodą]

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ė.

3 ObjektoTipas.jpg

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[taisyti | redaguoti kodą]

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

Vidiniai unikalumo ribojimai[taisyti | redaguoti kodą]

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[taisyti | redaguoti kodą]

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į.

5 PrivalomumoRibojimas.jpg

Pav. 5 Privalomo vaidmens ribojimas

Išoriniai unikalumo ribojimai[taisyti | redaguoti kodą]

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

6 IsorinisUnikalumoRibojimas.jpg

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)[taisyti | redaguoti kodą]

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.

7 IsorinisPrivalomumoRibojimas.jpg

Pav. 7 Pirminio sąryšio ribojimas

Indeksų ribojimai[taisyti | redaguoti kodą]

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

8 IsorinisINdeksoRibojimas.jpg

Pav. 8 Indeksų ribojimai

Disjunktyvūs privalomo vaidmens ribojimai[taisyti | redaguoti kodą]

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ų.

9 DisjunktyvusPrivalomumoRibojimas.jpg

Pav. 9 Disjunktyvus privalomo vaidmens ribojimas

Išskyrimo ribojimai[taisyti | redaguoti kodą]

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ų.

10 IskirtinumoRibojimas.jpg

Pav. 10 Išskyrimo ribojimas

Žiediniai ribojimai[taisyti | redaguoti kodą]

Ž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:

11 ZiediniaiRibojimas.jpg

Pav. 11 Žiedinių ribojimų sąsajos

Simetrinis ribojimas[taisyti | redaguoti kodą]

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.

12 Simetrinis.jpg

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)).

13 SimetrinisPav.jpg

Pav. 13 Simetrinio ribojimo pavyzdys

Asimetrinis ribojimas[taisyti | redaguoti kodą]

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).

14 Asimetrinis.jpg

Pav. 14 Asimetrinis ribojimas

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

15 AsimetrinisPav.jpg

Pav. 15 Asimetrinio ribojimo pavyzdys

Asimetrinis ribojimas nusako nerefleksyvaus ribojimo egzistavimą.

Nesimetrinis ribojimas[taisyti | redaguoti kodą]

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.

16 Antisimetrinis.jpg

Pav. 16 Nesimetrinis ribojimas

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

17 AntisimetrinisPav.jpg

Pav. 17 Nesimetrinio ribojimo pavyzdys

Neciklinis ribojimas[taisyti | redaguoti kodą]

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.

18 Neciklinis.jpg

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.

19 NeciklinisPav.jpg

Pav. 19 Neciklinio ribojimo pavyzdys

Neciklinis ribojimas nusako egzistavimą asimetrinio ir nerefleksyvaus ribojimo.

Nerefleksyvus ribojimas[taisyti | redaguoti kodą]

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.

20 Nerefleksyvus.jpg

Pav. 20 Nerefleksyvus ribojimas

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

21 NerefleksyvusPav.jpg

Pav. 21 Nerefleksyvaus ribojimo pavyzdys

Netranzityvus ribojimas[taisyti | redaguoti kodą]

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.

22 Netranzityvus.jpg

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)).

23 NteranzityvusPav.jpg

Pav. 23 Netranzityvaus ribojimo pavyzdys

Netranzityvus ribojimas nusako ne refleksyvaus ribojimo egzistavimą.

Lygybės ribojimas[taisyti | redaguoti kodą]

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

24 PoaibiuLygybes.jpg

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[taisyti | redaguoti kodą]

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.

25 Poaibio.jpg

Pav. 25 Vaidmenų poaibio ribojimas

Pasikartojimo ribojimai[taisyti | redaguoti kodą]

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ė.

26 Pasikartojimo.jpg

Pav. 26 Pasikartojimo arba dažnumo ribojimai

Koncepcinės schemos projektavimo procedūra[taisyti | redaguoti kodą]

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[taisyti | redaguoti kodą]

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[taisyti | redaguoti kodą]

Išnašos[taisyti | redaguoti kodą]

  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.