RNDr. Jakub Lokoč, Ph.D. RNDr. Michal Kopecký, Ph.D. Katedra softwarového inženýrství Matematicko-Fyzikální fakulta Univerzita Karlova v Praze 1
Konceptuální modelování 2
Vytvořte model pro reprezentaci matriky obsahující základní informace o osobách a jejich rodinných vztazích. O osobách je potřeba si pamatovat jejich (biologické) rodiče a informace o kách a ech. K základním informacím o osobě patří datum narození, případně úmrtí, jméno, a pohlaví. Rodič 0..2 Základní entitou / třídou bude. Atribut by měl být nepovinný. je vztahem mezi dvěma osobami. Každá osoba může mít až dva rodiče. Rodiče nesmí být povinní, jinak by nešla kvůli tomu žádná osoba vložit. ka (0,2) +rodič + - - - () - Totéž v UML. Pouze kardinality vztahů jsou Znázorněny prohozené. +ka 3
Vytvořte model pro reprezentaci matriky obsahující základní informace o osobách a jejich rodinných vztazích. O osobách je potřeba si pamatovat jejich (biologické) rodiče a informace o kách a ech. K základním informacím o osobě patří datum narození, případně úmrtí, jméno, a pohlaví. Vztah na rodiče by bylo vhodné rozdělit na dva vztahy - a. Lépe se bude zjišťovat, který z rodičů je který. ka + - - - () - +ka 4
Vztah nedovoluje modelovat historii sňatků, pouze aktuální sňatky. Změna vztahu na M:N by ani tak nedovolil opětovný sňatek stejných osob. Řešením bude upgrade vztahu na samostatnou entitu. V E-R modelu bude slabě závislá na obou osobách. datrozvodu + - - - () - +ka žel 1..1 1..1 želka - datrozvodu 5
Poslední úpravou bude vytvoření hierarchie osob dle pohlaví, tedy přidání dvou entit a. To umožní detailněji specifikovat typy vztažených entit ve vztazích - - - () - datrozvodu ka žel 1..1 1..1 želka + +ka - datrozvodu 6
Převod do logického relačního modelu 7
Rodič 0..2 ka Převod E-R i UML bude celkem přímočarý. Nejprve entita (třída), potom oba vztahy, kde oba jsou v podstatě M:N (více než 1:N). V převodu z UML budou umělé klíče. Informace o identifikační schopnosti není součástí diagramu, ale případného OCL omezení. Atribut bude jako neklíčový přidán do relace, která vztah modeluje. (,,, (mažel,ka,)., ka. Rodič(rodič,potomek) rodič., potomek. (0,2) +rodič + - - - () - (ID,,,, (maželid,kaid,) ID.ID, kaid.id Rodič(rodičID,potomekID) rodičid.osobaid, potomekid.id +ka 8
ka Převod E-R i UML bude obdobný předchozímu, pouze vztahová tabulka Rodič bude nahrazena dvojicí vztahových tabulek a. + +ka - - - () - (,,, (mažel,ka,)., ka. (otec,potomek) otec., potomek. (matka,potomek) matka., potomek. (ID,,,, (maželid,kaid,) ID.ID, kaid.id (otecid,potomekid) otecid.osobaid, potomekid.id (matkaid,potomekid) matkaid.osobaid, potomekid.id 9
žel datrozvodu 1..1 1..1 želka Převod E-R i UML bude opět obdobný předchozímu. V E-R bude mít pouze vztahová tabulka jiný složený klíč, obě plus atribut. Navíc bude mít vazební tabulka nový neklíčový atribut datrozvodu. V UML bude nyní plnohodnotná entita s vlastním ID a přibude atribut datrozvodu. Dva 1:N vztahy mezi třídami a budou vnořeny do ní. + - - - () - - datrozvodu +ka (,,, (mažel,ka,, datrozvodu)., ka. (otec,potomek) otec., potomek. (matka,potomek) matka., potomek. (ID,,,, (ID,, datrozvodu, maželid,kaid) ID.ID, kaid.id (otecid,potomekid) otecid.osobaid, potomekid.id (matkaid,potomekid) matkaid.osobaid, potomekid.id 10
Změna se bude týkat jen převodu hierarchie a případně definic cizích klíčů. V nejobecnějším případě převodu vzniknou pro hierarchii tří entit (tříd) tři relační schémata, a. V obou modelech by bylo zřejmě možné atribut pohlaví odebrat. Pozná se jinak. - - - () - datrozvodu ka + +ka žel 1..1 1..1 želka - datrozvodu (,,, (),. (),...,.ka..otec.,.matka. (ID,,,, (ID), osobaid.id (ID), osobaid.id.id.id,.ka.id.otecid.,.matkaid.id 11
Pokud se budeme chtít vyhnout spojování relací a, resp. a, je možné celou hierarchii převést jako jediné schéma. V tomto případě dopadne převod stejně, Jako převod bez hierarchie o dva slidy dříve. - - - () - datrozvodu ka + +ka žel 1..1 1..1 želka - datrozvodu (,,, (ID,,,, (mažel,ka,, (ID,, datrozvodu, datrozvodu) maželid,kaid)., ID.ID, ka. kaid.id (otec,potomek) (otecid,potomekid) otec., otecid.osobaid, potomek. potomekid.id (matka,potomek) (matkaid,potomekid) matka., matkaid.osobaid, potomek. potomekid.id 12
žel datrozvodu 1..1 1..1 želka ka Pokud budeme brát entitu jako abstraktní, a dědění jako exkluzivní (nikdo není zároveň muž i žena), bylo by možné vytvořit jen dvě relace a a zrušit relaci. V návaznosti by se zpřesnily některé cizí klíče, ale musely by být zrušeny ty cizí klíče v a, které musí vést na osoby. V tomto případě by tedy tato volba nebyla vhodná. - - - () - + +ka - datrozvodu ( ) (,,, (,,,..,.ka..otec.,.potomek???,.matka.,.potomek??? ( ) (ID,,,,Příjmení,pohlaví) (ID,,,,Příjmení,pohlaví).ID.ID,.ka.ID.otecID.,.potomekID???,.matkaID.ID,.potomekID??? 13