!
"#
$ %& '
()
( *+( ,-
+ . (
/0
( ,*
1
. (
( . 0* 1
( .
2
Zwi zane z aktualizacj ,
Zwi zane z istnieniem,
Zwi zane z wprowadzaniem,
Zwi zane z usuwaniem.
3
Twierdzenie
Je eli w relacji R={X, Y, Z} istniej
zale no ci funkcyjne X
→
→
→
→
Y, to relacja R jest
relacj rozkładaln , mo emy wi c zapisa :
R=R1[X, Y]*R2[X, Z]
4
ł
redundancj usuwa si przez rozkład relacji,
rozkład odwracalny: mo na odwróci przez
naturalne zł czenie,
rozkład relacji powinien doprowadzi do tzw.
postaci normalnej,
rozkład relacji nie powinien powodowa utraty
zale no ci istniej cych w relacji pierwotnej.
'
!"# $ %& !'&
"% !(' "')
(*
(!+
Posta normalna pozwala minimalizowa koszty
przechowywania i aktualizowania oraz zwi ksza
wiarygodno danych.
Relacja w 1PN – wszystkie atrybuty maj warto ci
proste
Relacja w 2PN – nie ma zale no ci cz ci klucza
Relacja w 3PN – nie ma zale no
tranzytywnych
Relacja w 4PN – wi e si z
zale no ciami wielowarto ciowymi
Wszystkie relacje znormalizowane i nieznormalizowane
5
,-
- .
*0 0
6!
+
7
8
.
*
/ 1
6!0
.
.
* (
*0
(
1
9* 0
9+ /
+
:
;
,
,-
-
Dublowanie si danych prowadzi do
niepotrzebnego zajmowania pami ci i
przedłu ania wykonywania operacji
relacyjnych.
Mo e równie wyst pi niespójno danych
problemy przy aktualizacji.
Usuwaj c informacje mo emy utraci dane.
<
*
-
(
*0 0
0
*
( . ( 0
1 0
00
7 (
*
+*
ł
*+
(*0 (
0
ł( =( *0( ( +
(
+
*
*+
(*0 ( *
+ *+ (8 7
!>0
+
7
ł (
ł8*+(
( *
Pełna zale no funkcjonalna
=(*0
ł
$/
&" &
, 0
+
ł
+
( * =( * 0
( * ?
@AB $
!
CD$#!#
E
F! G+ ./
( 1 ! G
* 1
! + G
* 1
G
* H
#$ C I
!# F ! G *+ *1
! + G*+ *1 C
+ (1
G.
+ ( H
2
@AB $
#F ! G + ./
( 1 ! G
*+ *1 #
H
, 0
W przykładowej BD w relacji DOSTAWCA
NA ZAMÓWIENIU dubluj si dane atrybutu
Nazwa dostawcy i Adres dostawcy, a w relacji
CZ CI W MAGAZYNIE – atrybuty Adres
magazynu.
Wynika to z istnienia tak zwanych
przechodnich zale no ci funkcyjnych mi dzy
atrybutami.
2
2
(1
&
2 3 "
(
/ *
+
(
. ) + /*-
*1
(
( 1
( +
. J#
ABA1
(
.
*+(
3
,
,
4,
#
!
/ (
( 0
*
( 0 + +
( +(
(
*0 A K B
!
#
!
/)(
+
*
*
( *
+ +
( +( (
*0 A K B
L ! M +
0 #
!
(
*+(
H
! 1 HL
! M
9 + 78 N 9 + / (
( 0
*
( 0 + +
( +( (
*0 A K B
F ! 1 FL
!
.( 0+ 78 N.( 0+ / (
( 0
*
( 0 + +
( +( (
*0 A K B
L
KK
/ (
+
*
*
( *
+ +
( +( (
*0 A K B
H
KK1 HL
KK
9 + 78 N 9 + / (
+
.
* .
( .
+ +
( +( (
*0 A K B
F KK1 FL
KK .( 0+ 78 N.( 0+ / (
+
.
* .
( .
+ +
( +( (
*0 A K B
4
-
,
5
,
,
6
A K BC
>O@C A . *
$" O #
#
(
PA
* #
>O@C
+
$" O .
LQ
$
+
Q
R
S
Zapytanie zewn trzne
uruchamiane na ko cu
Zapytanie wewn trzne
uruchamiane na pocz tku
Wielowarto ciowy
operator porównania
'
# ,
,
(
A K BC
>O@C A . *
$" O
( H !
PA K B
(
>O@C A C@ "@ A1
K O
$" O A#
L #
! ! + > . LT
" ( U
R
S
5
# ,
,
%%
A K BC
>O@C A . *
$" O
( F KK
PA K B
(
>O@C A C@ "@ A1
K O
$" O A#
L #
! ! + > . LT
" ( U
R
S
;
# ,
,
%%,
+ 7& 8
SELECT Nazwisko, Count(*) liczba, Stanowisko
FROM Pracownicy p, Umowy U
WHERE P.IDpracownika = U.IDpracownika
GROUP BY Nazwisko, Stanowisko
HAVING Count(*) >= ALL
(SELECT Count(*)
FROM Pracownicy pr,Umowy Um
WHERE Pr.IDpracownika = Um.IDpracownika AND
stanowisko=‘Przedstawiciel handlowy’
GROUP BY Pr.IdPracownika, Nazwisko);
3
<
,
SELECT Nazwisko, Count(*) Ile
FROM Pracownicy P, Umowy U
WHERE P.IDpracownika = U.IDpracownika
GROUP BY P.Idpracownika, Nazwisko
HAVING COUNT(*) >=ALL
(SELECT Count(*)
FROM Umowy
WHERE idPracownika IN
(SELECT IdPracownika
FROM Pracownicy WHERE kraj =‘Francja’)
GROUP BY idpracownika);
-
,
,- 4
SELECT Nazwisko,Imi , Stanowisko,
Wynagrodzenie
FROM Pracownicy
P1
WHERE Wynagrodzenie >=
(SELECT Avg(Wynagrodzenie)
FROM Pracownicy
P2
WHERE
P2.Stanowisko =P1.Stanowisko
)
ORDER BY Stanowisko;
"9#
"9#:
;
<
5 ,
6.
1"9#:
;
,
6.
SELECT NazwaFirmy
FROM Dealerzy D
WHERE EXISTS
(SELECT *
FROM Samochody S
WHERE D.IdDealera =S.IdDealera
AND PojSilnika=2500);
SELECT NazwaFirmy
FROM Dealerzy
WHERE Adres = ‘&AD’ AND Miasto = ‘&&MS’;
&& - przy ponownym uruchomieniu nast puje
podstawienie wcze niejszych warto ci zmiennych
& - nie zapami tuje wcze niej podanych warto ci