Relační databázová technologie

Save this PDF as:
 WORD  PNG  TXT  JPG

Rozměr: px
Začít zobrazení ze stránky:

Download "Relační databázová technologie"

Transkript

1 Relační databázová technologie Klíč: množina (možná jednoprvková) atributů (sloupců), jež jednoznačně idetifikuje danou entitu. Poznámky: 1. Daný entitní typ (tabulka) může mít více klíčů může být více. Například (i) rodné číslo, (ii) osobní číslo zaměstnance, (iii) syntetický klíč. 2. Každá tabulka má alespoň jeden klíč. V (opravdové) relační databázi nemůže tabulka obsahovat více řádků s týmiž hodnotami v jednortlivých sloupcích.

2 Relační databázová technologie Cizí klíč: množina (možná jednoprvková) atributů (sloupců), jejichž hodnota určuje hodnotu klíče jiné tabulky. Poznámky: 1. Datový typ jednotlivých atributů musí být kompatibilní s datovým typem odpovídajících atrinutů klíče referencované tabulky. 2. Cizí klíč není (nemusí být) v dané tabulce klíčem. 3. Vztah mezi entitami se realizuje asociativní vazbou cizí klíč -> primární klíč. 4. Vzhledem k tomu, že tabulka může mít více klíčů, je dobré jeden z nich zvolit a systematicky ho používat k realizaci vztahů s ostatními tabulkami. Takto zvolený klíč nazýváme klíčem primárním.

3

4 Převod konceptuální model -> logický model Entitní typ -> tabulka Atribut entitního typu -> sloupec tabulky Vztah: 1:1 nebo 1:N: vztah->cizí klíč na straně N atribut vztahu -> sloupec tabulky na straně N N:M: Vztah -> vazební tabulka Atribut vztahu -> sloupec vazební tabulky

5 Konceptuální model Logický model

6 VA30 <M> ma-linky <pi> <M> 1 Slabý entitní typ 1 Notace Crow's Foot

7 VA30 <M> ma-linky <pi> <M> 1 Slabý entitní typ 1 Notace Crow's Foot

8 VA30 <M> Slabý entitní typ 1 Notace Crow's Foot DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) ma-linky FK_LINKY_RELATIONS_ORGANIZA <pi> <M> 1 1 DECIMAL(9,0) <pk> DECIMAL(8,0) <pk> DECIMAL(8,0) <fk> CHAR(15) CHAR(20)

9 VA30 <M> Slabý entitní typ 1 Notace Crow's Foot DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) ma-linky FK_LINKY_RELATIONS_ORGANIZA Není to divné? <pi> <M> Sloupec IČO<M> tu 1 <pi> DC8,0 2x máme Tento sloupec tu bude 2x 1 DECIMAL(9,0) <pk> DECIMAL(8,0) <pk> DECIMAL(8,0) <fk> CHAR(15) CHAR(20)

10 VA30 <M> Slabý entitní typ 1 Notace Crow's Foot DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) ma-linky FK_LINKY_RELATIONS_ORGANIZA <pi> <M> 1 1 DECIMAL(9,0) <pk> DECIMAL(8,0) <pk> DECIMAL(8,0) <fk> CHAR(15) CHAR(20)

11 Slabý entitní typ 2 VA30 <M> ma-linky <pi> <M> 1

12 Slabý entitní typ 2 VA30 <M> <pi> <pi> DC8,0 DC8,0 <M> <M> VA30 VA30 <M> <M> ma-linky <pi> <M> 1 ma-linky <pi> <pi> <M> <M>

13 Řídící entitní typslabý entitní typ 2 VA30 <M> <pi> <pi> DC8,0 DC8,0 <M> <M> VA30 VA30 <M> <M> ma-linky ma-linky Slabý entitní typ <pi> <M> Nemocnice Motol Honda Motol Identifikující vztah (vazba) <pi> <pi> <M> <M> Ústředna Kardiocentrum Novorozenecké oddělení Recepce Prodej nových vozů

14 Slabý entitní typ 3 VA30 <M> ma-linky DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) FK_LINKY_MA-LINKY_ORGANIZA <pi> <M> DECIMAL(8,0) <pk,fk> DECIMAL(9,0) <pk> CHAR(15) CHAR(20)

15 Slabý entitní typ 4 DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) FK_LINKY_MA-LINKY_ORGANIZA DECIMAL(8,0) <pk,fk> DECIMAL(9,0) <pk> CHAR(15) CHAR(20)

16 Reflexivní vztah 1 matka ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni dítě dítě FK_OSOBA_RELATIONS_OSOBA Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) matka

17 Reflexivní vztah 1 matka ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni dítě Reflexive mandatory reference A reflexive reference exists should not have a mandatory FK_OSOBA_RELATIONS_OSOBA parent which could lead to inconsistent joins. dítě Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) matka

18 Reflexivní vztah 2 dítě ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni matka Nepovinná hodnota cizího klíče matka FK_OSOBA_RELATIONS_OSOBA Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) dítě

19 Reflexivní vztah 2 dítě Nepovinná hodnota cizího klíče ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni matka matka FK_OSOBA_RELATIONS_OSOBA Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) dítě

20 Reflexivní vztah 2 dítě ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni matka matka FK_OSOBA_RELATIONS_OSOBA Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) dítě

21 Referenční integrita 1 Mějme dvě tabulky A a B takové, že tabulka B obsahuje cizí klíč odkazující to tabulky A. V databázi nesmí dojít k tomu, že pro nějaký řádek tabulky B odkazuje jeho hodnota cizího klíče na neexistující řádek tabulky A.

22 Referenční integrita 2 Strelna_zbran Osoba Rodne_cislo <pi> <UNDEF> <M> Jmeno <UNDEF> Prijmeni <UNDEF> drzitel Vyrobni_cislo <pi> <UNDEF> <M> Vyrobce <pi> <UNDEF> <M> T yp <UNDEF> Popis <UNDEF> Jak může dojít k porušení referenční integrity? a) Zrušíme záznam v tabulce Osoba => cizí klíč příslušného řádku tabulky Zbran bude odkazovat na neexistující řádek tabulky Osoba. b) Změníme hodnotu primárního klíče některého řádku v tabulce Osoba => cizí klíč příslušného řádku tabulky Zbran bude odkazovat na neexistující řádek tabulky Osoba.

23 Referenční integrita 3 Strelna_zbran Osoba Rodne_cislo <pi> <UNDEF> <M> Jmeno <UNDEF> Prijmeni <UNDEF> drzitel Vyrobni_cislo <pi> <UNDEF> <M> Vyrobce <pi> <UNDEF> <M> T yp <UNDEF> Popis <UNDEF>

24 Referenční integrita 4