primary key

Transkript

primary key
Souvislost E-R schématu s relačním
●
Reprezentace silného entitního typu
– entitnímu typu odpovídá schéma relace
– atributům entitního typu odpovídají atributy relace
– primární klíč bude tvořen atributy odpovídajícími
atributům identifikačního klíče entitního typu
●
Reprezentace vztahů
– opět musíme použít relaci
– vyjádření je podpořeno referenční integritou
1
Reprezentace vztahu 1:1 (obě účasti povinné)
ZA
M_
VU
Z(C
_
SP Z, J
Z, MÉ
VÝ NO
RO _Z
BC , AD
E,
R
MO ES
DE A,
L)
2
Reprezentace vztahu 1:1 (obě účasti povinné)
CREATE TABLE ZAM_VUZ
(C_Z
Number
PRIMARY KEY ,
JMENO_Z Char Varying(25)
NOT NULL,
ADRESA
Char Varying(25)
NOT NULL ,
SPZ Number
NOT NULL UNIQUE,
VYROBCE Char Varying(10)
NOT NULL,
MODEL
Char Varying(10)
NOT NULL);
CREATE VIEW VUZ
AS
SELECT SPZ, VYROBCE, MODEL
FROM ZAM_VUZ;
CREATE VIEW ZAMESTN
AS
SELECT C_Z, JMENO_Z, ADRESA
FROM ZAM_VUZ;
3
Reprezentace vztahu 1:1 (1 účast nepovinná)
ZAMESTN (C_Z,JMENO_Z,...)
VUZ(SPZ,...,C_Z)
VUZ[C_Z] ZAMESTN [C_Z]
4
Reprezentace vztahu 1:1 (1 účast nepovinná)
CREATE TABLE ZAMESTN
(C_Z
Number
PRIMARY KEY ,
JMENO_Z Char Varying(25)
NOT NULL,
ADRESA Char Varying(25)
NOT NULL );
CREATE TABLE VUZ
(SPZ
Number
PRIMARY KEY,
VYROBCE Char Varying(10) NOT NULL,
MODEL
Char Varying(10) NOT NULL);
ALTER TABLE VUZ
ADD (V_C_Z Number NOT NULL UNIQUE
REFERENCES ZAMESTN);
podchycení povinné účasti a kardinality 1
5
Reprezentace vztahu 1:1 (obě účasti nepovinné)
ní
t
i
t
n
e
dvě
relace
ZAMĚSTN (C_Z,JMÉNO_Z, ADRESA)
e
c
a
l
e
r
á
VŮZ(SPZ, VÝROBCE, MODEL)
v
o
h
a
vzt
POUZIVA(C_Z, SPZ)
IO: POUZIVA[C_Z] ZAMĚSTN [C_Z]
POUZIVA[SPZ ] VŮZ[SPZ]
6
Reprezentace vztahu 1:N
povinná účast
determinantu
u
h
ta
z
v
t
n
a
n
i
m
r
e
t
de
t
s
ča
ú
á
n
n
i
v
Po
inform
nedet aci o parc
ermin
i
antu z alitě
tratím
e
PACIENT(RODNE_C,PRIJMENI,..., ČÍSLO_P)
POKOJ(CISLO_P, POCET_LUZEK,...)
IO: PACIENT[CISLO_P] POKOJ[CISLO_P]
nesmí být NULL
7
Reprezentace vztahu 1:N
nepovinná účast
determinantu
st tahu
a
č
ú e vz
á
n
in ntu v
v
o
nep rmina
dete
inform
nedet aci o parc
ermin
i
antu z alitě
tratím
e
PACIENT(RODNÉ_Č, PŘÍJMENÍ, ..., ČÍSLO_P)
POKOJ(ČÍSLO_P, POČET_LŮŽEK,...)
IO: PACIENT[ČÍSLO_P] POKOJ[ČÍSLO_P]
mů
že b
ýt N
UL
L
8
Reprezentace vztahu 1:N atribut vztahu varianta 1
t
s
a
č
ú
inná
v
o
p
e
N
PACIENT(RODNÉ_Č, PŘÍJMENÍ, ...)
POKOJ(ČÍSLO_P, POČET_LŮŽEK,...)
UMÍSTĚN(RODNÉ_Č,ČÍSLO_P, DATUM_N)
IO: UMÍSTĚN[RODNÉ_Č] PACIENT[RODNÉ_Č]
UMÍSTĚNČÍSLO_P]POKOJ[ČÍSLO_P]
pacienti bez pokoje nejsou uvedeni v UMISTEN
9
Reprezentace vztahu 1:N – varianta 1 (3 relace)
v
ni
de
ve
uu
jso
ne
je
ko
po
ez
ib
nt
cie
pa
N
TE
IS
UM
CREATE TABLE Pacient
( Rodne_c Number
PRIMARY KEY,
Prijmeni Char(20)
NULL,
Jmeno
Char(10)
NOT NULL);
CREATE TABLE Pokoj
( Cislo_p Number
PRIMARY KEY,
Pocet_l
Number(2) NOT NULL);
REATE TABLE Umisten
( U_Rodne_c Number REFERENCES Pacient,
U_Cislo_p Number NOT NULL REFERENCES Pokoj,
U_Datum_n Date
NOT NULL,
PRIMARY KEY(U_Rodne_c ));
10
Reprezentace vztahu 1:N attribut vztahu varianta 2 (slévání)
nepovinná účast d
eterminantu ve
vztahu, který má n
avíc atribut
inform
nedet aci o parc
ermin
ialitě
antu z
tratím
e
POKOJ(ČÍSLO_P, POČET_L,...)
PACIENT(RODNÉ_Č, PŘÍJMENÍ, ..., ČÍSLO_P, DATUM_N),
Obojí může být NULL
PACIENT[ČÍSLO_P] POKOJ[ČÍSLO_P]
pouze současně
11
Reprezentace vztahu 1:N - varianta 2 (2 realace)
po
dc
hy
ce
ní
ne
p
de ovi
ter nn
mi é ú
na ča
nt st
u i
CREATE TABLE Pacient
( Rodne_c Number
PRIMARY KEY,
Prijmeni Char(20)
NULL,
Jmeno
Char(10)
NOT NULL);
CREATE TABLE Pokoj
( Cislo_p Number
PRIMARY KEY,
Pocet_l
Number(2) NOT NULL);
ALTER TABLE Pacient ADD
( Datum_n
Date,
U_Cislo_p Number REFERENCES Pokoj,
CONSTRAINT CHECK
((U_Cislo_p IS NOT NULL AND Datum_n IS NOT NULL) OR
(U_Cislo_p IS NULL AND Datum_n IS NULL))
);
12
Reprezentace vztahu M:N
CREATE TABLE PROGRAM
(P_NAZEV_K
Char_Varying(20) NOT NULL,
P_JMENO_F
Char_Varying(20) NOT NULL,
DATUM Date
NOT NULL,
PRIMARY KEY (P_NAZEV_K, P_JMENO_F), -- !!! (chceme to?)
FOREIGN KEY (P_NAZEV_K) REFERENCES KINO,
FOREIGN KEY (P_JMENO_F) REFERENCES FILM);
Informaci o povinné/nepovinné účasti ztrácíme.
13
Vztah M:N v ER modeláři (1/2)
Create table kino (
idk Integer Not Null,
Constraint PK_kino Primary Key (idk));
Create table film (
idf Integer Not Null,
Constraint PK_film Primary Key (idf));
Create table program (
datum Date Not Null,
k_idk Integer Not Null,
f_idf Integer Not Null,
Constraint UNQ_program_1 Unique (k_idk, f_idf) -- opravdu to tak chceme???
);
Alter table program add (
Constraint FK_program_1 Foreign Key (k_idk) References kino(idk),
Constraint FK_program_2 Foreign Key (f_idf) References film(idf));
14
Vztah M:N v ER modeláři 2/2
Create table kino (
idk Integer Not Null,
Constraint PK_kino Primary Key (idk));
Create table film (
idf Integer Not Null,
Constraint PK_film Primary Key (idf));
Create table program (
datum Date Not Null,
f_idf Integer Not Null,
k_idk Integer Not Null,
Constraint PK_program Primary Key (datum, f_idf, k_idk) -- film v jednom kině v různých dnech
);
Alter table program add (
Constraint FK_program_1 Foreign Key (k_idk) References kino(idk),
Constraint FK_program_2 Foreign Key (f_idf) References film(idf));
15
Reprezentace vztahu n-árního
a) R(KA, KB, KC),
c) R(KA, KB, KC),
b) R(KA, KB, KC),
d) R(KA, KB, KC),
16
Reprezentace ISA vztahu
OSOBA(OS_C, ADRESA,JMENO,DAT_NAR )
UCITEL (OS_C, AK_HODNOST,PLAT)
STUDENT (OS_C, OBOR, ROCNIK, KREDITY)
IO: STUD [OS_C] OSOBA[OS_C],
UCITEL [OS_C] OSOBA[OS_C]
17
Reprezentace ISA vztahu – varianta 1 (3 relace)
CREATE TABLE OSOBA
(OS_C Number PRIMARY KEY,
JMENO
VARCHAR (20),
ADRESA VARCHAR (25) ,
PLAT
NUMBER,
DAT_NAR DATE);
CREATE TABLE STUD
CREATE TABLE UCITEL
(OS_C
Number PRIMARY KEY,
(OS_C Number PRIMARY KEY,
OBOR Number,
AK_HODN Number, Plat,
ROCNIK Number,
FOREIGN KEY (OS_C) REFERENCES KREDiTY Number,
OSOBA);
FOREIGN KEY (OS_C) REFERENCES
OSOBA;
CREATE VIEW V_STUDENT AS
SELECT *
FROM OSOBA JOIN STUD
USING (OS_C)
CREATE VIEW V_UCITEL AS
SELECT *
FROM OSOBA JOIN UCITEL
USING(OS_C)
18
Reprezentace ISA vztahu – varianta 2 (1 relace)
Jak zabezpečíme
výlučnost účasti v ISA?
CREATE TABLE OSOBA
(OS_C Number PRIMARY KEY,
JMENO
VARCHAR (20),
ADRESA VARCHAR (25) ,
DAT_NAR DATE,
OBOR_st Number,
CREATE VIEW STUDENT AS
ROCNIK_st Number,
SELECT OS_C,JMENO,ADRESA,DAT_NAR,
KREDiTY_st Number,
OBOR_st, ROCNIK_st, KREDiTY_st
AK_HODN_uc Number,
FROM OSOBA
PLAT_uc Number );
WHERE AK_HODN_uc IS NULL;
CREATE VIEW UCITEL AS
SELECT OS_C,JMENO,ADRESA,DAT_NAR,AK_HODN_uc,PLAT_uc
FROM OSOBA
WHERE AK_HODN_uc IS NOT NULL;
19
Reprezentace ISA vztahu – varianta 2 - pokračování
CREATE TABLE OSOBA
(OS_C Number PRIMARY KEY,
JMENO
VARCHAR (20),
ADRESA VARCHAR (25) ,
DAT_NAR DATE,
OBOR_st Number,
ROCNIK_st Number,
KREDiTY_st Number,
AK_HODN_uc Number,
PLAT_uc Number );
Jak zabezpečíme
výlučnost účasti v ISA?
ALTER TABLE OSOBA ADD CONSTRAINT vylucnost
CHECK(((AK_HODN_uc is NULL and PLAT_uc is NULL) and
(OBOR_st + ROCNIK_st +KREDiTY_st) is not NULL)) or
((AK_HODN_uc is not NULL and PLAT_uc is not NULL) and
COALESCE(OBOR_st,ROCNIK_st,KREDiTY_st) is NULL)
);
20
Reprezentace identifikačního vztahu
FILM (JMENO_F, ROK , REZISER)
KOPIE(JMENO_F, CISLO_K, DATUM, ... )
IO: KOPIE[JMENO_F]  FILM [JMENO_F]
21
Reprezentace identifikačního vztahu
CREATE TABLE FILM
(JMENO_F
CHAR(20) PRIMARY KEY,
ROK
DATE
NOT NULL,
REZISER
CHAR(20) NOT NULL);
CREATE TABLE KOPIE
(JMENO_F
CHAR(20) NOT NULL,
CISLO_K
NUMBER
NOT NULL,
DATUM
DATE
NOT NULL,
FOREIGN KEY (JMENO_F) REFERENCES FILM,
PRIMARY KEY (JMENO_F, CISLO_K));
22
Příklad propagace identifikačního klíče
23
Příklad propagace identifikačního klíče
CREATE TABLE KOPIE
(C_KOPIE Number NOT NULL,
K_JMENO_F Char_Varying(25)
REFERENCES FILM,
D_NAKUPU Date NOT NULL,
PRIMARY KEY (C_KOPIE,K_JMENO_F));
CREATE TABLE VYPUJCKA
(DATUM_VYP Date
NOT NULL,
V_C_KOPIE Number
NOT NULL,
V_JMENO_F Char_Varying(25) NOT NULL,
FOREIGN KEY (V_C_KOPIE,V_JMENO_F) REFERENCES KOPIE,
V_ROD_C Number
NULL REFERENCES ZAKAZNIK,
V_OSOBNI_C Number(10) NOT NULL REFERENCES ZAMEST,
CENA
Number NULL,
PRIMARY KEY (DATUM_VYP,V_C_KOPIE,V_JMENO_F));
24
K čemu jsou dobrá jména rolí v ER modeláři?
Create table zamestnanec (
zamid Integer Not Null,
Constraint PK_zamestnanec Primary Key (zamid));
Create table zvire (
sponzoruje_zamid Integer Not Null,
krmi_zamid Integer Not Null,
zvid Integer Not Null,
Constraint PK_zvire Primary Key (zvid));
Alter table zvire add (
Constraint FK_zvire_1 Foreign Key (sponzoruje_zamid) References zamestnanec(zamid),
Constraint FK_zvire_2 Foreign Key (krmi_zamid) References zamestnanec(zamid));
Toto řešení (povinné role vztahů) je bezpečné , ale obecně se vzdáváme zápisů:
select * from zamestnanec join zvire using (???)
=> ruční úpravy skriptu jsou na vlastní nebezpečí!
25

Podobné dokumenty

taháci - Vrstevnice

taháci - Vrstevnice Vlastní entitní typy (systém je otevřený)  Mechanizmy OOP, dědičnost, ...  Vychází se z některé úrovně objektového modelu – Od obecné reprezentace entity (AcDbEntity) – Přes např. obecnou křivku ...

Více

Vůz do Tennessee 1. Tam za Modrou horou, Modrými lesy, tam je

Vůz do Tennessee 1. Tam za Modrou horou, Modrými lesy, tam je vždyť pět dlouhejch let už jsem ji neviděl. 2. Zapřáh' jsem svý koně a dal jsem jim směr: tam za Modrou horu, jen dál na sever, proč severní hvězda se zdá mlhavou a divnej mrak-divnej stín mám za h...

Více

Entitní typ

Entitní typ předka + úprava kardinalit vztahů a atributů

Více

Zpravodaj Českomoravského klubu veteránů 2014

Zpravodaj Českomoravského klubu veteránů 2014 přihlašují ,brémským systémem.. Podte posledních informací ul jsme v seznamu hráěů, kde pořadate|é mají uvedeno asi 860 hráčů.Po přih|ášenÍ do čtyřher 5e Už múžemev k|ídu věnovat přípravě na 11' ME...

Více

Videopůjčovna

Videopůjčovna - kaz dy film ma svoji hranici poc tu dnı k vypujc enı - film muz e by t rezervova n. Pokud se do formula re Vypujcka dostanete pri vracenı filmu, znamena to, z e dany klient bude platit upomınku. ...

Více

Excel - příklady - Univerzita Karlova

Excel - příklady - Univerzita Karlova P(p)  C(c)  p.T=m.T  c.N=p.N  c.C='Boston')}

Více

8A38466

8A38466 Reglstrácl]asaplieclba.II dalas lulas5ungsbeschelnlgungTelili Reglslreenmlslunmslus. Osa II Reglstracl]osliudl]lmas.II. dalis \()IIO"1' ,.tMl't.'J!l Více