# 2. Konceptuální modelování

## Příklad 1 - Adresář

Chceme sledovat informace o osobách ve městech s pojmenovanými ulicemi. Zajímá nás jméno, příjmení, adresa (která se skládá z města, ulice a čísla orientačního), rodné číslo, datum narození, velikost bot a počet dětí. Jedná se o osobní adresář, proto mohou mít některé osoby také přezdívku. Pokud osoba má přezdívku, je tato unikátní mezi všemi registrovanými osobami. V ER notaci modelujte entitní typ OSOBA. Soustřeďte se zejména na tyto otázky:

1. Jak si poradíme se strukturovanou adresou?
2. Co bude identifikátorem osoby?
3. Je možné / rozumné, aby osoba v této (osobní) databázi byla identifikována dvojicí jméno, příjmení?
4. Jak si poradit s unikátností atributu přezdívka?
5. Je pro každou osobu nezbytně nutné znát všechny atributy?

## Příklad 2 - určení kardinalit a parcialit

Pro každou dvojici tvrzení identifikujte dva entitní typy a jeden typ vztahu. Ve všech případech stanovte kardinalitu a pokuste se rozhodnout o parcialitě vztahu.

1. Oddělení zaměstnává libovolné množství osob. Osoba může být zaměstnána v jednom oddělení.
2. Vedoucí řídí maximálně jedno oddělení. Oddělení má nanejvýš jednoho vedoucího.
3. Každý autor může napsat různé množství knih. Kniha může být napsána více autory.
4. Družstvo se skládá z hráčů. Hráč hraje pouze za jedno družstvo.
5. Učitel vyučuje maximálně jednomu předmětu. Předmět je vyučován právě jedním učitelem.
6. Objednávka zboží může být na více výrobků. Výrobek se může objevit na více objednávkách.
7. Zákazník může předložit řadu objednávek. Každá objednávka je právě od jednoho zákazníka.

## Příklad 3 - Praktický lékař

Praktický lékař má ve své kartotéce mnoho pacientů, ale konkrétní pacient se může registrovat vždy pouze u jednoho praktického lékaře. Uvažujme, že konceptuální schéma zahrnuje pouze aktuální registrace pacientů. Jaká je kardinalita vztahu mezi lékařem a pacientem. Nakreslete ER model a také příklad diagramu výskytů.

1. Jak se změní model, jestliže schéma rozšíříme o možnost ukládat kromě současných registrací pacientů také jejich registrace minulé?
2. Jak se změní model, když zadání rozšíříme tak, že dáme pacientovi možnost současně se registrovat u více lékařů?

## Příklad 4 - Ondatry

Uvažujme chovnou stanici pro ondatry. Každá evidovaná ondatra má jméno, jenoznačné id, pohlaví a datum narození. Ondatra má matku a otce (opět ondatry!). Rodiče ondatry mohou být evidovány ve stejné databázi.

1. Modelujte situaci s pomocí dvou rekurzivních vztahů.
2. Pomocí jednoho rekurizvního binárního vztahu.

Diskutujte výhody a nevýhody jednotlivých variant.

## Příklad 5 - Vlastníci bytů

Chceme evidovat vlastníky bytů. Každý vlastník má ID (umělý atribut), který jej identifikuje, dále kontaktní údaje (telefon, email, fax) a trvalé bydliště. Vlastník bytu je buď fyzická nebo právnická osoba. U právnických osob sledujeme jejich IČO a zavádíme pro ně textový atribut spolehlivost. U fyzických osob sledujeme jméno a datum narození. Vytvořte konceptuální schéma datového úložiště.

## Příklad 6 - Univerzita

Chceme evidovat osoby na univerzitě. U každé osoby sledujeme RČ (identifikátor), adresu (může jich být více), jméno a uživatelské jméno (unikátní pro každou osobu). Některé osoby jsou učitelé, pak u nich sledujeme akademický titul a příslušnost ke katedře. Pro zaměstnance (zaměstnancem může být také učitel) sledujeme datum uzavření poslední pracovní smlouvy, platovou třídu a plat. U studentů (každý student je osobou) sledujeme studijní obor a téma závěrečné práce (je-li známo). Vytvořte konceptuální schéma datového úložiště.

Jaké chyby ve schématu vidíte?

## Příklad 7 - ZOO zahrada

Mějme IS zoologické zahrady. V zoologické zahradě jsou umístěna zvířata. Každé zvíře je nějakého druhu, má svoje id, které je jednoznačné pouze v rámci druhu, jméno, datum narození a zemi původu.

Každý druh je identifikován atributem id_druhu a dále má atribut popis. V ZOO evidujeme i takové druhy, jejichž exempláře zde aktuálně nejsou.

Zvířata jsou umístěna v objektech. Každé zvíře patří do nějakého objektu, v objektu může být více zvířat. Mohou existovat prázdné objekty.

Objekt je buď klec nebo výběh. Objekty mají id a adresu. U klecí sledujeme objem, vybavení a zda mají přípojení k internetu. U výběhu sledujeme plochu a členitost terénu.

O objekty se starají krmiči. Krmič má id, jméno a adresu, někteří krmiči ale mohou být bezdomovci. Krmič může mít na starosti několik objektů, minimálně však alespoň jeden. Každý objekt má právě jednoho odpovědného krmiče.

Zvířata absolvují prohlídky u lékařů (lékař má id a jméno). Prohlídku modelujte jako slabou vztahovou entitu identifikačně závislou na zvířeti. Další částí identifikátoru je datum prohlídky.

- Najděte chybu u vztahového typu je_zarazeno_do
- Najděte chybu u entitního typu PROHLIDKA
- Jak naložíme s tím, že některé atributy OBJEKT se opakují i podtypu klec?
- Jak by se změnila sémantika schématu, když byste vztah „pecuje_o“ nahradili dvojicí vztahů, směřujících k podrypům „klec“ a výběh“ s výlučnou účastí „krmiče“?
- Může jedna instance lékaře někdy provádět prohlídku a jindy asistovat?

## Možná řešení

## Příklad 1 - Adresář

Chceme sledovat informace o osobách ve městech s pojmenovanými ulicemi. Z osobních údajů nás zajímá jméno, příjmení, datum narození, velikost bot, počet dětí a (pokud ji má) unikátní přezdívka. Jedná se o osobní adresář, proto si chceme evidovat adresu bydliště (město, ulice, orientační číslo), tel. číslo, a emailovou adresu. V ER notaci modelujte entitní typ OSOBA. Soustřeďte se zejména na tyto otázky:

1. Co je zde typ entity a co budou její atributy?
2. Je pro každou instanci osoby nezbytně nutné znát hodnoty všech atributů?
3. Jaké vlastnosti musí mít identifikátor?
4. Je možné/rozumné, aby instance osoba v tomto schématu byla identifikována dvojicí jméno, příjmení?
5. Který atribut je vhodné zvolit za identifikátor?
6. Lze u typu entity definovat strukturovaný atribut? Zde například strukturovanou adresu?
7. Diskutujte smysluplnost atributu velikost bot
8. Jak si poradit s unikátností nepovinného atributu přezdívka?

### varianta 1.1

- Je pro každou instanci osoby nezbytně nutné znát hodnoty všech atributů?

### varianta 1.2

- Jaké vlastnosti musí mít identifikátor?
- Je možné/rozumné, aby instance osoba v tomto schématu byla identifikována dvojicí jméno, příjmení?
- Který atribut je vhodné zvolit za identifikátor?

#### varianta 1.5

Lze u typu entity definovat strukturovaný atribut? Zde například strukturovanou adresu?

#### varianta 1.6

- Diskutujte smysluplnost atributu velikost bot
- Jak si poradit s unikátností nepovinného atributu přezdívka?

#### varianta 1.6.2

#### Editace vlastností atributů

Určíme vlastnosti jednotlivých atributů v Oracle Datamodeler. Pro ilustraci si přidáme ještě atribut „Titul“, který má výčtově definovanou množinu přípustných hodnot.

## Příklad 2 - určení kardinalit a parcialit

Pro každou dvojici tvrzení identifikujte dva entitní typy a jeden typ vztahu. Ve všech případech stanovte kardinalitu a pokuste se rozhodnout o parcialitě vztahu.

1. Oddělení zaměstnává libovolné množství osob. Osoba může být zaměstnána v jednom oddělení.
2. Vedoucí řídí maximálně jedno oddělení. Oddělení má nanejvýš jednoho vedoucího.
3. Každý autor může napsat různé množství knih. Kniha může být napsána více autory.
4. Družstvo se skládá z hráčů. Hráč hraje pouze za jedno družstvo.
5. Učitel vyučuje maximálně jednomu předmětu. Předmět je vyučován právě jedním učitelem.
6. Objednávka zboží může být na více výrobků. Výrobek se může objevit na více objednávkách.
7. Zákazník může předložit řadu objednávek. Každá objednávka je právě od jednoho zákazníka.

### varianta 2.1

1. Oddělení zaměstnává libovolné množství osob. Osoba může být zaměstnána v jednom oddělení.

### varianta 2.2

- Vedoucí řídí maximálně jedno oddělení. Oddělení má nanejvýš jednoho vedoucího.

### varianta 2.3

- Každý autor může napsat různé množství knih. Kniha může být napsána více autory.

### varianta 2.4

- Družstvo se skládá z hráčů. Hráč hraje pouze za jedno družstvo.

### varianta 2.5

1. Učitel vyučuje maximálně jednomu předmětu. Předmět je vyučován právě jedním učitelem.

### varianta 2.6

1. Objednávka zboží může být na více výrobků. Výrobek se může objevit na více objednávkách.

### varianta 2.7

- Zákazník může předložit řadu objednávek. Každá objednávka je právě od jednoho zákazníka.

## Příklad 3 - Praktický lékař

Praktický lékař má ve své kartotéce mnoho pacientů, ale konkrétní pacient se může registrovat vždy pouze u jednoho praktického lékaře. Uvažujme, že konceptuální schéma zahrnuje pouze aktuální registrace pacientů. Jaká je kardinalita vztahu mezi lékařem a pacientem. Nakreslete ER schéma a také příklad diagramu výskytů.

1. Co identifikuje vztah? Co odlišuje dvě instance vztahu téhož typu od sebe?
2. Jak se změní schéma, chceme-li umožnit ukládat kromě současných registrací pacientů také jejich registrace minulé?
3. Jak se změní schéma, když zadání rozšíříme tak, že dáme pacientovi možnost současně se registrovat u více lékařů?

### varianta 3.1

### varianta 3.2

- Jak se změní schéma, chceme-li umožnit ukládat kromě současných registrací pacientů také jejich registrace minulé?

### varianta 3.3

- Jak se změní schéma, když zadání rozšíříme tak, že dáme pacientovi možnost současně se registrovat u více lékařů?

## Příklad 4 - Ondatry

Uvažujme chovnou stanici pro ondatry. Každá evidovaná ondatra má jméno, jenoznačné id, pohlaví a datum narození. Ondatra má matku a otce (opět ondatry!). Rodiče ondatry mohou být evidovány ve stejné databázi.

1. Modelujte situaci s pomocí dvou rekurzivních vztahů.
2. Pomocí jednoho rekurizvního binárního vztahu.

### varianta 4.1

### varianta 4.11

### varianta 4.12

### varianta 4.2

Diskutujte výhody a nevýhody jednotlivých variant.

## Příklad 5 - Vlastníci bytů

Chceme evidovat vlastníky bytů. Každý vlastník má ID (umělý atribut), který jej identifikuje, dále kontaktní údaje (telefon, email, fax) a trvalé bydliště. Vlastník bytu je buď fyzická nebo právnická osoba. U právnických osob sledujeme jejich IČO a zavádíme pro ně textový atribut spolehlivost. U fyzických osob sledujeme jméno a datum narození. Vytvořte konceptuální schéma datového úložiště.