Date post: | 27-Aug-2018 |
Category: |
Documents |
Upload: | nguyenkiet |
View: | 220 times |
Download: | 0 times |
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
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 manželkách a manželech. K základním informacím o osobě patří datum narození, případně úmrtí, jméno, příjmení a pohlaví.
Základní entitou / třídou bude Osoba. Atribut datÚmrtí by měl být nepovinný. Sňatek 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.
Sňatek
RČ
jméno
0..1
příjmení
datNar datÚmrtí
pohlaví
0..1 0..1 manžel manželka Osoba
datSňatku
Rodič
0..n 0..2
(0,1) (0,1) +manžel +manželka
Osoba (0,2)
(0,*)
- RČ - datNar - datÚmrtí (0..1) - jméno - příjmení - pohlaví
Sňatek
+rodič
+potomek
Sňatek - datSňatku
Totéž v UML. Pouze kardinality vztahů jsou Znázorněny prohozené.
4
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 manželkách a manželech. K základním informacím o osobě patří datum narození, případně úmrtí, jméno, příjmení a pohlaví.
Vztah na rodiče by bylo vhodné rozdělit na dva vztahy - Otec a Matka. Lépe se bude zjišťovat, který z rodičů je který.
Sňatek
RČ
jméno
0..1
příjmení
datNar datÚmrtí
pohlaví
0..1 0..1 manžel manželka Osoba
datSňatku
Otec
0..n 0..1
Matka
0..1 0..n
(0,1) (0,1) +manžel +manželka
(0,1) (0,*)
- RČ - datNar - datÚmrtí (0..1) - jméno - příjmení - pohlaví
Sňatek
+otec
+potomek
Sňatek - datSňatku
Osoba
(0,*) +potomek (0,1)
+matka
5
Vztah Sňatek 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.
(1,1) (1,1) +manžel +manželka
(0,1) (0,*)
- RČ - datNar - datÚmrtí (0..1) - jméno - příjmení - pohlaví
+otec
+potomek
Sňatek - datSňatku - datRozvodu (0,1)
Osoba
(0,*) +potomek (0,1)
+matka
(0,*) (0,*)
RČ
jméno
0..1
příjmení
datNar datÚmrtí
pohlaví
0..n 0..n
Osoba
datSňatku
Otec
0..n 0..1
Matka
0..1 0..n
datRozvodu 0..1
Sňatek 1..1 1..1 Man
žel Man želka
6
Poslední úpravou bude vytvoření hierarchie osob dle pohlaví, tedy přidání dvou entit Muž a Žena. To umožní detailněji specifikovat typy vztažených entit ve vztazích
RČ
jméno
0..1
příjmení
datNar datÚmrtí
pohlaví
0..n 0..n manžel manželka
Osoba
datSňatku
Otec
0..n
0..1
Matka
0..1
0..n
datRozvodu 0..1
Sňatek 1..1 1..1
Muž Žena
Man žel
Man želka
(1,1) (1,1) +manžel +manželka
(0,1)
(0,*)
- RČ - datNar - datÚmrtí (0..1) - jméno - příjmení - pohlaví
+otec
+potomek
Sňatek - datSňatku - datRozvodu (0,1)
Osoba
(0,*) +potomek
(0,1) +matka
(0,*) (0,*)
Muž Žena
Převod do logického relačního modelu
7
Osoba(RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Sňatek(maželRČ,manželkaRČ,datSňatku)
manželRČOsoba.RČ, manželkaRČOsoba.RČ
Rodič(rodičRČ,potomekRČ) rodičRČOsoba.RČ, potomekRČOsoba.RČ
8
Sňatek
RČ
jméno
0..1
příjmení
datNardatÚmrtí
pohlaví
0..10..1manžel manželkaOsoba
datSňatku
Rodič
0..n0..2
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 RČ není součástí diagramu, ale případného OCL omezení. Atribut datSňatku bude jako neklíčový přidán do relace, která vztah modeluje.
Osoba(OsobaID,RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Sňatek(maželID,manželkaID,datSňatku)
manželIDOsoba.OsobaID, manželkaIDOsoba.OsobaID
Rodič(rodičID,potomekID) rodičIDOsoba.osobaID, potomekIDOsoba.OsobaID
(0,1)(0,1)+manžel +manželka
Osoba(0,2)
(0,*)
- RČ- datNar- datÚmrtí (0..1)- jméno- příjmení- pohlaví
Sňatek
+rodič
+potomek
Sňatek- datSňatku
Osoba(RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Sňatek(maželRČ,manželkaRČ,datSňatku)
manželRČOsoba.RČ, manželkaRČOsoba.RČ
Otec(otecRČ,potomekRČ) otecRČOsoba.RČ, potomekRČOsoba.RČ
Matka(matkaRČ,potomekRČ) matkaRČOsoba.RČ, potomekRČOsoba.RČ
9
Převod E-R i UML bude obdobný předchozímu, pouze vztahová tabulka Rodič bude nahrazena dvojicí vztahových tabulek Otec a Matka.
Osoba(OsobaID,RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Sňatek(maželID,manželkaID,datSňatku)
manželIDOsoba.OsobaID, manželkaIDOsoba.OsobaID
Otec(otecID,potomekID) otecIDOsoba.osobaID, potomekIDOsoba.OsobaID
Matka(matkaID,potomekID) matkaIDOsoba.osobaID, potomekIDOsoba.OsobaID
Sňatek
RČ
jméno
0..1
příjmení
datNardatÚmrtí
pohlaví
0..10..1manžel manželkaOsoba
datSňatku
Otec
0..n0..1
Matka
0..10..n (0,1)(0,1)
+manžel +manželka
(0,1)(0,*)
- RČ- datNar- datÚmrtí (0..1)- jméno- příjmení- pohlaví
Sňatek
+otec
+potomek
Sňatek- datSňatku
Osoba
(0,*)+potomek(0,1)
+matka
Osoba(RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Sňatek(maželRČ,manželkaRČ,datSňatku ,
datRozvodu) manželRČOsoba.RČ, manželkaRČOsoba.RČ
Otec(otecRČ,potomekRČ) otecRČOsoba.RČ, potomekRČOsoba.RČ
Matka(matkaRČ,potomekRČ) matkaRČOsoba.RČ, potomekRČOsoba.RČ
10
Převod E-R i UML bude opět obdobný předchozímu. V E-R bude mít pouze vztahová tabulka Sňatek jiný – složený – klíč, obě RČ plus atribut datSňatku. Navíc bude mít vazební tabulka nový neklíčový atribut datRozvodu. V UML bude nyní Sňatek plnohodnotná entita s vlastním ID a přibude atribut datRozvodu. Dva 1:N vztahy mezi třídami Sňatek a Osoba budou vnořeny do ní.
Osoba(OsobaID,RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Sňatek(SňatekID,datSňatku , datRozvodu,
maželID,manželkaID) manželIDOsoba.OsobaID, manželkaIDOsoba.OsobaID
Otec(otecID,potomekID) otecIDOsoba.osobaID, potomekIDOsoba.OsobaID
Matka(matkaID,potomekID) matkaIDOsoba.osobaID, potomekIDOsoba.OsobaID
RČ
jméno
0..1
příjmení
datNardatÚmrtí
pohlaví
0..n0..n
Osoba
datSňatku
Otec
0..n0..1
Matka
0..10..n
datRozvodu0..1
Sňatek1..1 1..1Man
želManželka
(1,1)(1,1)+manžel +manželka
(0,1)(0,*)
- RČ- datNar- datÚmrtí (0..1)- jméno- příjmení- pohlaví
+otec
+potomek
Sňatek- datSňatku- datRozvodu (0,1)
Osoba
(0,*)+potomek(0,1)
+matka
(0,*) (0,*)
Osoba(RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Muž(RČ), RČOsoba.RČ Žena(RČ), RČOsoba.RČ
Sňatek.manželRČMuž.RČ, Sňatek.manželkaRČŽena.RČ Otec.otecRČMuž.RČ, Matka.matkaRČOsoba.RČ
11
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 Osoba, Muž a Žena. V obou modelech by bylo zřejmě možné atribut pohlaví odebrat. Pozná se jinak.
Osoba(OsobaID,RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Muž(OsobaID), osobaIDOsoba.OsobaID Žena(OsobaID), osobaIDOsoba.OsobaID
Sňatek.manželIDMuž.OsobaID, Sňatek.manželkaRČŽena.OsobaID Otec.otecIDMuž.OsobaRČ, Matka.matkaIDŽena.OsobaID
RČ
jméno
0..1
příjmení
datNardatÚmrtí
pohlaví
0..n0..nmanžel manželka
Osoba
datSňatku
Otec
0..n
0..1
Matka
0..1
0..n
datRozvodu0..1
Sňatek1..1 1..1
Muž Žena
Manžel
Manželka
(1,1)(1,1) +manžel +manželka
(0,1)
(0,*)
- RČ- datNar- datÚmrtí (0..1)- jméno- příjmení- pohlaví
+otec
+potomek
Sňatek- datSňatku- datRozvodu (0,1)
Osoba
(0,*)+potomek
(0,1)+matka
(0,*) (0,*)
Muž Žena
Osoba(RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Sňatek(maželRČ,manželkaRČ,datSňatku,
datRozvodu) manželRČOsoba.RČ, manželkaRČOsoba.RČ
Otec(otecRČ,potomekRČ) otecRČOsoba.RČ, potomekRČOsoba.RČ
Matka(matkaRČ,potomekRČ) matkaRČOsoba.RČ, potomekRČOsoba.RČ 12
Pokud se budeme chtít vyhnout spojování relací Osoba a Muž, resp. Osoba a Žena, je možné celou hierarchii převést jako jediné schéma Osoba. V tomto případě dopadne převod stejně, Jako převod bez hierarchie o dva slidy dříve.
Osoba(OsobaID,RČ,datNar,datÚmrtí,
jméno,Příjmení,pohlaví) Sňatek(SňatekID,datSňatku , datRozvodu,
maželID,manželkaID) manželIDOsoba.OsobaID, manželkaIDOsoba.OsobaID
Otec(otecID,potomekID) otecIDOsoba.osobaID, potomekIDOsoba.OsobaID
Matka(matkaID,potomekID) matkaIDOsoba.osobaID, potomekIDOsoba.OsobaID
RČ
jméno
0..1
příjmení
datNardatÚmrtí
pohlaví
0..n0..nmanžel manželka
Osoba
datSňatku
Otec
0..n
0..1
Matka
0..1
0..n
datRozvodu0..1
Sňatek1..1 1..1
Muž Žena
Manžel
Manželka
(1,1)(1,1) +manžel +manželka
(0,1)
(0,*)
- RČ- datNar- datÚmrtí (0..1)- jméno- příjmení- pohlaví
+otec
+potomek
Sňatek- datSňatku- datRozvodu (0,1)
Osoba
(0,*)+potomek
(0,1)+matka
(0,*) (0,*)
Muž Žena
Osoba(…) Muž(RČ,datNar,datÚmrtí, jméno,Příjmení,pohlaví) Žena(RČ,datNar,datÚmrtí, jméno,Příjmení,pohlaví)
Sňatek.manželRČMuž.RČ, Sňatek.manželkaRČŽena.RČ Otec.otecRČMuž.RČ, Otec.potomekRČ ???, Matka.matkaRČOsoba.RČ, Matka.potomekRČ ???
13
Pokud budeme brát entitu Osoba jako abstraktní, a dědění jako exkluzivní (nikdo není zároveň muž i žena), bylo by možné vytvořit jen dvě relace Muž a Žena a zrušit relaci Osoba. V návaznosti by se zpřesnily některé cizí klíče, ale musely by být zrušeny ty cizí klíče v Otec a Matka, které musí vést na osoby. V tomto případě by tedy tato volba nebyla vhodná.
Osoba(…) Muž(OsobaID,RČ,datNar, …,Příjmení,pohlaví) Žena(OsobaID,RČ,datNar, …,Příjmení,pohlaví)
Sňatek.manželIDMuž.OsobaID, Sňatek.manželkaRČŽena.OsobaID Otec.otecIDMuž.OsobaRČ, Otec.potomekID ???, Matka.matkaIDŽena.OsobaID , Matka.potomekID ???
RČ
jméno
0..1
příjmení
datNardatÚmrtí
pohlaví
0..n0..nmanžel manželka
Osoba
datSňatku
Otec
0..n
0..1
Matka
0..1
0..n
datRozvodu0..1
Sňatek1..1 1..1
Muž Žena
Manžel
Manželka
(1,1)(1,1) +manžel +manželka
(0,1)
(0,*)
- RČ- datNar- datÚmrtí (0..1)- jméno- příjmení- pohlaví
+otec
+potomek
Sňatek- datSňatku- datRozvodu (0,1)
Osoba
(0,*)+potomek
(0,1)+matka
(0,*) (0,*)
Muž Žena