Saker jag stjäl från UML 

 

UMLs klassdiagram har ett par uttrycksmedel som jag saknar i de vanliga ER-notationerna. Det finns inget som hindrar att vi ”lånar” in dessa. 

/Peter Tallungs, IRM, 2021-06-17

Jag brukar använda den vanligaste notationen för informationsmodeller, det vill säga JMIE (James Martin Information Engineering), kanske mest känd som ”Crow foot notation” (kråkfotsnotation). Främst för att den är vanligast i de sammanhang jag jobbar. Men i den notationen saknar jag ett par saker som finns i UML. Då brukar jag helt sonika låna in dessa.

Ett försvar för att låna från olika notationer

Jag kan tänka mig att en och annan nu sätter kaffet i vrångstrupen bara av tanken på att blanda notationer. Man tycker det är viktigt att vara korrekt, följa regler och att alla gör likadant.

Mitt försvar är att det finns en tid för regler och konsekvens, och det finns en tid för experimenterande och utveckling. Informationsmodellering har som kunskapsområde stått still, i min mening stelnat redan för flera decennier sedan.

Ska vi få till en utveckling av området behöver vi experimentera. Vi behöver vara nyfikna, inspireras från andra områden, kombinera idéer och prova oss fram. Standardisera kan vi vänta med tills vi kommit fram till något som känns någorlunda stabilt. Och dit har vi en bit kvar.

I det följande redovisar jag det jag saknar i vanliga ER-notationer men som finns i UML, och som jag därför fräckt och oblygt lånar in.

Supertyp och subtyp separerade från varandra

Om en entitet är en generalisering av två eller flera andra så ritar man i de vanliga ER-notationerna den generaliserade entiteten (supertypen) som en ram runt de specialiserade entiteterna (subtyperna).

 

 

I UML ritar man i stället subtyperna separerade från supertypen, och en relationslinje emellan dessa med en ofylld triangelspets i änden mot supertypen.

(Det finns dock även en del äldre ER-notationer som också separerar super- och subtyp på samma sätt som UML. Relationen kallas då
”is-a”-relation)

 

Båda ritsätten har sina styrkor och svagheter menar jag.

Fördelen med ritsättet med supertypen som ram är att det intuitivt ger en bättre förståelse för vad det handlar om. Relationen mellan sub- och supertypen är inte en relation mellan två separata företeelser, utan en relation mellan två begrepp, ett mera generellt och ett mera specifikt. En sådan relation har alltså en helt annan natur än de vanliga relationerna som övriga streck representerar. Därför är det bra med ett ritsätt som kraftigt avviker från övriga relationer.

Supertypen är ett mer generellt begrepp för samma företeelser som subtypen. En förekomst av subtypen är samtidigt en förekomst av supertypen. Det finns på så sätt en likhet med de Venndiagram som vi minns från skolans mängdlära. Ritsättet gör att risken minskar att en ovan betraktare av en informationsmodell ska tro att en motorfordonsförsäkring är något annat än en försäkring.

Med UMLs ritsätt är det däremot lätt för en ovan betraktare att tro att vi, precis som med andra typer av relationer, har två olika företeelser med olika förekomster. Där har vi svagheten att relationer med så helt väsensskilda naturer har så lika grafisk gestaltning.

Men det finns också en baksida med ritsättet i JMIE. Det finns tillfällen då det blir omöjligt att rita subtyperna inuti supertypen. Det är när varje subtyp behöver veckla ut sig till ett eget ämnesområde med många egna entiteter runtomkring som är unika för just det ämnesområdet. När det behovet uppkommer ritar jag som i UML, trots att jag i övrigt använder JMIE. Det vill säga sub- och supertyper för sig, förbundna med en linje med en ofylld triangelformad pilspets.

Komposition

Det är vanligt att två entiteter har en särskilt existentiell koppling. Det vill säga att en förekomst av en entitet inte kan existera oberoende av en förekomst av en annan entitet. Ett exempel är en faktura med en eller flera fakturarader. Relationen mellan faktura och fakturarad innebär en mycket starkare koppling än vanliga relationer. En fakturarad har nämligen ingen självständig existens, den kan aldrig existera utan att tillhöra en faktura, den kan inte byta faktura, och om fakturan raderas så försvinner också fakturaraden. I en del äldre notationer kallas den beroende entiteten för beroendeobjekt. Jag tycker att en informationsmodell blir mycket tydligare om man tydligt kan uttrycka den starka relationen.

I de vanliga ER-notationerna finns det ingen möjlighet att uttrycka detta på annat sätt än med den vanliga min 1 – max 1-symbolen, trots att det är en koppling som är väsensskild från vanliga min 1 – max 1-kopplingar.

I UML kallas den relationen komposition och uttrycks med en romb och en pilspets enligt bild. Egentligen ska romben vara fylld men den symbolen finns inte som standard i Visio så vi får nöja oss med en ofylld.
Inom parentes sagt: Den ofyllda romben uttrycker i UML ett aggregat, vilket i praktiken är samma som en min 1 – max 1-koppling, och därför är tämligen meningslös. Jim Rumbough, en av grundarna till UML, liknade det själv vid placebo och Martin Fowler ägnar en hel uppsats till att avfärda konstruktionen.

Så fort jag har en relation i ett ER-diagram som har denna täta koppling så markerar jag det med en romb. På så sätt tycker jag att modellen blir tydligare. Man ser då vad som har en självständig existens och vad som är en integrerad del av en annan företeelse. Dessutom brukar jag placera entiteterna med den beroende entiteten placerad under och med vänsterkanten indragen från huvudentiteten, som bilden till höger visar. På så sätt vill jag tydlig signalera det nära och underställda beroendet.

Vilka innovativa idéer har du?

Jag vill med detta inspirera till experimenterande. Att vi kan lösa modellerings- och gestaltningsproblem på ett nyskapande sätt när så behövs. Vi ska inte vara rädda för att göra fel och måste inte alltid ”play by the book”. Ett område kan bara gå framåt när någon med ett tydligt syfte bryter mot ingrodda regler och ”sanningar”. Den lilla risken vi får ta är att våra modeller därmed blir lite brokigare. Men det är ett lätt pris om det kan bidra till att avancera hela vårt område.

Nu är det din tur. Vad brukar du göra annorlunda?

 

Peter Tallungs

21.06.17