134 33 43MB
Polish Pages 321
.ß..×n'ci1 I srs'i'1.‹1r»-'ns' Baz. o.~xN\'C
I' --__¬_¬-_____¬_¬_¬-I_-
____._._..
_ _ ¬_¬-I. -
I I
I I
,
I I I I'
_,____ __
I' I
Rys. 9.4. Wielowartościowa zależność funkcyjna
¬_¬_-
W tym wypadku pojedyncza wartość kolumny A wyznacza zbiory wartości atrybutu B
_ -I_¬_¬ _
.I I
-=
(Dyzu:I::ni_M) i zbiory wartości atrybutu C (Dyżurne__K).
_ ______
I I I
Ê
Zalezności funkcyjne, w których jedna wartość atrybutu A jest wyznacznikiem zbioru
I'
-L-I -_ _-I__-_I. _¬ _
_-I.-I. _¬_¬____-_¬_- I._
I
I I
I'
'I
.| I
I' I|
I
wartości atrybutu B, nazywamy zależnościami wielowartościowymi. Przed przejściem do normalizacji oprócz zależności wielowartościowych powinniśmy omówić jeszcze jedną zależność ~ zależność złączeniową (join dependßncy).
;_
. _. ._______.________. ______.._.______.-_______ __._______.__._____.__._______..-__-___ _.._______....-.____._._._-..___--.__-___ ..._-_¦_-
P Ü _D 5 TY). W “If B A
ÜA
if C _iii
UJ KD -_-.I- . nI_'I_.- _¬_¬_
_.-._-__._
___.___
_
_
_
_______________________________________ __.___..__...._.____._.
Zależność złączeniowa Zależność złączeniowa związana jest z operacją rzutowania. Rzut (projekcje) możemy przedstawić jako pionową maszynę do cięcia tabeli. Projekcja powstaje przez Wybór określonych kolumn. jeśli zatem potrzebujemy podzielić zmienną-relację na dwie mniejsze zmienne relacyjne, wykorzystując do tego operację rzutowania, oznacza to, że za pomocą wyboru kolumn określimy, które atrybuty znajdą się w tabeli nr 1, a które znajdą się w tabeli nr 2. Za pomocą zależności funkcyjnych wyłaniamy klucze kandydujące, aby spośród nich wybrać jeden, który zostanie kluczem głównym relacji. Cały proces wyznaczania klucza głównego rozpoczynamy od określenia atrybutów (lub grup atrybutów) jednoznacznie identyfikujących każdą krotkę. W ten sposób Wyznaczymy zestaw kluczy kandydujących. Spośród nich wybierzemy lclucz główny, kierując się zasadą, że klucz główny to taki atrybut (lub zestaw atrybutów), od którego zależne funkcyjnie są wszystkie niekluczowe atrybuty. Wyznaczanie zależności funkcyjnych jest więc ważne na etapie poprzedzającym identyfikację klucza głównego i kluczy kandydujących. W systemach bazodanowych klucz główny jest automatycznie indeksowany"". Należy więc rozważyć, czy wskazywanie jako klucza głównego kilku atrybutów, których typy pozwalają umieszczać w nich duże ilości danych (w każdej krotce), nie będzie wiązało się ze sporym obciążeniem systemu. Normalizacja jest procesem mającym na celu redukowanie anomalii zachowań relacyjnych baz danych poprzez tworzenie mniejszych tabel opartych na dobrze zaprojektowanych relacjach. Aby uniknąć późniejszych błędów podczas projektowania bazy danych, można odnieść się do koncepcji poleci-yolce (japońskiej metody eliminacji wad i poprawy jakości). jest ona związana z zagadnieniem projektowania defensywnego oraz wczesnych błędów. Próbując, dzięki pewnym ustalonym regułom, uchronić aplikację (w naszym wypadku bazę danych) od późniejszych błędów, zaoszczędzimy czas związany z koniecznością jej modyfikacji lub modyfikacji oprogramowania współpracującego z określoną bazą danych. Normalizacja jest zbiorem reguł, które, choć nie są skomplikowane, bywają przedstawiane w bardzo zawiły sposób, dlatego w tym rozdziale zostanie ona omówiona na przykładach. Celem normalizacji jest izolowanie danych. Pojęcie to oznacza, że modyfikacja (wstawianie lub usuwanie określonej informacji) odbywa się w jednym polu, skąd zmiana przenoszona jest za pomocą zdefiniowanych związków (powiązań) do pozostałych tabel bazy danych. Wynalazca modelu relacyjnego - Edgar F. Codd -- w 1970 roku przedstawił model relacyjny znany jako pierwsza postać normalna. W podręczniku będziemy się posługiwać skrótem, ponieważ normalizację oznacza się powszechnie za pomocą skrótu NF (Normal Form); analogicznie postaci normalne od 1 do 6 będą oznaczane INF, ZNP 3NF itd- Codd jest twórcą 1, 2 i 3 postaci normalnej. W 1971 roku Codd i Raymond F. Boyce opracowali wspólnie postać normalną nazwaną Boyce-Codd Normal Form (BCNF). Stąd, gdy mówimy o bazie danych spełniającej BCNF, mamy na myśli bazę danych przeprowadzoną przez 1, 2, 3 NF i spełniającą BCNF. Wyższe formy normalne definiowane były w kolejnych latach przez innych teoretyków. Ostatnią jest szósta forma normalna (GNF), którą wprowa-
dzili Chris Date, Hugh Darwen i Nikos Lorentzos w 2002 roku. W powszechnie przyjętych praktykach baza danych sprowadzona do 3l\lF uznawana jest za znormalizowaną, ponieważ jej tabele w większości są wolne od anomalii, które w pewnych przypadkach mogłaby spowodować modyfikacja związana z wstawieniem i usunięciem danych. W przypadkach * Pojęcie indeksowania wyjaśnione w rozdz. 3.7 ,,|nde|‹sy”.
'_- ¬_-._¬_
I I'
BAZY DANYCH I SYSTEMY BAZ DANYCH
_I -I_ I__
Il Il
I I'I -I' --'-"-'---1-i--"
¬¬. ¬_¬._____
------'-"-¬--------_----'------Z
1-
-
-
_ _-----.-...____--- - _-___-___-I-__
__
_
__--_-
_.______. .
-_____ __
_
I I I
_ _-I -'I-1-I-Il-ul-u-.¬.¬.I _I-|_I-_|.¬I.'
I .I I_. I' I I I I I I I I I I
I 'I
I I
I I I I I _I I' I I I I I II I I I' r 5. i I I I I
J'
I' I I I I I II I'
I' I
I I I I I
I I
implementacji standardowej bazy danych projektant powinien zadbać o pełną normalizację baz danych projektu. Istnieją jednak gałęzie modelowania (dimensional modeling) i hurtownie danych jawnie zalecające nieznormalizowany projekt, który nie jest sprowadzony nawet do 3l\lF (denormalizacja w niektórych przypadkach ma wpływać na podniesienie
wydajności bazy danych).
I I
_II I _I
I
I
__---_-------_I
NFN F
,
.---_-----..__.-------
Ę
` ` ` ` `` ` _ ""
l`lNF
I
""_
I'
Š
¦
rnnr
I I I
I I I
I I
I I I I I I I I I . I' I
_ .---_---- ___-___ _-----_.___.___--¬______-_.---
..___----__.______-
_-__._ _.__
co
..
(5uperKey Normal Form) postać normalna superklucza
.I._.|__.-I'
_-___-___
-___._._¬ ._____.____...
___
___..._-_-_______-_.
.._____... ..
_.______
5NF
[5 Normal Form) piąta postać normalna - Roland Fagin
6NF
(6 Normal Form) szósta postać normalna
R
I
I' I' I
I I r I I I
I
I I _.I I I
I I
I
I
I I I I I I_II
I
I I
I 'I I'
I I I
r
Bazy danych OLTP (On-line Transaction Procassing), które charakteryzują się dużą ilością transakcji zapisu i odczytu, są bardziej znormalizowane od baz danych OLAP (On-line Analytical Processing), które przetwarzają nieliczne - za to dość złożone - transakcje. Dla tych baz danych powtarzające się dane (zdenormalizowana forma) ułatwiają zadanie połączonym z nim programom służącym do wspomagania podejmowania decyzji w biznesie.
I
I'
I'
I' I I I I
I I I I I I II I I I I I I I I I _I I' I I I
I I
I _I
I'
l l
„Nie pierwsza postać normalna” (N`INF-Non-first Normal Form)
I I
I I' I'Í
l I
I I
I
I
I
I
I 'I
.I I' I'
I I
I I I I I
I
I
I
I 4
I I .|
_I I'
_. I
I'
l I
I I
I I
I
Denormalizacja lub zaprojektowanie struktury bazy danych tak, aby nie spelniała założeń projektowych nawet pierwszej postaci normalnej, może być rozważane jako słuszne w niektórych przypadkach, gdzie dużą rolę odgrywa Wydajność. Dane (wartości) przecho-
wywane są w postaci domen, którymi manipuluje się specjalnie w tym celu zaprojektowanymi językami. Przykładem NINF może być zagnieżdżony model relacyjny, który wspiera relacje (tabele) jako zawartość domen poprzez dodanie dwóch dodatkowych operatorów zagnieżdżenia i niezagnieżdżenia.
I
l l
I I I
I
i
I' I'
I I I I I I I I I
I .| f
I I
I›azY|‹ł.An9.4
_
_
_
__
_
__
_
__
_
_
_
Dla przykładu prżeanalizujmy tabelę o atomowych (niepodzielnych) zawartosciach
kolumn. Nasza relacja (tabela) przedstawia klientów salonu motoryzacyjnego i preferowane przez nich marki samochodów. Tabela w pierwszej postaci normalnej (1NF): I _I .I Il
___----.II-. I _'__
_
-
(Redundancy Free Normal Form) postać normalna wolna
Rys. 9.5. Kierunek normalizacji relacyjnych baz danych
Denormalizacja
I I
¬_
(4 Normal Form) czwarta postać normalna - Roland Fagun 5
;__-_I'
I' I'
I I'
____
(Boyce Code Normal Form) postać normalna
SKNF
POZ OM NORMAL Z
_
5 Boyce'a-Coclda
. 3NF_
_
(3 Normal Form) trzecia postać normalna
Š4NF
I
----¬..¬_¬_ _________ .
-|_-_-I.¬_Ŭ_¬_ __
Il---I__-_----"
'Ir
_
-[2 Normal Form) druga postać normalna
BCNF
'
'Č
l
-
-._ ,I 3NF AC]
t2r~sF
""""""""`""`
l "l Normal Form) pierwsza postać normalna
j2NF
I
`""""""`"`
I I ¦I
¬___
_I I'
._._-_----______-__--___.___
Ę normalna H
oI_ I I Í I
l
I I
I' I' I I I I I I I I
¬__"
I I I I I
J
I
I
I I I
"- -`
I
I
„_____
l
SPRAWDŹ swoją. wisozią 1. Co to jest formularz i jakie ma zalety? 2. jakie zastosowanie mają aplikacje bazodanowe? 3. Na czym polega utrzymanie integralności danych za pomocą formularza?
I
_(___.___- _ -_- _---_ ____ _.___ -...__.__ _.__-_.__-_._¬ ¬___-.
9
~¬ -I' \
'N-
\‹" 'K-I J
I» l
_ _ ___ H_ ¬_Mw„_ ”H_ üń_ _“ _ ”__m_hNh__d __”_ _ fi_ _wH_H__ _ _ ___ _ Í_U“¬____________úu_____"___ _ _h_“_H_h_ ¬_¬____h___u______w__$_“__________¶____Hífi_______________“_`_"U____„__ _
____I _'___' _-_____ '_`_ L_
____“___ „__“__
|_|_|___ I l|_|_L ___ '_| __I |__|__|_l|I_|_| _Ill_l___l__IldI I I
BA
_ _ _I_ '|.łI_l I I
vb V_ nu _HMH v_ FL H
5
V_ S T_ E Hm V_
B
_n¬_ nu _H MH V_ Fu H çuw _Mm___m_ā_d_
__F5______I_'____`"________T___[____',Jr_____ _'_
_v_=____________mą_ _
“__ _______“_____ _HM ___ ___“___Ę__“___I_h______ _m_“„________ _____ ________fi____r ____ h____ _“____ _____ ___ ____ __"H _______ __ __W __ _ `_fi_ _______M____J______„_____@______~Ł_¶hm_“_________WW _h_h_______ąåh__m__h_____w____@_ __¿____¬HfiM_ __"u_______ ______“%_ ___*____ “__ łfiý __________“uh_r“___“__*_ u_H_¿_H_" _“w______ __
_'_|'_l '_l|_
_____________ HH__“__ _________ M_Hn_____ _H____________h_____"______H H_"__F___"_*___"_____u__I___`_"H_“h__M_H__I______H_H_"_¬___H_____ H_ h
IIÍI_Í_I_____I ___I________ _ ______I_ _I____I_________________I_ _ II_ _
W ____"_ "__ „___ _a_r“____ 1___ “_ _____ ____ ___”_-_ww _"_ _`___________ __H _____ _*Ê __ __Pu ___ ____ _`n__ą“_„ _ _m_ _ _ '_
_mi ____ H____ W___ P___W_ “_MwJ___H __I%JE____ WPm$_I_ldmwI____“___ “______uw_ “_*______¶'____F"___ELU %___ w'____ WP__M¬w___wMMú__ '____|_ w__ _|_“__" ______1 ___________“__“____|__-_"“|_ _ _ _wl U__"__ ___ *___ _F _____ _1__u h“_"____dl¬ną__ ___ ___fl____ _"“_"________ __ „_¬“____ __‹'_“„”____ "____ _n¿__`_m_"u_ _ _ __¿¶U" P__ “_ _łJP __"__ _ń_HĘJ_ Ę “_____ W _hlń_ ____”_F L_____ ?¿__“W_H__W”"W_Ww_ ___p___wW¶_ ¿r_ __“_ ___“ _“l_” _ _ “„H_____ __Ê~____H_“„ _ _”Ł3* „_“_L_üfl _HM__________ „__”I__H__Űfifiřl Ę ____m_H__ ____ "¿_IW__”¬_I“&p_u h_$_N“_ä_____Ą w„___\_J ___H_W _„_ _v_____ü_¿____ _Ê_¬_hÄ_J__ŰJW __w"_ _ L_ _ wĘ fiúü ___1_____L1 w__m___ “_ ____ ___ _____v ¿___„__ ____H___¶____fl_T___“_¶_H__ _ _„___ “___________ ____ _“___L_äm%m_í _____“___ __________ ______ =m_ _h_u_ _ _ h_ h_'___ ____fl__ _______ _H_"____r F ______ __`__________ _'___”____b____ _n_P___r____"_dq`_ü `_fl _¬fl_ _ _ _ _ _
wfiämw whWfimH“l”_¶______ ____ ___E_l FH&_W M_q_*__ _Mb _dm _śhh I_mń„“uhwm_1_“_ __f_MMhH“"I____ h_Ű? Ę„mfl___*H1ăn__„u"__“MHfiuIfi__1fl__I_Hfiw__fW¿__Mm_m¿WHm_h Ę WIE ___ ____ ______¿Flńh_Ê h__“__ Ê __ flñ_L”___J_I_“„fl_w_hu ____mlUŃF`1“_:_m"%__I1hH_M_FM _Id_„gw 1I_____ M_múlJw_q$fl_WW “¿m____ % _____ __'_|_I___H_|J___|______h_|_|lH__ ___ __“_ W_H__“_“__ NmWW “H___ $___h_I ¬MW_P_Näf____ w_m_“_"___ ¬__fiw1__ ______ IüJF?¶_M_"__v_> ü_IN____ _Ę*h__________ wH1l___m__ m__“¿wI__¶F_ h“__ HJq_¿____ _“W____ ____ __ ______ H“;"_ Un '_ _“__ ______ `ł__ __h___ ____H___p_ ________“ ____m_H_ _um I__ E______h____"_M_____fl__m"____I_____ l________ mw“[__“_ hń____ m__5lI____ Ąh„“H___“r___ ëiu_*fi__ü _____¬Fñ„__ flI_Ę uœ_“l_"1_Ê ¬I__Í“_¿__“H *_W_ Ê__%q“ lym____“ ____ xE__ _W___ ā__ā_l _F å_Ę|I_I|ß _; I_ _| Ľ __H_*JT_ __w“Hm___¬_MJ_ __“__ _____n lM__„mfim __1H”_MH u_wh__fi1____“ „h__dj m”___¶_flŁHú\_W 1ÍI“__ Ÿ_Ah ____1___ “__ ____J _JUu flm__m_¶______ ___fl_ _m___“ _Ę„___ M„____“I____fi ___I___F___Th_I____I_____ “m_“___ _,__ h¬_L_¬p__“__"_" ¿M“T_ H“l____ I_FM_“_“dm l_“___¿wH__¬_ JW WE _L I __l____ __ _H____ _ _E53 ___fl ”_¬___“ ¿H____m_„_r”_zW_M_H_d__ ä“w_l _mww„ ____“mH_ _“ _ _ _ __“n____L_Ł___ w br___ ĘN_“__ _____ _______I_w1“___-_“____ “P_Fu_______\_ __B_____H __13% _w_____I»_I¬_¿__“ Hh“__________l__ _F__“_Ńm¿Im___Ńw_ _?U1ä__“_ :Ê_H __L_II"3_____Ir@_______Lq_:___h_IIlm_ ______ ___mufi ¿_Iv____“___ ___¬_Wm_“_n____ “_Ę __mwv___r____Ü_“ __“fiwl_N_“_U___¬“_ÊHW_Ią__“__¿p_üm¶lh_Ę____ _____H___ F____ü__w:_______ Ê ___“_ ___ _w_¬““I_____ ____ ”__;“¬L__I_P___Ę ______W_“__*§m___
“_ “_ V_m_ _ _ _ _uzu_ H__
_r______„_G I__u_äfl___ fl_N_____w ____ J¬____fi__“__ U_H_“_ñ_ _______ĘTT 'l____-'__-' __'_'_ _ _ _| _ lp___
“___ F!
Ę _“¬___ _ _| l_| _l I_| _ I_ ___
_Ęm___šHmz_
_ _w_¬mń%__ " w_u_m___ Êhmub _______m___¬ "_m_l d`|____n“w_m___ _"__" I__ __ _„___” _F u____IĄm_“_'1_Tfi_m_hEą__ _I__ _I_%_l¿m___ “____J_ _vÊHl___I @_ _'L _______L__ _"_________'______L________ ______:____ ___ ______L__|__J_______I________ ____1__|I_II___u_[__________I_____:“M_vå¬_ä%*%_ ~_P_m_! h“_P_mc “Mtv __å“__fl"_ _":_\_b___ ¬___* ____F_______ `_Üø*Ę ____ __“wi_ ___"_I ____________m___ _äh__±_“ :1_`_“_ _______| ____ ”____` ___l__“'h_I1_L_`__ ¿"_gl _“_ _____IJIÊ lb__\u____$-___ _“_ l@h__`_M____`_____ nfiIJ__"___“›___r _¬“M¿_ “l_`"_ _T_
_„H___“__ú ______ ”qĘ___“I__*M___M____ ________“_hI_$“¶„___n¬_HĘn_u„¶___Ifi¬hm_w_fl$ ¿_H__“W_ _
__¿_ N “T_ H_ L___HH _ ____ f_ u_ _$H_
_“__1_“_ __:__ \____ ________ I_____ __II¬ __"_ II __
_ |l_._I|'l_' |l'I_I|_._Jl|"I_' _ I|II_lI|l _
fi____ _“_fl____?__n__ m___L____m____ ___ßüüfi__m__%_____ __ww “ww _“_äm_ _ _ _ fi%“_ _ _¶_ _ ________'_`_E_ _ _ _n _
§ā% OÜHE UH_ÊEĘNÊŠÊNĘ EGNow ¿_HMÓÊŠ _mWEgg m_„NB O__Š ÊĄ: Hñmāüfim :Q_ __Ę _āĽ&fiāg _mā ___H _________ _||__'|_|l“| _| _l"| _|l||_ '_ _
M__mm_w_¶W___m_ _„F I_¬__ñ_ _%\__ _Fń__Hh__`___m_“F¶_¿F1_“__ _h“mëmfiu w_h__ I_`_dm_U_H_
__
_____'I-__fl¿___I _| "__ŚI___'__._____I___'I___P___'\ _ ____I_l_' |1_ \l|_
__
MNE_UĘ __M_ __š _______ ______ HH
+
_W____, _______"__________ ______"__________ ______ @_______i _@___. ____________ Ü______ ___ @_________ __Fa r__¿____¬w___¿ ____“____4fl_____ _¬_ _A_ _ _¬_ _ _ _ "___ “___ _ _"___ _______ _“_ _1___l"__ _ _I _ _ _ _ ¬_ ____ „_ _w _ d_ __Ą_' U_______ _fl" _________ ¬___________¿______ h“_wr_____________ _ _ __h_____ ____ ___ ________ _“_____ ____"_____ _______________H_____ ___b ________ _______ _ ___ _____ _____ _______ _ _______” I ___"___________ _:___-_¬_____ ___ _______ ______ _________ ___H___ _ _ ___ ___ ___ _______
__.__._
____fl _h“l_ _h_“_ _
_ U Mm_ w _ _w __;__M__N______ _ __“_ Ľ_ ____H_ _” “____flm_______hI”_`___“_M___"__m__UHL _
____ _ _____`__ ___ _ fl_ _“_ _ _ _“ _ ___ _ ”_ _ ___________ _ __ _“-m`___“_ "H_ h_H”U__%“$% __q_ _ _H_”_" _¬_“hm Í_ ,H_ ____ ;__ “_____ m________ _ _ __`________u_____ _ ___ _“H_ _ h_J_ "_ _ĄHĄWñm_____bń__1____" „__” m__ "__" H_¬m_”_ E __:fl__"_____¿_„_“ ____MT_ __ _$Uw___ H_ "h_ "H_ _ “_N __Ę__ I_____I______-_-¬___ _____ Il“_ _ I__________h _ "__“ ______ _ _u_“__"_ _ ____ ___H _____u_ _ _ _ ______U________“__ H_d“„#_“_"_ _¿_ _H__” _ __MW__ _h_ _ _h_ _ „_ _ _ _ _PH_n_H“_„______“J___Für__”____h__n“_„_ qÄ ___ __ _____H__ ____ __H___ __H____„W_ ______”___v__ _ m_u _ w_u_ _“ _¶ ___ _ _m_H______H___j ______ _______ I____w____h_ _“____ _„__“__ _fi_d ___"U “_H________ “_ _„U__HH“_“_ _ _____"_ _ _d_nI_____“___f_T__” _ _ __ ____H "V"____“_*___ „_Ű___ _____ ___ _ _____ ________ _____ _____ _*__ _ _HH _ ____ _ _ _1_ _ _ _ __________¬_I_ _ _;____:_ ___M__ _ _ _ _ _ _ _ m__n_ _____ _____Im_“_qm__”_ ____H ¬____H __r_________ _"_ _" ___"“_ _ __ _ _____ __ fl__w____“_“_______________W____________-__m_“_“___ _ _ _w _ _ _ H_ _ _ _“mą ____„_„_ _ _¬ _ $_ _ _ú _ h_ ,U "_“_ ___ _____l _ _ ____ _ _ __."__Ü“"_
_ ____________ __ ____ _ _ _ ____
1_
______
“__ ___I'_____l______ __________I_
U_ _ F______J_“_ F_ _ _
_r _ ___P____._|c___I _]
_“_____"_I„_ ___ ___H___Í _ ___ ____¬_›_ ___________ __
I I'||||||||I|l||l|_ '_-l.l.|I|'|| l|l|l| l_lJ_I|l I-_rll|Il|_`|l_ń|||_
_______u_
_|_ _ l_ |l_J' |_I _|"Jl_ |_
u__*gg mă_šøzwarg _ mzāmr u_Ê m_ wm_u$m m_3m_ _g_ 3_gflšnšm H_äm_ _H_EN “_m_fl¬fi__Ê _ š__““ÊN6En_mŠ___ _“_ _Ű_u_“_E_m¬_u¿_Š Emäm _Ê_ flgüāå _*EQ_flmñflm ăwäuumuš n_š__m¬“h__E___“_ ʶH_%mam __w_E_fiF_=M__3H__š_“w__Ę_ _m_ _' _Ê ___u__Ü“_HmE ¬___“gw _mN”_tUhm_M ʧā„E5 ¶_Eu_ _Êăuš ¶šE_fi_m_fiü_m_*aa __Ê__ _____ _ _ W__“____w_ _H_ _U_”%UE_m_“__Êv__ Oå_*Ê_H_Man¶F_uMmn__
____ ___ _________ _ _ _ “_
m_ w_8_H__N_ _ E _m _xmå _mn _“__*m_V_ _“ _ w_m_ "_ ___ |8___l____H_fl|l__¬ü____I_Il_____“I|_H___l_I _ m__*ua *mMH _üfimāg _ _3 *BEE _uguz _*E_Ęfl_Tfi_ _ā3m___ :b~___“_Ê_“__ _35_E_m__nŠ_ U_ uEE II__ ____I ___“:__1_“__H_______“______q__ m“h_±_L _ u'
____I _
Mmšüz E mam _EE3 v_*DE _Nam w_ __HH _ E__
_ __“_Š Eëā_ëm_z _ _”D_ _ _ _H
|II_ I_ -__II'*L__
_(Ę_' ___{_ __F__1__¬_ _ __|_L_|_Lü_____r[___I_-l'_|__ĘI_l'_L1_____
W_Š_ 3“_ ā_____ ąEä__ œ_ Hü_mr¿M_3_H __ _ _¶_ ¬ ___
n_ ___ ______ _______ ____ _"______ __“__ _______"____u_¿__ ___%___________H___ _ ________H_" _ _"_ _ _ _ I _ _ _ _ _ _ _
H___1_____¶m_åä“__w___~"_u _fl _ _ _
|_| | |l'|'| | _|'I|lI'||l| | ¦|`||P||||l
Ĺ_______ ____r___Ê _I_______TT|_I_PI_h_| _ _ ßh
_______ _
_| _'_I I_|__l I|_l |_l'-_|I l_
0% ____:_wu____“ŁH_ _F_ _ _ _Il'_____|__1I“_”lfl___I_IiIM_|H____|
__'______[_:_.___|[¬_ _
IIIIII_'|Ill||||| l'-I I IIIIIIIIIIIIIIIl l _|l l|l"_llfld |l| _
I__________ ____________ ___' _" _„___ _I _ _ 1_m_ _"I
____II _
_ _ ___
_E_*Ê
__5_____ _ „_ _ u_E_&_n
____ I_____¿__ ._ _ v_I _ _ _ _ T _ _|I_' |l_I|' _|lI| |_ _
Q_
E_H _.__ 1____| 1___“`_:l_“_
v_ __ _ _ _ _ _ _h_ H_”_ _ _ _M_ _ _”_ _ M"___ __w_ü___
_________. _______ _
T_; _ _ _ _ ___h___ H_hH_ ___ _ ____“M_ ____ “_ _ _ m_ 5.. ____
____”___$ _„__ _ _ _ "_ _ _______Ł
_"_ń_m___ _____
“_ _
W
ä
_ ____ _ _ w_
__ __
_
__ 1
____
__w _
__ __
P o n s 'ra \¬=:.-I' Y e A 2; o A N rc;
'II
|' .
.' .'
|' |`
'l
F-_.í_,,_¬_._í-._. ________-_-________.______
_ __
_
_
_
_ _
|"'-H:-'h
hah;
___.___-. ___ _ ___ _ ______ -i- -1. ....___
.
¿_ ¬_. _. ___-__ .j ___T_________ I3 und" |I 1' I
_l |
,'
| |
Rodzaje kwerend wykorzystywanych ^ do przetwarzan|a danych
_._.
111-u-1.1-1m.-_-.Å-_----_-c____------_-_..___---._.__
|
Í' ,'
f
__
_L
___-__--¬
._.
.--_----_..__._..-
ZAGADNIENIA
I Pojęcie kwerendy i jej rodzaje (perspektywa, kwerenda funkcjonalna) I Kwerendy krzyżowe :|1-i-¬u__------'
._-_--_---.'._------------
_--_-------_-.._--------.
._--_--_---._
---------
_.-..__.__-_-_
...__-
--
_.._-----
____..-
--
_-.._--_- . _ _ _ _ __--
-
____-------.
.___-__--.
._._._-_--¬_|._.___.- ---
-
_
l'
Kwerenda (Query) jest zapytaniem skierowanym do bazy danych. Termin ten pojawia się
głównie w zagadnieniach związanych z bazą danych Access. Ze względu na czynność, jaką kwerenda ma przeprowadzić, wyróżniamy różne typy kwerend.
I'
| | | | |
r
_I
J I
|' I
. r l
jeden z podziałów kwerend wyróżnia dwa ich typy: 1 perspektywę, 1 kwerendę funkcjonalną. -
Perspektywa określana jest również mianem kwerendy wybierającej, ponieważ do jej
r | l | | | |
zadań należy wybranie danych zgodnych z zawartymi w niej kryteriami i prezentacja tych L danych. W wyniku tej kwerendy wyświetlana jest zazwyczaj tabela, przypominająca arkusz Ê kalkulacyjny, umożliwiająca jedynie prezentację danych (bez możliwości modyfikacji). ¿
_¦ .' .' r |
Kwerenda funkcjonalna to zapytanie, którego zadaniem jest modyfikacja, usuwanie, l wstawianie i reorganizacja danych. Dlatego nazywana bywa instrukcją operowania dany1ni.W obrębie kwerend funkcjonalnych wyróżniamy kilka ich rodzajów:
l |
l _I 1' J
I'
| l | l
r 1 Kwerenda modyfíkująca
l _ ',
jak sama nazwa wskazuje, kwerenda ta dotyczy modyfikacji danych w krotkach. Wyróżniamy cztery kwerendy modyfikujące: usuwającą, aktualizującą, dołączającą, tworzącą
1' I I
|
I
„¦ .I 'Í |
tabele.
1 Kwerenda usuwająca I, jest to zapytanie, które w efekcie usuwa w całości wiersze znajdujące się w jednej tabeli 5 bądź kilku tabelach, spełniające określony warunek.
! ¦ I. I'
= 1 Kwerenda aktualizująca F To zapytanie, które w efekcie modyfikuje dane znajdujące się w jednej tabeli bądź kilku ¿
tabelach. Dane znajdują sie w krotkach spełniających warunek zawarty w kwerendzie.
| _I
'Ê
Ê 1 Kwerenda dołączająca ¿ Urnieszcza zestaw rekordów z jednej tabeli lub kilku tabel w innej tabeli lub kilku tal
belach. F
1 Kwerenda tworzące tabelę
= l
jest to zapytanie, którego zadaniem jest utworzenie nowej tabeli z danych (lub części danych) znajdujących się w jednej tabeli lub kilku tabelach.
I | |
i
I |'
1
-Ê-Å
I
.r._. -. . . -. .-
____
_
.,_,__¬_
__.,_`__,_,___„., _,__
__-,___ „___ __.__
__
_
_
_
_
_,__ .í¬____?._ií_í___ ___
Å
1
_1-1
-|-1-1'
n.-1.1- -
-u-1--u-vi-í
_„_._ -_
I I' I
| I I' Í
I I.I' | I F
;._-_ _
J ll l| _I .' I .I | ll I
ĹI
Kwerenda krzyżowe jej zada niem jest wyświetlanie zliczonych wartości z pól oraz uporządkowanie tych war-
tości w kolumny i wiersze. Wynik kwerendy krzyżowej ma budowę zbliżona do tabeli, ponieważ składa się z wierszy i kolumn.
¬___
J I |
l
|| ,. Í.
I. Co to jest kwerenda? jakie rodzaje kwerend wyróżniamy? 2. Czy kwerenda usuwająca usuwa całe wiersze? 3. Co to są kwerendy krzyżowe?
I 'I I
SPRAWDŹ sv:/o]Ą WIEDZĘ
I
'I r I
Il. Podstavvy języka SQL 1 Strukturalny język zapytań SQL
1 1 1 1 1 1 1 1 1
Strukturalny język zapytań - charakterystyka składni Klauzule strukturalnego języka zapytań Funkcje w bazach danych Instrukcje sterowania dostępem do danych Rozkazy języka SQL, tworzenie tabel i operacje na tabelach, wyszukiwanie informacji i ich zamiana Zapytania zagnieżdżone (podzapytania) " Złączenia i widoki Wyzwalacze (Triggers) Transakcje, blokady i zakleszczenia
"54 _ li aazs'unnycyi1srsrsuy saztnanrcn IŹI
_
,L Stru kturalny język Ę zapytań SQL
j
IÅGŁDHIEHIÅ
l Historia powstania strukturalnego języka zapytań (SQL) I jakie istnieją podgrupy języka SQL? I Definicja pojęć: selekcja, projekcja, :łączenie i suma
l
i
Początki SQL sięgają zeszłego stulecia i Firmy IBM, w której powstał język SEQU EL (Strustursd English Query Lnngnagej. Został on rozwinięty i do dzisiaj znany jest pod nazwą SQL jātructursd Qiurry Language) - strukturalny jęqfk zapytań. Typowy SQL to język nieproce- ' cluratny należący do grupy języków deklaratywnych. 'Wyrażenia SQL nazywane są kweren- l dami. Pozwalają one na wykonywanie takich operacji jak:
j _ (
1 uzyskiwanie informacji. modyfikowanie informacji dopfiywanle (wstawianie), 1 usuwanie. 1 sterowanie danymi.
5
I
|
Strukuiralny język zapytan ze względu na czynność (funkcję), jaką dane zapytanie ma wykonać w bazie danych, dzielimy na następujące podgrupy wyrażeń: Tabela 13.1. Podział strukturalnego języka zapytan na podgrupy wyrazeń _
' DD
.__
Å i
jEtD
Data Definition Language
_s____ .
___
DM
jly'|[II
í
1
EREATE, FŁLTEH, DRÜP, TRUNCATE
._
Data Manipu-
_
_
.j
ocr Å
DQL
-í-Ź
;so _
jI'_'
|
Å
_
____
INSERT UPDATE
Data Control Language í
Data Query Language
.
___-.
_|
l język manipulowania danymi '[jl"."lDj służą-
cy do wypehiiania bazy danych, usuwania informacji i modylikowania danych.
mi
GRANT, DEN? | HEVÜ HE _:_
-
język definiowania danych (jDDj stosowany do tworzenia schematu danych. Definiuje strukturę danych. l
Iation Language ` DELETE I--Å
i
i
_ í
SELECT
:_
- Ź-
-
-
-
:_
- -Å
'-I
' język kontrolowania danych {ji{Dj sprawuje kontrolę nad transakcja mi ± steruje nimi. --.Å
mi
Å
í¦
l język zapytań jjłj, ktorego zadaniem jest l pobieranie informacji spełniających okreI Šlonewarunki.
TEL
j5P
CÜMMIT,
język sterowania przepływem USP) danych j
l tion Control
Transac-
RÜLLBACH
(kontrola transakcji).
i Language
SAVEPÜINT
st¬.'nsrr~.wr języka sol 1
.
|jfi5
_ I
|
I-I
I
Podczas pracy z bazą danych zachodzi konieczność wydobycia określonych informacji, zwłaszcza takich, które spełniają pożądany przez nas warunek. Poniewaz zmienna relacyjna jtabelaj ma dane pogrupowane dzięki atrybutorn (kolumnomj, mozemy na takich zbiorach danych wykonywać operacje. Na początek trochę teorii. Dperacje, o których mówimy, przedstawia się za pomocą operatorów aigebry relacyjnej. Üperator taki na wejściu pobiera argumenty' będące relacjami, natomiast zwraca relację wynikową. Üperatory algebry relacyjnej przedstawia tabela.
, , . _ E _ ¿ l
Tabela ' 13 . 2 . Ü peratory algebry relacyjnej
I I Selekcja
5
symizai 6
Š Projekcja
j'|`
I Złączenie
pq
Suma
l = l
U
13.1. Selekcja
*
Teoria selekcji zostanie objaśniona na podstawie praktycznego przykładu.
_ j
Wyobraśmy sobie selekcjonera druzyny piłki nożnej. jego zadaniem jest wybór zawodników spełniających określone kryteria. Przyjmijmy, ze kryterium selekcji
I 2
będzie wiek powyzej 13 lat. Matematycznie operacja selekcji będzie miała postać: ZÊWÜDNIĽT
` I
5
M l
ijanek
3
j
Ü
i-ieniek
22
4
Kornel
34
5
Wojtek
l
Ü Wiek :- IE jżawo-dnicyj
, “
Üclzie:
=
i-
'
ą
Warunek selekcji
25
¿ “
' -
j
E
Tadeusz
43 _
5ElEl 18; W efekcie otrzymamy wynik:
sj.
~ _'. ¿ Wynik działania selekcji na tabeli zawodników w bazie danych PostgreSQl_
Nalezy pamietac. że zapytanie ltcniczymy, wpisując '/.nak średnika ;.
13.2. Projekcja F1'r‹.'›j‹:l-;cja nazywana bywa rownież r.zot›.›m i możemy ją zdefiniowatf jako wym: L;=:.~i›_mm. Operator projekcji na wejściu przyjmuje nazwy kolumn. a na wyjściu zwraca ich za'.~';i:t‹;›scÍ. Możemy prześledzić to na wcześiiiejszyiti przykładzie z selekcjonereni piłkarskim. Wy'ol›raźiny sobie sytuację. że selekcjoner będzie potrzebował listy wszystkicli zawodników wraz rz l.|!>l1 W h R A B A Z D A N Y C H
r
~ PRZYKŁAD 36.2
Aby czytelniej przedstawić omawiane zagadnienie, posłużymy się przykładem Uczelni, która wyznaczyła studentom egzamin dnia 25 VI 2012 i rejestruje godzinę rozpoczęcia i zakończenia egzaminu każdego ze studentów. Dla studentów, którzy do egzaminu nie podeszli, w kolumnie zawierającej czas podejścia do egzaminu słuchacze będą mieli wartości puste NULL, ponieważ nie zgłosili się na egzamin. Rozpatrując wydajność bazy, nie możemy pomijać zagadnień związanych z jej integral nością. Integralność bazy danych gwarantuje, że dane umieszczone w bazie mają formę odpowiadającą rzeczywistości i spójną logicznie. Typy integrainości bazy danych: • Integralność encji Sprawia, że wewnątrz tabeli nie mogą wystąpić dwie identyczne krotki. • Integralność domeny Sprawia, że wewnątrz kolumny mogą wystąpić wyłącznie dane, których typ jest taki sam jak zdefiniowany typ kolumny. W kolumnie, której typem jest boolean (typ logicz ny), nie możemy przechowywać ciągów znaków typu string. • Integralność referencyjna Opiera się na zachowaniu powiązanych informacji w tabeli połączonej za pomocą związku. Aby zachować integralność bazy danych, należy przestrzegać kilku prostych i ważnych reguł: • Gdy w bazie danych wykonujemy transakcje zapisu, aktualizacji i kasowania i jeśli któ rakolwiek krotka naruszy reguły integralności, baza danych musi przerwać taką opera cję, zwracając błąd. • Integralność referencyjna zapewnia, że związki jeden do wielu oraz wiele do wielu są możliwe do egzekwowania. Oznacza to, że każdemu z pól klucza obcego odpowiadają pewne wartości w tabeli, w której jest on kluczem głównym. Aby wymusić zachowanie reguł integralności, stosuje się ograniczenia. Ograniczenia są szczególnie ważne dla aplikacji serwerów WWW, gdzie pozwalają wy muszać kontrolę serwerów baz danych, która ma na celu zmniejszenie obciążenia genero wanego przez aplikacje klientów stron WWW. Zachowanie integralności danych pozwala uchronić bazę danych przed błędnie prze prowadzanymi transakcjami i brakiem wymuszania integralności referencyjnej. Integralność danych pozwala na użycie schematów postępowania, które chronią dane przed uszkodzeniem podczas zgodnego z założeniami funkcjonowania bazy danych. Celem takiego postępowania i audytu jest doprowadzenie do sytuacji, w której bę dziemy mogli odtworzyć bazę danych w każdej chwili, nawet po nagłym, niespodziewa nym odcięciu zasilania. Jeśli nie jesteśmy w stanie odzyskać bazy danych lub odtworzyć jej z kopii, oznacza to, że procedura audytu oraz projekt bazy danych nie przebiegły poprawnie. Aby upewnić się, że podczas pracy nad zachowaniem integralności bazy danych dołoży liśmy wszelkich starań, warto rozważyć kilka dodatkowych możliwości działania: • Zautomatyzować proces kontroli integralności przy zachowaniu konfiguracji, która po zwoli na wykrycie uszkodzonych, niepoprawnych danych mogących pochodzić również z błędów oprogramowania lub sprzętu.
286
B A Z Y D A N Y C II I S Y S Więcej ndstronię :•Www.ieboak4all.pl
• Warto kontrolować przydziały danych znajdujących się w bazie danych (rozważyć zasto sowanie indeksów wszędzie, gdzie ich utworzenie podniesie wydajność). • Niezwłocznie przystąpić do naprawy nawet najmniejszych problemów wykrytych pod czas testów integralności bazy danych. Czasem może zajść potrzeba wykonania ww. czynności w trybie bazy danych „single user". Szczegółowy opis stosowania tego trybu znajduje się w dokumentacji PostgreSQL
Związki pomiędzy tabelami bazy danych Związki pomiędzy tabelami bazy danych można poznać po tym, że jedna z tabel ma klucz obcy, który w drugiej tabeli pełni funkcję klucza głównego. Projektowanie powiązań mię dzy tabelami ma na celu wymuszenie integralności referencyjnej. Oznacza to, że związki pomiędzy dwiema tabelami gwarantują, że nie można do jednej tabeli dodać rekordu, jeżeli nie będzie powiązanego z nim rekordu w drugiej tabeli, W przypadku relacji jeden do wielu pomiędzy tabelami A i B dla każdego rekordu w tabeli A może istnieć wiele powiązanych rekordów w tabeli B. W praktyce, jeśli posiadamy np. dwie tabele Klienci i Towary w ba zie danych sklepu internetowego, dla jednego klienta może istnieć wiele rekordów z tabeli Towary, ponieważ dokonując zakupów, mógł zdecydować się na więcej niż jeden towar. Wśród związków pomiędzy tabelami wyróżniamy również związek wiele do wielu okre ślający wielowartościowe połączenie obustronne. Aby zobrazować taki typ związku, można posłużyć się tabelami Dzieci i Rodzice. Każ dy rodzic może mieć więcej niż jedno dziecko, jednak aby znaleźć się w tabeli Rodzice, trzeba mieć minimum jedno dziecko (w przeciwnym razie nie jest się rodzicem). Każdemu dziecku w tabeli Dzieci odpowiadać będzie również więcej niż jeden rodzic. Określenie powiązań pomiędzy tabelami Dzieci i Rodzice należy przedstawić zatem jako związek wiele do wielu. Klucz podstawowy to kolumna lub kilka kolumn, które w połączeniu unikatowo (jedno znacznie) identyfikują każdą krotkę. Dzięki wyznaczeniu klucza podstawowego mamy możliwość odwołania się w unikatowy sposób do każdej krotki, co sprawia, że unikamy problemów, które powstałyby, gdyby dwie krotki były wyznaczone jednakową wartością lub mogłyby się powtórzyć w jednej tabeli. Klucz obcy nazywany jest również kluczem odwołującym, ponieważ umieszczony w ta beli, w której jest kluczem obcym, odwołuje się do drugiej tabeli, w której pełni rolę klucza podstawowego. Klucz kandydujący to pojedyncza kolumna lub zestaw kolumn, który może zostać użyty jako klucz podstawowy, jednak nie został wyznaczony jako klucz podstawowy. W praktyce są to atrybuty (kolumny), których użycie jako klucza głównego dopiero rozważamy. Klucz kandydujący powinien być unikatowy, nie powinien zawierać pustych wartości NULL ani się zmieniać.
Ograniczenia Klucz obcy określa, że dane w nim umieszczone muszą zgadzać się z danymi w kluczu podstawowym tabeli powiązanej. Klucz podstawowy nie zezwala na wartości NULL, podobnie jak klucz obcy. Dzięki upewnieniu się, że klucze podstawowe i klucze obce mają prawidłową konstruk cję (nie zezwalają na wartości NULL oraz są jednoznaczne), możemy zaoszczędzić prze strzeń pamięci przeznaczoną na przechowywanie danych.
Więcej na stropie: w,ww,^qol^4ąllp^ w E R Ą B A Z D A N Y C H
Wzrost wydajności jest powiązany z uporządkowaniem danych, co zapobiega zbęd nemu rozrostowi danych i duplikowaniu przechowywania informacji uporządkowanych w bazie danych. Ograniczenia to reguły definiujące, jakie darie są poprawne dla pola kolumny, np, jeśli kolumna jest kluczem podstawowym, to ograniczenia nałożone na nią określają, że nie mogą powtórzyć się w niej takie same wartości oraz dane wpisywane w kolumnie nie mogą być brakiem wartości NULL. Klucz podstawowy jednoznacznie identyfikuje encje (wiersze) w tabeli. Klucz obcy to kolumna (lub zestaw kolumn), której wartości są takie same jak wartości klucza głównego (podstawowego) w tabeli powiązanej. Klucz kandydujący ma pola, które się nie powtarzają (są unikatowe)* i jest rozważany pod kątem użycia go jako klucza głównego, Klucze kandydujące typuje się w celu wybrania spośród nich klucza głównego.
Integralność Bazy danych weryfikowane są pod kątem integralności, tj. stanu, w którym wartości da nych przechowywanych przez bazę danych są prawidłowe, właściwie przechowywane i utrzymane. Jeśli zachodzą zmiany w obrębie danych, powinniśmy dysponować systemem, który wykona zmiany danych, zachowując ich poprawność, nie dopuści do utraty danych oraz przechowa je dostatecznie długo. Integralność zapewnia, żc przechowywane dane są pra widłowe. Integralność wymuszana jest za pomocą reguł oraz ograniczeń nakładanych na bazę danych.
Integralność encjl Zachowanie tej reguły wiąże się z ograniczeniem nakładanym na tabelę określającym, że w obrębie tabeli nie mogą wystąpić dwa identyczne wiersze. Integralność domeny (integralność dziedziny) oznacza, że w obrębie kolumny muszą wystąpić dane. których typ zgodny jest ze zdefiniowanym dla kolumny typem danych. Oznacza to, że gdy podczas tworzenia kolumny zdefiniujemy jej typ jako boolean, nie bę dziemy mogli przechowywać w niej ciągów znaków będących np, nazwiskami pracowni ków firmy. Zgodnie z regułami integralności domeny, dla nazwisk będziemy potrzebować np. typu Varchar o wielkości uwzględniającej maksymalną wielkość nazwiska. Integralność bazy danych zapewnia, że forma danych jest spójna. Integralność referencyjna oznacza, że tabele powiązane mają powiązane informacje.
Problemy z integralnością Problemy, które związane są z zapewnieniem wysokiego poziomu usług dostępu do bazy danych, dotyczą: • szybkości działania bazy danych; • szybkości łącza, jeżeli dane dystrybuowane są drogą sieciową; • problemów z transakcjami zbytnio obciążającymi system oraz dużą liczbą użytkowni ków systemu zużywających zasoby systemowe; • rozwiązaniami oraz projektem niedostatecznie przetestowanym. Pierwszym narzędziem, pozwalającym zachować spójność danych, jest zachowanie reguł integral ności referencyj ne j dzięki ograniczenie m . które nie dopuszczają do zaistnienia
B AZY DANYCH
i
SYSTVBW3r'n$9tr^hi®vKVW^%63ofc|k4all.pl
danych niepowiązanych z danymi powiązanej tabeli (klucz podstawowy, klucz obcy), W ta beli będącej w związku nie możemy dodać krotek, jeśli nie będą miały odpowiadających im krotek w tabeli powiązanej. Integralność danych może być naruszona przez błędy wprowadzania danych. • Błędy importu i eksportu danych to wirusy, malware, robaki sieciowe i inne złośliwe oprogramowanie. • Błędy sprzętowe to np. błędy dysków, • • • •
Metody przeciwdziałania: Kopie zapasowe. Zabezpieczenia związane z dostępem do baz danych oraz pomieszczeń, w których znaj dują się serwery z bazami danych. Stosowanie ograniczeń wprowadzanych danych mające na celu zapobieganie umiesz* czaniu błędnych danych. Ograniczanie możliwości wprowadzania danych do wybranych typów, np. ® ograniczenia NOT NULL; o ustalanie wartości domyślnych; • stosowanie unikatowych identyfikatorów, tworzenie autonumerujących kluczy głów nych, aby jednoznacznie zidentyfikować każdy wiersz tabeli i zyskać pewność, że war tości klucza głównego pozostaną unikatowe.
Standardy Na etapie projektu warto używać określenia złączeń w całej formie, np. inner join zamiast samego join. Taka praktyka ułatwi tworzenie projektu i jego optymalizację. Standard kodu określa, że dla wszystkich słów kluczowych SQL powinno się stosować wielkie litery, np. SELECT, DROP, ALTER, UPDATE, DELETE, natomiast dla identyfika torów (nazw tabel, kolumn, baz danych) - małe litery. Nie jest to jednak wymóg, a jedynie zalecenie m ające ułatwić czytelność kodu oraz unikanie kłopotów przy użyciu kodu SQL w różnych SZBD, które wielkość liter mogą traktować w specyficzny - określony przez ich twórców - sposób. Zalecenia dotyczą również nazewnictwa kolumn. Klucz główny tabeli powinien zawie rać ID - ułatwi to rozpoznanie klucza głównego w systemach, które podczas odczytywania zawartości tabel nie informują o tym użytkownika. Każda z tabel powinna mieć klucz główny. Powinno się unikać stosowania spacji w identyfikatorach (nazwach kolumn, ta bel, baz danych). Jeśli zachodzi konieczność oddzielenia wyrazów w nazwie kolumny, np. „Numer Klienta", lepiej użyć postaci numer_klienta lub id_klienta. Taka konstrukcja ułatwia czytelność i pozwala uniknąć stosowania spacji w identyfikatorach. Tworząc funkcje i procedury, powinniśmy pamiętać o ustalonej konwencji w stosowaniu identyfikatorów, co ułatwi czytanie kodu nie tylko dla autora programu, lecz także dla po zostałych członków zespołu programistycznego. Należy również unikać stosowania słów kluczowych zarezerwowanych w języku SQL, np. Datę. Ich użycie jako identyfikatorów może powodować problemy.
i h l'."t 1. A Cl "r H ii ii "'.'i." l' |¬' .-". J- A Í' l_]'r"r i"¬l `“r`tÍ i-i
Í Indeksy
IÅGÅDHIEHIÅ
I Definicja indeksu
I Zasady stosowania indeksów I Modyñkacie danych w obrębie indeksów I Iależności między indeksami e podnoszeniem 'u›"ydajnośt:i
Częstą praktyką 'wykorzystywaną w celu podniesienia wydajności baz danych jest stosowanie indeksów. indeks najprościej mozna zdefiniować jako strukturę danych uzywaną do kojarzenia wartości z wierszami przez bazę danych. Zastosowanie indeksu ułatwia znajdowanie wartości i dzięlci temu system baz danych nie musi przeszukiwać całej tabeli. Indeksy nałozone na atrybut organizują dane, dzięki czemu operacje przeszukiwania wykonywane są szybciej, gdyz zmniejszają ilość o-dczytywanych danych. Działanie indeksu najczęściej tłumaczone jest na przykładach ksiązki telefonicznej. Zorganizowanie danych przez alfabetyczne uporządkowanie nazwisk orm umieszczenie spisu treści przyśpiesza odnalezienie abonenta- Zainteresowana osoba sprawdza w spisie treści przedział stron dla danej litery alfabetu i znajduje abonenta szybciej. niz gdyby byla zmuszona przeglądać kolejno wszystkie strony ksiązki telefonicznej w poszukiwaniu interesującech ją nazwisk. Indeks jest dodatkową stmkturą danych przypominającą skorowidz. Gdy indeksujemy np. kolumnę zawierającą nazwiska, mozemy ograniczyć wielkość indeksowanych pól. powiedzmy, do trzech pierwszych znaków. Taka praktyka powoduje wzrost szybkości indeksowania pól. a co za tym idzie - optymalizację szybkości realizowania zapytan. Stosowanie indeksu wymaga zapoznania się z clokumentacją DEMS, której zamierzamy użyć, poniewaz nieumiejętne uzycie indeksów moze nie tylko nie podnieść 'wydajności baz danych, lecz takze niepotrzebnie przeciązać system. powodując spadek wydajności. Poniewaz większość systemów baz danych automatycznie indeksuje klum: główny, praktyka nakładania indeksów na klucze główne tabel świadczy o braku elementarnej wiedzy. tladmiarowy indeks powoduje większe straty spowodowane niepotrzebnyrn obciązeniem systemu. Należy pamiętać, ze mechanizm indeksowania nie ma określonego standardu. a sposób jego realizowania w róznych systemach bazodanowych zalezy od rozwiązań technicznych przyjętych przez twórców tych systemów. Indeks jest strukturą, w obrębie której dane są posortowane. kazdorazowa modyfikacja danych w obrębie indeksu pociąga za sobą konieczność jego aktualizacji (ponownego posegregowania danych). W związku z tym zalecane jest świadome i ostrozrre korzystanie z indeksów, szczególnie tam. gdzie ich nakładanie na atrybuty moze spowodować większe straty wydajności systemu niz zyski. Podobne zjawisko spadku wydajności systemu ma miejsce, gdy indeksy nakładamy na kolumny. których wartości kolejnych krotek to przykładowo bardzo dlugie ciągi znaków. System w momencie indeksowania kilku tysięcy wierszy'
-
I
i
t Z "
|
l
a.-'tzr o.-'t.'-irrzn | srsrt-:rur s.-'tz oai-l'r'r':H
o sporej długości. n p. yarchar jiüüj, i ciągłych potrzebach aktualizacji indeksu związanych I z licznymi zmianami. moze ponieść większe straty wydajności niz w wypadku. gdyby indeksowane byly niewielkie ciągi znaków lub cyfr. Stosowanie indeksów nalezy rozwazyć, gdy mamy do czynienia z kolumnami, w któ-
rych obrębie dane mogą się obficie powtarzać. Klucz indeksu moze w takim wypadku wskazywać na wiele rekordów, co spowoduje. ze korzyść indeksowania danych w takiej kolumnie będzie znikoma. I ndeksów nie powinno się stosować w tabelach o bardzo niewielkiej ilości danych. w których odczytanie danych z uzyciem indeksu jest bardziej kosztowne dla systemu niz wykonanie tej operacji bez indeksu. f `
Stosowanie indeksów powinno być poprzedzone zebraniem informacji z zakresu pracy
.
bazy danych, zapytań, ich częstotliwości i obciązenia systemu. W systemie MySQL i Post
= j a
greSQL mozliwe jest rejestrowanie zapytań. których czas wykonania pmekracza pewną zadaną wartość.
I I
long'_q|.rary__tima
| 1og_min_du:cation_ata.t›am|ant:
¦
= ¿
Üha narzędzia są bardzo pomocne podczas optymalizacji pracy bazy danych. ponie-
| '
waz pozwalają określić nie tylko, jaka fon'na zapytania SQL najbardziej obciąza system,
' j
ale przede wszystkim zapytania, które mogą być zadawane z wielokrotną częstotliwością. W tym drugim przypadku mozemy łatwo stwierdzić. czy nałozenie indeksu na określony
j
atrybut przynosi istotny wzrost wydajności. Podnosić wydajność mozemy równiez. sto-
_ y | = l . .
sując taki kod aplikacji. który będzie nas inforrnował o tzw. wąskich gardlaclt (fragmenty kodu programu zuzywające najwięcej zasobów i potrzebujące na swoją realizację duzej ilości czasuj. lstome podniesienie wydajności bazy danych mozna osiągnąć przez przeniesienie indeksów do pamięci podręcznej. Aby utworzyć indeks. stosuje się polecenie SQL: CREATE IHDEI.
I
sraawoz swoją wrsozą 1. Podaj definicję indeksu i wyjaśnij. jakie zastosowanie mają indeksy w bazach danych. 2. jakiiżoi zasada mi naleą' się kierować podczas stosowania indehów? 3. W jaki sposób indeksy podnoszą wydajność bazy danych?
| Å
Å
Å
Å
--
Å
Å
Å
Å
Å
Å
Å
Å
Å!
ÅIÅ
i i
j|
I
l
ll\l.“~'ll`,f *'.lf1.ilf\“'-[i¬tlJ'tř|'¬.`\l1\.-"'IÍi\l`“-llitll .. Ĺ.`. Š l "' 1"' ..f- "` .' "_`Í
__
1
.
1-
-
-1
_.
'Í
.
ł-'IL
I |fldel(Sy
l' PostgreSQL
*
=l zAGA|:m|E|'~||a
t
1 I I 1| I
Zasady administrowania uprawnieniami przy użyciu pgAdn1inI|| Definicje indeksów i ich typy: B-tree [B-drzewa), indeks haszowany, indeks GiST, index GIN Identyfikatory indeksu Usuwanie indeksów Rodzaje indeksów: indeksy wielokolumnowe, indeksy nakładane na funkcje, indeksy nakładane na wyrażenie, UNIQUE, indeks częściowy (partial index) 1 Zasady usuwania indeksu za pomoca narzędzia pgfltdminlll ._
..
.
_
, I _ = ¿ 5 l
.
j .= _s j i
_ -_ ._ _¿.
J |
,_ |
I
| .
I
I
indeksów uzywa się w celu zwiększenia wydajności bazy danych. Zasada ich działania podobna jest do indeksów stosowanych w skoroszytach, ksiażlcacłi. Indeksy nakładane są na kolumny tabel. PostgreSQL - jak większość SZBD - nakłada indeksy automatycznie na klucze główne tabel. Trzeba pamiętać, ze po nałożeniu indeksu nie należy go aktualizowac, poniewaz jest on aktualizowany automatycznie po każdej zmianie dokonanej na danych należących do incleksowanej kolumny. Automatyczne akt-ualizowanie kolumny indeksu przez DBM S może wiązać się ze spadkiem wydajności bazy danych w przypadku,
' , ,
¦, l „_ j'
gdy indeksujemy kolumnę, której dane są bardzo czesto modyfikowane. Spadek wydajne-
5'
ści związany jest równiez z indeksami, które potrzebują dużych zasobów pamięci. Indeks uzywany jest automatycznie po nałożeniu go na koluirtnqr. Zwiększenie wydajności baz danych przy stosowaniu indeksów wystepuje, gdy indeksujemy kolumnę łączącą dwie tabele i używarny wielu kwerend zawierających złączenia
; Ê l l "
mh_*_:
jÜlN przy użyciu tej kolurnny.
Indeksy nakłada się równiez na kolumny, które używane sa do o,_=;'_,raniczania liczby za-
¿ ;_ í -im.__.
pytań.
Typy indeksów
¿- t
e B-tree (B-drzewa)
¦
-_. Å_
__
Ten typ indeksu używany jest najczęściej dla zapytań zawierających operatory porównania: większe od, mniejsze od, więlrsze lub równe, mniejsze lub równe, różne, pomiędzy
. ¿ "
(s1_:'rwsEN),1s NULL_1s NOT Nu'LL.
e Indeks haszowany
Stosuje Funkcję przekształcającą ciągi wartości klucza o dowolnej długości na wartość o ustalonej długości. Indeks haszowany wykorzystuje się w bazach danych, gdy wyszukiwanie jest oparte na równości klucza. e Indeks CÍST [Generalized search Tree)
Indeks ten stosowany jest przede wszystkim do bardziej skomplikowanych. typów danych i operacji spoza podstawowych porównań oraz określania zakresów. Wykorzysty-
_
f =
wany jest głównie przy uzyciu geomehycznych typów danych.
.' L-u_lim¬.-
-
292
.
t=.-iz |".-'~.
s'.;||| 2--i s | t-*-.11' H. -ir. ft' .-1 ts i -'fa
1 lndez C-IH jßeneralized Inyerted ihldezesj
indeks jest ~.s';,'ko1'zystywany'. jądy zachodzi potrzeba zmapowania wiel1.1 wartości w jednyrn wierszu.
L|z¬_.„¬a.':it1y jest ;głównie przy tablicowych typach danych. np. intej_jer[]. ,gdzie w kolejnych krotkach kolumny znajdują sir; tablice. Należy pamiętać, że umieszczanie zbiorćw.-' danych jnp. tablicyj w miejscu przecięcia się wiersza i kolumny tabeli jest sprzeczne z pierwszą postacią normalną i tabeli takiej nie można nazwać relacja. Aby utworzyć indeks. nalezy posłużyć sie następtijącą skladnią polecenia SQL: Create Incleit ident:yfi]r.ator_inc1elcsu Ülii nszwe.__tsbelijnazws__]col1.1u'tnyj : ldeiityfilcator indeksu to nazwa wlasna indeksu. której bedziemy używać, aby wykonywać operacje na ntworzonyrtt indeksie. instrukcja nakładająca indeks na kolutmie imie:
|'i¬.'s_ fii'_5-l _ T'wnr'.-Title i|1dŁ'l'-tsti ss' F'cs'Lg,1'FÊiQL
Domyślttle twot'zony jest indeks typu B-tree.
.=f~.li¬y utworzyć indeks haszowany. ttżywamy polecenia SQL: 'EREJŁTE IHDEH goscie_im:i.e__hssh__inc1eks DH goscie TJSIHG hssh t[i1:rci.e]| ,-
Å-
_Ÿ
t-tys. 33.1. Tworzenie indeksu l1aszou.';|iiep,ri'a- i*r:1stc,'re5QL
Roznica pomiedzy dwiema instrukcjami SQL polega na dodaniu slowa kluczowego TJEIHG i nazwy typu indeksu jrnetody indeksowaniaj w miejscu identyfikatora tabeliZamiast goscie (imie) znajduje się hash{imie'1 . W podobny sposób unneszczarny indeksy (L}ll*~l oraz Gl5`l`: CREATE IHDEI goscie_imie_gin_inc1el-cs DH goscie USIHG gin tirniej ; jezeli chcemy wytj-'pować określony schemat, do którego indeks ma należeć. wówczas umieszczamy następującą instrukcję SQL.: CEEPLTE IHDEI nazwa_schemstn.icient},rfiicato1:_inclelcsu DI-I nszus_tsł::'eli {nszws_lcolu1rtr11,f]' ;
W powyższyni poleceniu w miejscu na.zws_sche1rtstu podajemy ident¬yi_ikator scliematu. np. pttbliiş. po ktorym musi zostac umieszczona kropka oddzielająca idetityf`1katrir
schematu od identyfikatora indeksu. Na pojedyncza kolumnę mozna nałożyć indeksy różnych typów; f
His. i¦";..t. Üpis tabeli jjościiz' ' zawierający iniorniacje o indeksach w tabeli
_Å
2
_
_`-:-
-__¬___
-_-___f__`
--_-
»4 Usuwanieindeksn
Indeksy wtelokolumnowe jesli w obrębie tabel na dwu kolumnach bardzo często używane są zapytania zawierające warunek AND, możemy rozważyć. czy poprawę wydajności osiągniemy, stosując indeksy wielokolumnowe. jako przykładu użyjemy tabeli px:ac_p_pomoc: racownikl imie l nazwisko l wiek eger =charą_ç_ter vacj Character va|l_ l
j
biowak
34
.Ê
\Jc'j':iech
Kowalski
30
3
Michal
M1 emcza)-:
23
-'1
Renata
Zawadzka
25
5
Irena
'Szal omska
5S
6
hiik co r 1 8
Kor.: al sk e
7
Bozena
PLz¬,'l-zosclns 40
3
RM _t.*±.^'›` Tabela prac_p_pomo‹'
jeśli wiele kwerend zawiera warunek AND pomiędzy kolumnami imie i nazwisko. np. kwerendy w postaci: SELECT wiek FROM prac_p_pomoc WHERE imie=' Jan' AND nazwisko='Nowak' :
lut 3% ‹› Przykładowe zapytanie clotyifząre kolumn
wówczas możemy zastosować indeks wielokolumnowy za pomocą polecenia SQL: CREATE INDEX indeks_imie_nazwisko ON prac_p_pomoc (imie , nazwisko) ,' ._.i
293
294
|i-*-.'i |'¬-
i'. I-1 - si =- | Ł-
¦'.-i
-f. |-
ltrs. Eif'.i..7. l`-lakładanie indeksu na dwie kolumny
'Gdy pracujerny w ił`tistgre5Ql. i nie parniętarny identyfikatora indeksu. możeniy wyśw'ietliiÍ iiicleksy liałriżritir' na knltininy wyliranej talieli. tiąryskttjąt' jej opis pcilec.t+|*iietn
hd nazwa tabeli.
His `~'.'-"ś.~'“i. Üpis tiihcll prac.. p..pnr1u¦'‹::
jak przedstawia powyższa ilustracja. indeks wielokolumnowy w tabeli prsc_j;:-_pomoc nia itlent.yi`ikator incleks_imie_nazwis}co. jest typu El-tree i został nałożony na kolurnny imie. nazwisko. indeksy mogą być nakładane nie tylko na kolumny. lecz także na wyrażenia i Funkcje wyliczane z pojedynczycli kolumn i p;rup kolumn.
Indeksy nakładane na funkcje leśli na danej kolumnie wykoiiy¬a-'aiia jest czesto lcwerenda zawierająca Funkcje. nplower jj , wowczas opłacalne może stać sie nałożenie indeksu na łiitikcje w odniesieniu do kolumny. ktora używana jest w lcwerendach. tip. polecenie SELECT lower {imie} FF.C|ł-'!ł goscie;
wykona ftiiikcje. lower 'U na każdej l-trtitce kulut|"itty imie:
I
lłis ii*-.'.t l.lżyc.ic' funkcji loy'.'c'r ii' I`*nstprc'5'Ql-
Aby w przypadku wielu kwerend zawierającycli tę Eunkcję zoptymalizować czas wyszukiwania. nakładamy indeks poleceniemt 'CREATE IIJDEI inci.el'cs__na_fur1l-:cji DH goscie 1,' lower (imie) Ĺl ;
His. i?'i.l'¦' ['~«|alr_iżei11cirttli_'l-;sil na l'nnkcj+,'
-mr:
_
Å
Ż
Ż
Å
indeksy nakładane na wyrażenia Üprocż hmkcji w licznych kwerenclach dotyczących tych samych kolumn tabeli może pojawiać sie określone wyrażenie. Wiiofcżas możemy rozważyć' celowość indeksowania wyrażenia. lłrzykład wyrażeiiia dla tabeli goscie:
lłys. i¦"i.ll `l'al_iel.'.t t__?,_t':|sclc'
SELECT id_goscis FEÜH goscie WHERE Ęimie|j', fllnszwiskoj = 'Msrek, Howak'; i
iii-s. ES]] 2. ¬tL"y'rażcrtiie użyte w tabeli ,"¿oscif.'
.ftby nałożyć indeks na wyrażenie, posługujerny sie następującą klauzulą SQL: CHEATE II~1'DEIl'I iric1eks_ne_i'ryrszeniu BH gosciełłirniej 1 ' , ' | lnazwiskojj ,' H" ATE 1HDEk indeas_na_wyrsżen1u on goscieĘtjmiejj', '|jnażwisko}}; i-tys if.ł.t i Przykład nałożenia indeksu na wyra;›".t-'nie
Indeks unique indeks Lli's'lQl_lE nakładany' jest na kolumny w celu dtidatkowcp,ri wymuszenia unikatowości zawartych w nich danych. Indeks ten może być nakładany na po jedynczą kolumnę ltib grupę kolumn. I-Ĺalecaną prakt¬yl¬'.ą nakładania ograniczen na kolumny jest posługiwanie sie typowym ograniczeniem ADD ĽÜHSTRAINT... Lit'-HQIJE. jednak nakładanie indeksu tttiikatow'ep,o jest rownież dopuszczalne. Należy pamiętać, że jedynie kolumny li-tree nio,-e;ą być indeksowane nnikatowo. Dla przykładu poslużymy się tabelą p_bhp. jid
j imie
nazwisko
j wiek
.wiek___dziec|i:ał
jt"='=fls": :]'=ietłflH'_="*r`ezií"i ¦=*'=f"s"='=_=f.r"r*"'itiś!?it!is11?'='*'fi*t-!1ii'?f==t=t II
iS
-.I an
Hora aa
za
1 :':¦
'-Jo] oaeeii
5-Ioireisi-: 1
so
].E|
H-ar. 1. cut
l*ł'I|1-"'eLlt
Ź'¦":¦
lE
Harcin
Tcecz
.ło
Liř'
Ewa
ti]-: :nec
J
lo
His- _i-ti I-1 Tabela p_bhp
.
li.-`s.r"t
l_`}.-"ii's"'i"i_`łł
l T"i"i"*i_l'l""Ll`t
ł.ł.""tĹ-"
li""'.:`*~i“|t`l"l
jeśli zachodzi sytuacja. w ktorej nie chcemy dopuścić. aby w firmie istniały dwie osoby o takim samym imieniu i nazwisku, dodatkowo chcąc nałożyć na kolumny imie i nazwisko incleks. rnożemy posłużyć się klauzulą: ĽIELEIŁTE UNIQUE Inctea: nioj-_indeks__unikatowy Üi'¬¬l p_bl'|p'[imie.nazwiskoj; mojaba:a== ĽREATE UNI
ca_EaTz rr~ii.'e:'..
_
iłys. }.*:l.l'i. hiałożenie indeksu UHIQUE
Po wykonaniu tej czynności proba dodania do tabeli kolejnego jana Nowaka lub Marcina Tracza spotka sie z odmowa.
Indeks częściowy (partial indez) Gdy wśrod kwerend bazy danych często zdarzają się zapytania na określonym fragmencie danych, np. zapytania tabeli p_bhp dotyczace krotek od id = 2 do 4. wówczas możemy podnieść wydajność przez nałożenie indeksu częściowego. Gdy kwerendy dotyczą wybranego iragmentu kolumny. a pozostała część jest często rnodyfikowana. wówczas nałożenie indeksu częściowego może okazać sie optymalnym rozwiązaniem: CREATE IHDEJĽ trioj_incłe}cs__czesr:ioi-ry' tlltil p_bhp{ne.zwisko} WHERE ici EETHEEH 2 AND 4; ¬njnhü?a=H EREo`i '-Íł7.E±".TE .[.l"«llŦE`!":
IMÜEE mo]„1ndek5_c:ss
His. itslti. l“~iałożenie indeksu częśi'iowegri
indeksy możemy tworzyć rownież za pomocą iiarzedzia pgśidminl ll. W tym celu zaznaczamy w prawym menu tabel-:;_.', w ktorej chcemy utworzyć indeks. iz menu kontekstuwego wyl1iera.my Nowy obiekt, a następnie Nowy indeks___1qbdĘy?j
iobmosyflenmwo
_¦ '
Nccatlf-a
ijl_ I!"
Cldśilrreż
Ed [Hi
Elicz
E ga.-_ ., ' 1 pt -,-, -J Üšj, .tj i Fifa
|_Isi.11"ij'sle|sui... Ekesoyrarttokasliodone... übcleoe Ctbclęoe li_asl'-żelowe
Nowetalade... Nowa lnołurnna... htowyltliaczołncy... litowe oçeri-o.'e|'|+o 'i'rj"łth.moj-`.ące. .. litowe oçp'e|'iiczonto unikalna...
ji,
Reset robot statystyk
Nowe sorawdzerie...
'i jaa I
UC:
ist-
'-if. FI-'-"|l'=fi¬F .i
|
Eh.
“W
P” U E
l.
_ d l
usa.,
_
l"low'y' trtooer...
p|F||"I'I'|l'ł"l"
I-tys. "`›¦'il-[Í" Użycie indeksu w programie pgetdrriinlll
Pierwszą czynnością. jaką wykonamy. będzie wpisanie ident¬yf`ikatora dla indeksu. np. nowy_indeksDo dobrych praktyk należy stosowanie nazewnictwa. które w przedrostkach albo przyrostkach będzie zawierało skrót iiiformttjący, iż jest to identyfikator indeksu. np. imie_ na.zi'ris1co_ida., gdzie ich: informuje nas o tym. że wybrany obiekt jest indeksem.
1r-is|'-it...~tf-'|.-ti si-'ii.w1fit.t |.'...iz 1.ift.st'r_:i-i ____
Å
í_
.
__
.ii
area-aa`|neeea.|iaiaaii1"so j' tiaeoa
-..Ę_±í_
'Ê
jho'-.~i"_"¬1=l@ eli-
j
¦
_
l
-1 Rys- 33-13. Wybór identyfikatora dla indeksu
Kolejną czynnością jest określenie. które kolumny mają być indeksowane. Dla przykładu użyjemy kolumn imie i nazwisko-
“if-uaaeiiuoeu | iiefincja.
jest I
Inne nazwisko
.üifiii .ASC
|_.'¦'.ST LAST
sama
mm
Fame'
F__"_"?`*íÊ
iaaaiai |_-'__-_:"_Ê| T'
NLLte
'l"Fmsr
_-- 1
;j
Ê'
f""|.iśsT
_--» 1
Rys. 33.151. Wybór kolumny do indeksowania
| 5
łśolejnym kroiciem jest przejście do zakładki Definicja i wybranie typu indeksu. jaki
chcemy nałożyć na wybrane poprzednio kolcunny. Wybom dokonujemy za pomocą rozwijanego menu pola Metoda dostępu.
8 |
I-saw-I za I jcdomyśha tabtespacoa'
E 'I
_
btroe l_hl-r.słt'jr H
.flfiłiflf
_'_
_._
hash
_
||;|'ş1; gin
I ¿ : j
5
_
_
_
Ê'
ł-`tys. ł3.Ílil. Wybór rodzaju indeksu
Zakładka Definicja umożliwia również tworzenie indeksów unikatowych jzaznaczamy pole Unikato'wyj. jeśli chcemy utworzyć indeks częściowy, tzw. partial index. wówczas w polu Dgraniczenie wpisujemy warunek. np. id BETWEEH 1 AHH ii. Słowo kluczowe WHERE zostanie dodane do ograniczenia automatycznie.
I . '
H
j j , ` j
í
ł'
253
sw.-:.i' n.-isi:f.:ii | st':s:|:i=.rui' aaż tfnt-~i'r=r-':i-i
±-1
f
¦
Å
, ā
Å
mi
ki.-.
:Å
Å
'="=='°"'=t-='I'i-a'-'=.=¬"'1i'|.=ś'- l
'
saaiiaiaia
I
czwiügwpdrimfla.
Š |
Lhlidar
F
ltlaster
F
Jedrioczosi'iat'Htorzenie?
Í-
Š
'
jiafistwesn I anna
-I
Rys. 13-11. 'Dkreślenie dełinicji indeksu
Całość tak utworzonego indelmu mozemy sprawdzić. przeglądając kod SQ L w zal-dadce SQL.
-
aj
iuswetfilnenoijaaumy B1 I
il _
F'l"t"|'ü¦H±H¦|'tk:zj"l:|-i 'Ľ'l='I.|l.TE i]lII'ĹIł.lE IHIIEI noI.r5'_Lud-„elcs
U31 '|;|r:'.'-'cie ĽJĘIEIG htzr-ee |j1.lti.ł.' .iiāłf I'i|JLł.5 I-.ii5`l", nuiiriaito ASC ił'L|'L¦L5 I.J|.5T¦| Ľł|HE¦RE .td IĘIETREEIJ' -¬- JLHII -L:
`
Rys. 33-22. Widok kodu SQL utworzonego indeksu
Usuwanie indeksu za pomocą narzędzia pgAdminl|I Aby usunąć indeks za pomocą narzędzia pgrfidmin III. należy zaznaczyć indeks w prawym menu w gałęzi Indeksy i z menu kontekstowego wybrać opcję Usuń ,f5kasuj... z
j |
si
ra'.-ze m
IE i-T] cami:-
ai =i'-ji raurmyrai
I z
s-J IH 'Dorariiras-iaitj El Ę Iridekiy t2¦I
Ü
Š' Inrlel'is_na_'.-".'yr-az j
-
Wyzwdacze |¦I¦Ŝl_`¦|
j = `
l Ę
El _
¦
| ' ¿
' -
' ` ”
¦
tt-'i _cio D is F-'_-'_t p-ntoe lffi _ ltl
'
L
-"': Fi'-1=aLlr 'tül'
Ę
I
li-ał:|'ele|_r'i¿|i:łri1!t¦"d'“|-a _ uczniowie
zawody_wod1ei|'si'.|e ._ FLl1l'=.1e wyzraolfiy Ęlilj'
. . -'-' - Ię›I " . . . ._ 1'
_ _í.___._.í__ Í łłl
ai _ wew: tu
"|.-G..-.ha ..||.|__ |z'Ł__,¬, , |'.l|\
Rys. 3t't.I-E3. Usuwanie indeksu w programie pgsdminili
srsawoż swoją wn-żozs 'Co to jest indeks i jakie są typy indeksów? Do czego służą identyfikatory indeksu? jakie są rodzaje indeksów? :'l“:l" l" '.-' Do czego służy narzędzie pgflidminllłi'
*'-
:-¬.
l
Fl.›'iÍ.`t' l_ł."'."'~l`1"lŻ`l-i i §"i"r'f~i`l l-l"‹'l"|` l-i.¿'i`r*. l_`!."1'|l"¬|"|"'I.Íl-i
|
l
I
Ĺ Podział zagrozen i dla bazy danych | sposoby przeciwdziałania im l
|
|
IAGADHIEN IA
1 u un 1
Pójęcie standardów bezpieczeństwa teleinfórmatycznegu jakie są typy ataków na bazy danych? Na czym pelega zapewnienie ciągłości pracy systemu? Ftejącie ataku i terróryzrnu elektrómagnetycznegó
Wraz ze wzróstem peptilarnósci baz danych i cnraz czestszym ich używaniem w bankach. serwisach internetewych. agencjach rządówych stają się nne ceraz bardziej atrakcyjnym celem dla krakerów araz esób i instytucji, dla których dane te są cenne. Ataki na bazy danych te nie ryllce próby ódczytri chróniónych infcirmacji, aie także próby mndyfikacji danych iub ich zniszczenia. Üprócz zagrózeń wynikających z bezpesredri ich działań ze streny człewieka. meżna wyróżnić zagróżenia związane z awariarni sprzętu. óprógramnwania eraz brakiem własci'¬fi.'ych zabezpieczeń systemów in ferrnatycznych przed awariami lub edcieciern zasilania. ]ednyn1 z najważniejszych zadań na etapie irnplementewania baz danydi jest właściwe i kempieksewe zaprójektewanie zabezpieczeń. Frójekt zabezpieczeń systemu baz danych pnwinien elirninówac jak najwięcej zagrnżeń systemu baz danych, być elastyczny w zakresie jegó rezbudewy eraz zawierać precedury póstępnwania na wypadek awarii. W rózdziale tym zóstaną przedstawiane i sklasyfikewane zagróżenia dla systemów baz danych, rnetódy przeciwdziałania im óraz pedane inferrnacje clótyczące spósebów zabezpieczania baz danych (MySQL. Pc¦stgre.'_"iQL, Access}. W ceiu usysteniatyzewania zagreżeri i technik echróny danych epracewanó standardy bezpieczeństwa teieinferrnatycznegu. Paniewaz ramy tematyczne i ebjetóśc tegó pedręcznika nnierneżliwiają szczegóiewe i pełne ümówienie pelityki związanej z bezpieczeristwern, istatne kwestie zestaną ennówinne skrótewn. a czytelnika zachęcamy de zapoznania sie ze szczegółami deknmentacji eiektrenicznej znajdującej się na pnrtaiach peświecnnych bezpiec zeństwu _ Standardy wskazujące na najlepsze praktyki zabezpieczeń: BS W99-1. ISÜHEC ifi3.35 należą de grupy wytycznych dla bndewania systemów. lstrlieją również standardy bezpieczeństwa. na których bazuje sie padczas przeprewadzania certyfikacji: CC, ITSEC. TSEC. B5 W99-2. W Pólsce: PN-l-13335-1: 1999. PI¬~i-iSÜ,ilE'C 15403-1:2ÜÜ2. PN- ISÜJIEC i??'Et"šl:1t`J'Ü3. F'i"~i- I-Ü?'.?"-.FJ-212005. Ügraniczając szereką tematykę zabezpieczeń kempnterewych de baz da nych, zacznijmy nd charakteru baz danych. dla których zabezpieczenia bedziemy prejektnwaó- Innych zabezpieczeń wymagają bazy danych banków Ęprzeclieymjące numery kart kreciytówych. dane nsebnwe. irrtbrmacje cr przelewach elekrrenicznychj. a innych bazy danych z tytułami książek demewej biblieteczki. I
_I
v
Y.-×1=t¿1/i¬u¿‹.2,t:~‹t,±\ mz o„\NY‹;u
› .Š › 4
z -1-vi
' i ¿ Í I t '
!
N Í j f Í j l
j Ę Ê 2 , J j j ; I
I l
j y l Í t j
1 ?
__
-_
__.