Model bazy danych

Transkrypt

Model bazy danych
BAZY DANYCH
Materiały do wykładów
dr inż. Janusz Kosiński
Wprowadzenie do
tematyki baz
danych
2
Typowy „ręczny” system ewidencjonowania.
Kluczami „ręcznej” bazy danych są zapisy na papierze.
3
• Komputerowa baza danych - zautomatyzowana wersja
funkcji ewidencjonowania i wyszukiwania, stosowanych
w systemach „ręcznych”.
4
• Komputerowe bazy danych przechowują informacje
w zdefiniowanych formatach i strukturach - od
prostych linii tekstu (np. imię, adres), do złożonych
struktur danych, zawierających obrazy, dźwięki czy
filmy.
5
• Przechowywanie danych w ściśle określonych
formatach umożliwia systemowi zarządzania bazą
danych (DBMS – database management system)
przemianę danych w informacje użyteczne – raporty,
odpowiedzi na pytania.
6
Baza danych – narzędzie
umożliwiające skuteczne i
wydajne przechowywanie
oraz manipulowanie
informacjami
- w tym rozumieniu, że
dane są chronione przed
przypadkowym
uszkodzeniem lub
zagubieniem, oraz że mogą
Baza danych - fizyczna
być przeglądane w różny
implementacja modelu relacyjnego
sposób, zależnie od
opisującego pewne aspekty
przyjętych założeń i
rzeczywistości zgodnie z regułami,
ograniczeń.
zaproponowanymi przez E.F.Codd’a w
końcu lat 1960.
7
BAZA DANYCH (BD)
jest modelem
informacyjnym
pewnego aspektu
rzeczywistości
(fizycznej lub / i wyobrażalnej)
jest uporządkowanym
zbiorem danych
przechowywanych w pamięci
komputera, których zadaniem
jest reprezentowanie tej
rzeczywistości.
8
Funkcje bazy danych:
¾
Wyszukiwanie (Zapytania)
¾
Aktualizacja
¾
Zapisywanie/Wprowadzanie
¾
Usuwanie
NAJWAŻNIEJSZĄ i NAJCZĘŚCIEJ wykorzystywaną funkcją jest
Wyszukiwanie (Zapytania)
BD INTEGRUJE dane wielu użytkowników - każdy użytkownik
zainteresowany jest tylko pewnym jej fragmentem (w tym
sensie BD ma charakter zintegrowany)
9
BD MOŻNA PODZIELIĆ
ze względu na sposób zarządzania
na operacyjne bazy danych i analityczne bazy
danych:
* OPERACYJNE BD - znajdują zastosowanie w
codziennym funkcjonowaniu organizacji –
przechowują dane dynamiczne
* ANALITYCZNE BD - są wykorzystywane
do przechowywania danych
historycznych / statystycznych,
które bardzo rzadko ulegają
zmianom.
10
Model bazy danych
- zbiór zasad, którymi należy się posługiwać
podczas tworzenia bazy danych.
- określa się reguły, zgodnie z którymi dane
umieszcza się w strukturach.
- określane są również dozwolone operacje.
Definicja struktury danych
- specyfikacja reprezentacji dozwolonych
w modelu obiektów (encji) oraz ich związków.
11
W informatyce wyróżniamy główne modele baz danych:
™
hierarchiczny model danych
™
relacyjny model danych
™
grafowy model danych
™
obiektowy model danych
™
sieci semantyczne
™
strumieniowe bazy danych
(nowe podejście)
12
Model danych
Encja*
Dostawca
Wytwarza dane –
bazując na
Wykorzystuje dane –
bazując na
– pojęciowy opis w przestrzeni
problemów - zawierający
definicje encji i ich atrybutów
Odnosi się do
Pakiet
wymiany
Odnosi się do
Definiowa
nie
płatności
Definiuje
format
wynikowy dla
Klient
Punkt
zapytań
(Klient, na przykład, jest encją, i
może mieć atrybuty: Nazwisko i
Adres),
oraz ograniczeń
Umożliwia
dostęp do
Dane*
(np. Nazwisko_Klienta nie
może być puste).
opcjonalne
* - wskazuje ”przejście” do innego
obszaru modelowania
Model danych zawiera również opis relacji między encjami i dowolnymi
ograniczeniami tych relacji
(na przykład menedżerowie nie mogą posiadać więcej niż pięć osób
składających im raporty)
Model danych nie zawiera żadnych odwołań do fizycznego formatu systemu.
13
Model danych
ID
Budynek
Wejście
Ulica
ID
Lokalizacja
ID
Działka
Data nabycia
Encja
Właściciel
Adres
Podatek
Relacja
Atrybut
14
Model danych (MD)
Jest NARZĘDZIEM właściwej
INTERPRETACJI
DANYCH
ZAWARTYCH
w BD
Jest ZBIOREM
ABSTRAKCYJNYCH POJĘĆ
umożliwiających ODWZOROWANIE (reprezentację)
OKREŚLONYCH WŁASNOŚCI danej organizacji
MD powinien być ADEKWATNY do MODELOWANEJ RZECZYWISTOŚCI
każda BD i SZBD muszą stosować się do ZASAD określonego MD
15
Termin MODEL DANYCH (MD) jest najczęściej używany w znaczeniu:
ARCHITEKTURA DANYCH
oraz
ZBIÓR WYMAGAŃ
W odniesieniu do danych
MD jako architektura – to zbiór zasad:
definiowania danych
(zbiór reguł określających strukturę danych)
operowania danymi
(zbiór reguł określających jak operuje się danymi)
integralności danych
(zbiór reguł określających, które stany BD są poprawne)
MD jako zbiór wymagań – to zintegrowany,
niezależny od implementacji zestaw wymagań dotyczący danych dla pewnej
aplikacji (np. kartoteka_zatrudnionych, przetwarzanie _zamówień)
16
TYPY MODELI DANYCH:
PROSTE MD
(OBIEKTY REPREZENTOWANE SĄ PRZY POMOCY STRUKTURY REKORDÓW
ZGRUPOWANYCH W STRUKTURACH PLIKÓW);
17
TYPY MODELI DANYCH:
KLASYCZNE
(HIERARCHICZNE, SIECIOWE I
RELACYJNE);
Relacja
Krotka
SSAN jest kluczem
Kolumna
SSAN
Nazwisko
DataUr
999-9
Borek
7/52
18
Mapa
Semantyczna
TYPY MODELI DANYCH:
Lista potrzeb
* Kto potrzebuje?
(użytkownicy123)
* Co potrzebują?
(a, b, c)
* Kim ja jestem?
(użytkownik123)
* Co ja chcę?
(a, b, c)
*Jakie jednostki są
mi potrzebne?
Użytkownik
danych
#
Zwracane wartości
odpowiadające
zapotrzebowanej
liście elementów
(a=10m, b=8kg,
c=0,05kg)
Usługa Dostępu do Danych
1. Wysyła zapotrzebowania do Mapy
Semantycznej
2. Pobiera informację z Mapy Semantycznej
3. Ustala adres źródła danych
* wywołuje standard metody dostępu
* wysyła listę elementów do pozyskania
4. Pobiera zwracane dane z adresu źródła
danych
* pobiera wartości źródłowe
* pobiera jednostki źródłowe
5. Przemieszcza się do źródła skojarzeń
* wywołuje standard metody skojarzeń
* wysyła listę elementów do pozyskania
6. Pobiera zwracane dane z adresu skojarzeń
* pobiera wymagane wartości
* Pobiera wymagane jednostki
SEMANTYCZNE
(DOSTARCZAJĄ METODY
REPREZENTOWANIA ZNACZENIA
INFORMACJI):
Zwracana lista
* adres źródła metadanych
(adres źródła:
http://sourceMetaData.html)
* nazwa elementu w źródle danych
(lista źródeł: x, y, z)
* adres metadanych skojarzeń
(adres skojarzeń: http://assocMetaData.html)
lista nazw źródłowych (x, y, z)
Metoda Dostępu do Danych Źródlo danych
lista nazw źródłowych
(x, y, z) z wartościami
(x=10m, y=5kg,
z=3kg)
Nazwane potrzeby z
wartościami
(a=10m, b=8kg, c=0,05kg)
(nie koniecznie
baza danych)
* lista danych źrółowych z
wartościami
(x=10m, y=3kg, z=5kg)
* lista zapotrzebowań
(a, b, c)
Skojarzenia
a=x
b=y+z
c = 0,1*z
19
TYPY MODELI DANYCH:
Nadklasa obiektu
5
OBIEKTOWE MD
należy do
(OBIEKTY I KLASY OBIEKTÓW
POWIĄZANE MECHANIZMAMI
ABSTRAKCJI)
Klasa obiektu
należy do
ma
jest częścią
Atrybuty
Ssak
Obiekt
Obiekt złożony
-KolorOczu: int
należy do
+getKolorOczu:int
ma
Atrybuty
Pies
Kot
-czestSzczek: int
-czestMiaucz: int
+szczek:void
+miaucz:void
OwczarekNiem
+jestNiem:void
Część obiektu
Pudel
+jestFranc:void
20
›
MODELE
POJECIOWE
(konceptualne)
(Najbardziej zbliżone do
sposobu analizy
modelowanej
rzeczywistości –
klasyfikacja obiektów i
związków z punktu
widzenia projektanta)
Relacje między obiektami
Plik
jest
jest
Kontener
Obszar pracy
jest
jest
Miejsce pracy
zawiera
jest
Dana
Elementy wizualne
jest
Obiekt
Urządzenie
reprezentuje
zawiera
Ikona
modyfikuje
jest na
jest
Elementy widoczne
Widok
Okno
zawiera
zawiera
Wskaźnik
jest w
jest
steruje
Sterowanie
Kursor
modyfikuje
jest na
jest na
Ekran
steruje
Wejście
Mechanizmy interakcji
jest
reprezentuje
reprezentuje
Mysz
jest
Klawiatura
21
›
MODELE
IMPLEMENTACYJNE
(Reprezentacja BD w
konkretnym systemie,
np. ACCESS, SYBASE,
ORACLE, INFORMIX,
DB2, INGRES, MS SQL)
JDBC-database
ResultSet interaction ResultSet
Dyrektywa
Aplikacja
PreparedSet
ResultSet
Dyrektywa
wywoływalna
Połączenie
Menedżer
urządzeń
Sterownik
Oracle
BD
Oracle
JDBC – ODBC
Most
Sterownik
ODBC
Sterownik
Sybase
BD
Sybase
BD ODBC
22
›
MODELE
FIZYCZNE
(Sposób organizacji
danych w pamięci
pomocniczej,
zewnętrznej)
CPU
CACHE
PAMIĘĆ GŁÓWNA
Składowanie
podstawowe
DYSK
Składowanie
drugoplanowe
TAŚMA
Składowanie
trzecioplanowe
Zapotrzebowanie
na dane
Dane odpowiadające
zapotrzebowaniu
23
BD – bez względu na zastosowany model danych, powinna być efektywnie
zarządzana:
PODSTAWOWE FUNKCJE ZARZĄDZANIA BD
ª OPTYMALIZACJA ZAPYTAŃ
(najkrótszy czas odpowiedzi)
ª ZAPEWNIENIE INTEGRALNOŚCI BD
(nie może być stanu BD, który nie istnieje w modelowanej
rzeczywistości)
ª ZARZĄDZANIE DOSTĘPEM WSPÓŁBIEŻNYM
(użytkownik BD nie może odczuć obecności drugiego użytkownika)
ª ODTWARZANIE POPRZEDNIEGO STANU BD
(odporność na awarie)
ª OCHRONA DANYCH
(uniemożliwienie niepowołanego dostępu)
24
SYSTEM BAZY DANYCH (SBD) to BD i ŚRODKI
PROGRAMOWE umożliwiające współbieżne operowanie na niej.
SBD opisuje pewne aspekty rzeczywistości danej organizacji.
FUNDAMENTALNĄ CECHĄ SBD jest zapewnienie
UŻYTKOWNIKOM takiego poziomu ABSTRAKCJI WIDZENIA
DANYCH, który przesłania szczegóły dotyczące ich struktury
fizycznej.
Uzyskuje się to dzięki oferowanym MODELOM DANYCH (MD)
25
ZINTEGROWANA BAZA DANYCH
PrWs 1
. . .
...
PrWs 2
PrWs n
BEZPOŚREDNI
UŻYTKOWNICY
PROGRAMY
WSADOWE
SYSTEM BAZY DANYCH
26
UŻYTKOWNICY
SCHEMAT
ZEWNĘTRZNY 1
. . . . .
SCHEMAT
ZEWNĘTRZNY N
SCHEMAT
POJĘCIOWY
POZIOM POJĘCIOWY
SCHEMAT
IMPLEMENTACYJNY
BD
BD
POZIOM ZEWNĘTRZNY
POZIOM IMPLEMENTACJI
BD
POZIOM FIZYCZNY
TRÓJPOZIOMOWA ARCHITEKTURA SBD
27
JĘZYKI BAZ DANYCH:
standard SQL 92
Z JĘZYK DEFINIOWANIA DANYCH (Data definition language –
DDL) umożliwia definiowanie struktury danych
przechowywanych w BD, a więc tworzenie schematu
implementacyjnego
Z JĘZYK MANIPULOWANIA DANYMI (Data manipulation
language – DML) umożliwia wypełnianie BD nowymi
danymi, ich aktualizację i usuwanie
Z JĘZYK STEROWANIA DANYMI (Data control language –
DCL) - nadaje uprawnienia użytkownikowi BD
Z JĘZYK ZAPYTAŃ (Query language) – umożliwia pobieranie z BD
informacji zgodnych z wyspecyfikowanymi warunkami
28
POWSZECHNYM STANDARDEM w dziedzinie języków baz danych
oferowanym przez większość firm – producentów jest SQL.
UMOŻLIWIA ON ZARÓWNO DEFINIOWANIE JAK I
MANIPULOWANIE DANYMI,
A ZATEM ZAWIERA KOMPONENTY DDL I DML.
29
WŁAŚCIWOŚCI BAZY DANYCH:
Ž WSPÓŁDZIELENIE DANYCH (BD jest używana przez więcej niż jedną
osobę)
Ž INTEGRACJA DANYCH (jeden logiczny element danych jest
przechowywany tylko w jednym miejscu BD, nie ma niepotrzebnych lub
powtarzających się danych)
Ž INTEGRALNOŚĆ DANYCH (BD powinna dokładnie odzwierciedlać
obszar analizy, którego ma być modelem)
Ž NIEZALEŻNOŚĆ DANYCH:
` LOGICZNA (dane oddzielone są od procesów, które używają tych
danych; organizacja danych jest niewidoczna dla użytkowników i
programów użytkowych korzystających z danych)
` FIZYCZNA (rozszerzenie lub zmiana struktury fizycznej
komputera nie wpływa na stan BD)
30
WŁAŚCIWOŚCI BAZY DANYCH:
Ž ABSTRAKCJA DANYCH (BD może być traktowana jako model
informacyjny, odwzorowujący istotne właściwości rzeczywistości)
Ž RÓŻNORODNOŚĆ SPOSOBÓW WIDZENIA DANYCH
(możliwość używania tzw. FILTRÓW – PERSPEKTYW, które są
nakładane na te same dane)
Ž ZASTOSOWANIE DEKLARATYWNYCH JĘZYKÓW
PROGRAMOWANIA (co zrobić? a nie, jak zrobić?)
Ž BEZPIECZEŃSTWO DANYCH (zabezpieczenie BD przed utratą
integralności)
Ž WIZUALIZACJA INTERFEJSÓW DO DANYCH (możliwość
wyświetlania tych samych danych w różnych formatach)
31
KORZYŚCI WYNIKAJĄCE ZE STOSOWANIA BAZ DANYCH:
Ž ZMNIEJSZENIE NADMIAROWOŚCI (wykorzystywanie danych przez
różnych użytkowników nie powoduje dublowania aplikacji)
Ž WSPÓŁDZIELENIE DANYCH (współbieżne wykorzystywanie danych
przez różnych użytkowników i aplikacje)
Ž AUTORYZACJA DOSTĘPU DO DANYCH (ograniczenie dostępu do
danych – problem niepowołanych użytkowników)
Ž REPREZENTACJA ZŁOŻONYCH ZWIĄZKÓW MIEDZY DANYMI
(związki intuicyjne, semantyczne)
Ž INTEGRALNOŚĆ DANYCH (zabezpieczenie przed definiowaniem
niewłaściwych związków – relacji i nadawaniem złych wartości)
Ž MOŻLIWOŚĆ OCHRONY PRZED AWARIAMI (odtwarzanie stanu
BD sprzed awarii)
32
KIEDY NALEŻY ROZWAŻYĆ ZASADNOŚĆ STOSOWANIA BD:
”” SEKWENCYJNE – ŚCIŚLE SKORELOWANE, przetwarzanie
danych przez jednego użytkownika
”” NISKI STOPIEŃ wzajemnego powiązania danych
”” MECHANIZMY w zakresie współbieżności dostępu,
bezpieczeństwa danych, odtwarzania BD po awariach oraz
definiowania ograniczeń integralności, planowanego do
wdrożenia SZBD są nadmiarowe w stosunku do potrzeb
”” OGRANICZENIA czasowe i finansowe
33
SYSTEM BAZY DANYCH
Aplikacja zawiera formularze i raporty z którymi
użytkownik wchodzi w interakcję
Silnik bazy danych nie jest częścią bazy danych
Baza danych zawiera fizyczną
implementację schematu i danych
Schemat bazy danych
opisuje model danych w
bazie
Model danych jest
pojęciowym opisem
przestrzeni problemów
Przestrzeń problemów jest dobrze zdefiniowaną częścią realnego świata
34
WE / WY
programów
Formularze
WWW
Interfejs
SQL
Polecenia SQL
Przepływ poleceń
Wykonanie projektu
Analizowanie składni
Interakcje
Obliczenia
operatorowe
Optymalizacja
Silnik
Pliki i metody dostępu
Menedżer
Transakcji
Menedż
Menedżer buforó
buforów
Menedżer
Zabezpieczeń
Menedżer
odtwarzania
stanu
początkowego
Menedżer przestrzeni dysku
Kontrola
Współbieżności
DBMS
Odniesienia
Pliki indeksów
Katalog systemowy
Pliki danych
Baza Danych
35
Relacyjny model
danych
36
37
1970r – E. F. CODD, badacz
zatrudniony przez firmę IBM,
opublikował dzieło swojego
życia pt. „RELACYJNY
MODEL LOGICZNY DLA
DUŻYCH BANKÓW
DANYCH”
Edgar F. Codd
(1923-2003)
– powstają relacyjne bazy danych (RBD)
oparte na dwóch gałęziach matematyki –
Teorii mnogości i rachunku predykatów
pierwszego rzędu
38
1979r
E. F. CODD publikuje na
konferencji AUSTRALIAN
COMPUTER SOCIETY
pracę pt.
”Extending the
Relational Database
Model to Capture
More Meaning”,
1985r
w której przedstawił
rozszerzoną wersję
relacyjnego modelu danych
– RM/T
E. F. CODD formułuje zasady dla RBD
Zasady E.F. Codda, znane jako „Twelve Principles
of Relational Databases”, dostarczają kryteriów do
definiowania relacyjnych systemów baz danych:
39
Kryteria relacyjności baz danych
1. Informacje są reprezentowane logicznie w tabelach.
2. Dane są logicznie dostępne przez podanie nazwy tabeli, wartości klucza podstawowego i nazwy
kolumny.
3. Wartości NULL są traktowane w jednolity sposób jako „brakujące informacje”. Nie mogą być
traktowane jako puste łańcuchy znaków, puste miejsca czy zera.
4. Metadane (dane dotyczące bazy danych) są umieszczane w bazie danych dokładnie tak, jak
zwykłe dane..
5. Język (instrukcje) obsługi danych ma możliwość definiowania danych i perspektyw, więzów
integralności, przeprowadzenia autoryzacji, obsługi transakcji i manipulacji danymi.
6. Perspektywy reagują na zmiany swoich tabel bazowych. Analogicznie zmiana w perspektywie
powoduje automatycznie zmianę w tabeli bazowej.
7. Istnieją pojedyncze operacje pozwalające na wyszukiwanie, wstawianie, uaktualnianie i usuwanie
danych.
8. Operacje użytkownika są logicznie oddzielone od fizycznych danych i metod dostępu.
9. Operacje użytkownika pozwalają na zmianę struktury bazy danych bez konieczności tworzenia od
nowa bazy oraz aplikacji ją obsługującej.
10. Więzy integralności są umieszczone i dostępne w metadanych, a nie w programie obsługi baz
danych.
11. Język manipulacji danymi powinien działać bez względu na to, jakie i jak są rozmieszczone
fizyczne dane oraz nie powinien wymagać żadnych zmian, gdy fizyczne dane są
centralizowane lub rozpraszane.
12. Operacje na pojedynczych rekordach przeprowadzane w systemie podlegają tym samym
zasadom i więzom, co operacje na zbiorach danych.
40
RMD dostarcza tylko jednego sposobu
reprezentowania – jest nim dwuwymiarowa tabela
nazwana relacją
RBD jest zbiorem relacji
Atrybut – istotna (konieczna, nieodłączna) cecha obiektu
– encji.
NRPRAC –
NAZWISKOPRAC –
STATUS –
A1;
A2;
A3;
41
POLA (ATRYBUTY, KOLUMNY)
Nazwy pól
REKORDY
(KROTKI,
WIERSZE)
sid
nazwisko
login
wiek
gpa
50000
Drabek
dra@music
19
3.3
53666
Jurek
jurek@tlen2
18
3.4
53688
Kowal
kwl@cert
18
3.2
53650
Kowal
kwl@edu
19
3.8
53831
Mizera
mar@math
11
1.8
53832
Kwiatkowski
kwiat@interia
12
2.0
42
ATRYBUTY – WŁAŚCIWOŚCI:
* * KLUCZOWE (jednoznacznie charakteryzują encję)
* * NIEKLUCZOWE
* * OBOWIĄZKOWE
* * OPCJONALNE
* * PUSTE (brak wartości, niepełna lub nieznana wartość NULL)
* * WYLICZANE (wyprowadzenie – wynik obliczeń lub
konkatenacji innych atrybutów)
* * JEDNO I WIELOWARTOŚCIOWE (wiele wartości tego
samego typu)
* * SEGMENTOWE (więcej niż jeden typ wartości).
ATRYBUTY SŁUŻĄ DO NAZYWANIA KOLUMN RELACJI
43
DZIEDZINA (DOMENA) – zbiór wszystkich możliwych wartości
atrybutu A.
NR_PRAC(zbiór liczb całkowitych)
NAZWISKO_PRAC(łańcuch znaków)
STATUS(łańcuch znaków)
KAŻDY ATRYBUT relacji musi mieć określony typ atomowy, tzn. musi
należeć do typów elementarnych (np. typ znakowy lub
całkowity)
• WARTOŚĆ ATRYBUTU nie może być rekordem, listą lub tablicą,
żadną inną strukturą, którą można podzielić na inne części
• SCHEMAT RELACJI to – nazwa relacji oraz jej zbiór atrybutów
(mimo, że atrybuty schematu relacji nie stanowią listy, bowiem są
zbiorem, to często trzeba określić „standardowy” porządek atrybutów)
44
RELACJĄ /INSTANCJĄ R(A1, A2, . . . An) określoną na danym
schemacie relacji R nazywamy skończony zbiór krotek takich, że:
{〈a1, a2, . . . an〉 : a1∈ dom(A1), . . , an ∈ dom(An) }
gdzie : R(A1, A2, . . . An) jest relacją
określoną na schemacie relacji
R(A1, A2, . . . An)
101 JANKOWSKI
102 FALCZAK
103 KONIECZNY
PROFESOR
ASYSTENT
DOCENT
a SCHEMAT RELACJI jest w zasadzie niezmienny, INSTANCJA
może często ulegać zmianom
a RELACJA jest TABELĄ, dla której spełniony jest zbiór zasad,
przedstawiony na następnym slajdzie
45
²
Każda relacja w BD ma jednoznaczną nazwę
(dwuwymiarowa tabela jest matematycznym zbiorem,
a zbiory muszą być jednoznacznie nazwane)
²
Każda kolumna w relacji ma jednoznaczną nazwę w
ramach jednej relacji (kolumna też jest zbiorem)
²
Wszystkie wartości w kolumnie muszą być tego
samego typu
²
Porządek kolumn w relacji nie jest istotny (schemat
relacji – lista nazw jej kolumn – jest również zbiorem
matematycznym)
46
²
Każdy wiersz w relacji musi być różny (powtórzenia
wierszy nie są w relacji dozwolone)
²
Porządek wierszy nie jest istotny (relacja jest
zbiorem)
²
Każde pole leżące na przecięciu kolumny i wiersza w
relacji powinno zawierać wartość atomowa (zbiór
wartości nie jest dozwolony na jednym polu relacji)
a PERSPEKTYWA – Wirtualna tabela, składająca się
z pól jednej lub większej liczby rzeczywistych tabel
47
PRZEDMIOTY
NAZWA_PRZEDMIOTU
POZIOM
KOD_KURSU
NR_PRAC
SYSTEMY RELACYJNYCH BAZ DANYCH
1
SRD
234
PROJEKTOWANIE RELACYJNYCH BAZ DANYCH
1
PRD
234
DEDUKCYJNE BAZY DANYCH
3
DBD
345
OBIEKTOWE BAZY DANYCH
3
OBD
345
ROZPROSZONE BAZY DANYCH
2
RBD
237
WYKŁADOWCY
NR_PRAC
NAZWISKO_Prac
Status
234
DOROSZ T
PZ
237
JURCZAK S
PU
345
ELSNER R
AD
Tabele
PRZEDMIOTY i
WYKŁADOWCY spełniają
podane reguły, a więc
stanowią reprezentację relacji
48
KLUCZE RELACJI
Ö
Mówimy, że atrybut, lub zbiór atrybutów {A1, A2, . . . ,An }
tworzy klucz relacji, jeżeli:
9 wszystkie pozostałe atrybuty relacji są funkcyjnie zależne od tych
atrybutów (nie może się więc zdarzyć, aby dwie różne krotki relacji R, były
zgodne dla wszystkich atrybutów A1, A2, . . . ,An)
9 nie istnieje taki podzbiór właściwy zbioru {A1, A2, . . . ,An }, od
którego pozostałe atrybuty relacji R są funkcyjnie zależne, tzn. KLUCZ
MUSI BYĆ MINIMALNY
ZALEŻNOŚĆ FUNKCYJNA
ATRYBUT B RLACJI JEST FUNKCYJNIE ZALEŻNY
OD ATRYBUTU A TEJ RELACJI, JEŚLI ZAWSZE
KAŻDEJ WARTOŚCI a ATRYBUTU A ODPOWIADA
NIE WIĘCEJ NIŻ JEDNA WARTOŚĆ b ATRYBUTU B
A
B
49
Ò KLUCZE GŁÓWNE – jedna lub więcej kolumn (atrybutów)
tabeli (relacji), których wartości jednoznacznie identyfikują
każdy wiersz (krotkę) w tabeli (relacji,/instancji)
Ò KLUCZE KANDYDUJĄCE – kolumna lub zbiór kolumn, które
mogą występować jako jednoznaczny identyfikator. Każdy klucz
kandydujący musi być jednoznaczny i nie może mieć wartości
NULL.
Ò KLUCZE OBCE – atrybuty, które są kluczowe w innym zbiorze
encji (pozwalają tworzyć połączenia danych przechowywanych
w różnych tabelach, tzn.
RELACJE MIĘDZY TABELAMI
Ò NADKLUCZ – zbiór atrybutów, który zawiera klucz
50
POWIĄZANIA (relacje) pomiędzy parą tabel istnieją
wtedy, gdy dwie tabele są połączone przez
klucz główny (podstawowy) i klucz obcy
KAŻDA RELACJA jest opisywana przez:
• TYP RELACJI,
• TYP UCZESTNICTWA, jaki obie tabele mają w tej
relacji oraz
• STOPIEŃ UCZESTNICTWA tych tabel
51
TYPY RELACJI:
* * JEDEN DO JEDNEGO – jeżeli pojedynczemu rekordowi w
pierwszej tabeli przyporządkowany jest najwyżej jeden rekord z
drugiej i odwrotnie, pojedynczemu rekordowi z drugiej tabeli
może być przyporządkowany najwyżej jeden rekord z pierwszej
* * JEDEN DO WIELU – jeżeli pojedynczemu rekordowi z
pierwszej tabeli może odpowiadać więcej rekordów z
drugiej,
podczas gdy pojedynczemu rekordowi z drugiej tabeli odpowiada
najwyżej jeden rekord z pierwszej
* * WIELE DO WIELU - jeżeli pojedynczemu rekordowi w
pierwszej tabeli może odpowiadać jeden lub wiele rekordów z
drugiej tabeli i odwrotnie, pojedynczy rekord z drugiej tabeli
może być powiązany z jednym lub większa liczba rekordów z
pierwszej
52
PRACOWNICY
Id_prac
Imie_prac Nazwisko_prac
100
Stefan
Krawczyk
101
Jerzy
Rojek
102
Adam
Zdziarski
WYNAGRODZENIA
Id_prac Stawka_godz
Premia
100
25$
150$
101
18$
200$
102
32$
130$
JEDEN DO JEDNEGO
53
JEDEN DO WIELU
STUDENCI
Id_stud
Imie_stud
Nazwisko_stud
601
Grzegorz
Majek
603
Kazimierz
Sturski
608
Edward
Zgorzelak
W POLU ID_STUDENTA
liczba 603 MOŻE SIĘ
POJAWIĆ WIELE RAZY
Id_instrumentu
Id_studenta
10
601
17
603
23
608
35
603
54
WIELE DO WIELU
STUDENCI
Id_stud
W POLU Id_studenta
liczba 603 MOŻE SIĘ
POJAWIĆ WIELE RAZY
Zaś Id_instrumentu - liczba
17 - może się pojawić dla
więcej niż jednego
studenta
Imie_stud
Nazwisko_stud
601
Grzegorz
Majek
603
Kazimierz
Sturski
608
Edward
Zgorzelak
Id_instrumentu
Id_studenta
10
601
17
603
17
608
23
608
35
603
55
TYPY UCZESTNICTWA
* * OBOWIĄZKOWY – jeżeli w tabeli A muszą
znajdować się pewne rekordy zanim zabierzemy
się do wprowadzania rekordów do tabeli B,
wówczas mówimy, że uczestnictwo tabeli A jest
obowiązkowe;
* * OPCJONALNY - odwrotnie.
STOPIEŃ UCZESTNICTWA – określa minimalną i
maksymalną liczbę rekordów w jednej tabeli,
które można powiązać z pojedynczym rekordem
drugiej tabeli
56
TYP UCZESTNICTWA
Obowiązkowy
POSREDNICY
Id_posred
Imie_posred
Nazwisko_posred
202
Agata
Mroczek
203
Mateusz
Nawrot
204
Waldemar
Szybki
KLIENCI
Id_klienta
Id_posred
Imie_klienta Nazwisko_klienta
95
202
Tadeusz
Kowalczyk
96
203
Adam
Cieciera
97
204
Józef
Sztaba
57
DIAGRAMY ZWIĄZKÓW ENCJI
MODELOWANIE SEMANTYCZNE (dane potrzebne do realizacji danej
BD nie zawsze należą nieodwołalnie do jednej z trzech kategorii: ENCJI,
ZWIĄZKU lub ATRYBUTU)
PRZYKŁAD – dane nt.ŚLUBU:
ENCJA – SLUB, ATRYBUTY – DATA,MIEJSCE,NAZWISKA PANNY i
PANA MŁODEGO;
ATRYBUT- STAN CYWILNY związany z encją – OSOBA;
ZWIĄZEK między encjami MEZCZYZNA i KOBIETA.
PROJEKTANT POWINIEN PODJĄĆ DECYZJĘ,
KTÓRY z w/w PUNKTÓW WIDZENIA
JEST NAJWAŻNIEJSZY DLA BRANEJ POD UWAGĘ BD
58
PRZEKSZTAŁCANIE DIAGRAMU E – R W SCHEMAT RELACYJNY
DLA KAŻDEJ ENCJI TWORZYMY TABELĘ (nazwa tabel w liczbie
mnogiej)
IDENTYFIKUJĄCY ATRYBUT STAJE SIĘ KLUCZEM GŁÓWNYM;
WSZYSTKIE INNE ATRYBUTY ENCJI STAJĄ SIĘ NIEGŁÓWNYMI
ATRYBUTAMI TABELI
DLA KAŻDEGO ZWIĄZKU JEDEN DO WIELU wstawiamy klucz główny
tabeli ze strony jeden linii związku do tabeli reprezentującej
stronę wiele linii związku
OPCJONALNOŚĆ po stronie WIELE LINI ZWIĄZKU mówi nam, czy
klucz obcy reprezentujący związek może być NULL, czy nie
(jeśli strona wiele jest wymagana,to klucz obcy nie może być
NULL)
59
DLA RBD nie istnieje uzgodniona składnia wyrażania struktury
danych (ciąg szablonów złożonych z nazw, relacji, atrybutów i
deklaracji kluczy głównych i obcych)
OPEROWANIE DANYMI (Jak wstawiamy dane do relacji? Jak
usuwamy dane z relacji? Jak wyszukujemy dane w relacji?)
ALGEBRA RELACYJNA – zbiór następujących operatorów:
60
SELEKCJA (OGRANICZENIE) – operator, który bierze jedną relację jako
swoją i produkuje w wyniku jedną relację (pozioma maszyna do
cięcia – wydobywa wiersze, które pasują do podanego warunku)
[RESTRICT]
RZUT - operator, który bierze jedną relację jako swój argument i produkuje w
wyniku jedną relację (pionowa maszyna do cięcia – wydobywa wiersze,
ale uwzględnia w nich tylko wyspecyfikowane kolumny)
[PROJECT]
61
S2
S1
sid
sname
ocena
wiek
22
Dorota
7
45,0
31
Lena
8
55,5
58
Robert
10
35,0
sid
snazwa
ocena
Wiek
28
Jadwiga
9
35,0
31
Lena
8
55,0
44
Grażyna
5
35,0
58
Robert
10
35,0
R1
Tabele poddawane
działaniom algebry
relacyjnej
sid
bid
dzien
22
101
10/10/04
58
103
11/12/04
62
σocena>8(S2)
selekcja
S2
sid
snazwa
ocena
28
Jadwiga
9
35,0
31
Lena
8
55,0
44
Grażyna
5
35,0
58
Robert
10
35,0
sid
snazwa
ocena
Wiek
28
Jadwiga
9
35,0
58
Robert
10
35,0
Wiek
πwiek(S2)
Wiek
projekcja
35,0
55,0
63
πsnazwa;ocena(S2)
snazwa
projekcja
S2
sid
snazwa
ocena
28
Jadwiga
9
35,0
31
Lena
8
55,0
44
Grażyna
5
35,0
58
Robert
10
35,0
ocena
Jadwiga
9
Robert
10
Grażyna
5
Robert
10
Wiek
selekcja
πsnazwa;ocena(σocena>8(S2))
snazwa
ocena
Jadwiga
9
Robert
10
64
ILOCZYN KARTEZJAŃSKI - operator, który bierze dwie relacje jako swój
argument i produkuje w wyniku jedną relację złożoną ze wszystkich
możliwych kombinacji wierszy z wejściowych tabel (w praktyce rzadko
stosowany)
[PRODUCT]
RÓWNOZŁĄCZENIE - Operator, który bierze dwie relacje jako swój argument
i produkuje w wyniku jedną relację wynikową, składającą się z wierszy,
w których wartości w kolumnach złączenia są takie same (iloczyn
kartezjański, a następnie selekcja)
[EQUIJOIN]
65
S1
sid
sname
ocena
R1
wiek
22
Dorota
7
45,0
31
Lena
8
55,5
58
Robert
10
35,0
sid
bid
dzien
22
101
10/10/04
58
103
11/12/04
iloczyn kartezjański
S1 % R1
sid
sname
ocena
wiek
sid
bid
dzien
22
Dorota
7
45,0
22
101
10/10/04
22
Dorota
7
45,0
58
103
11/12/04
31
Lena
8
55,5
22
101
10/10/04
31
Lena
8
55,5
58
103
11/12/04
58
Robert
10
35,0
22
101
10/10/04
58
Robert
10
35,0
58
103
11/12/04
66
S1
sid
sname
ocena
wiek
22
Dorota 7
45,0
31
Lena
55,5
58
Robert 10
8
R1
sid
bid
dzien
22
101
10/10/04
58
103
11/12/04
35,5
równozłączenie
S1ÅR.sid=S.sidR1
sid
sname
22
58
ocena
wiek
bid
dzien
Dorota 7
45,0
101
10/10/04
Robert 10
35,5
103
11/12/04
67
ZŁĄCZENIE NATURALNE – identyczne jak równozłączenie, ale bez
powtarzających się kolumn złączenia (iloczyn kartezjański, selekcja, a
następnie rzut, który nie bierze pod uwagę powtórzeń kolumn
złączenia)
[JOIN]
ZŁĄCZENIE ZEWNĘTRZNE – pozwala zachować wiersze z każdej lub z
obydwu relacji wejściowych, bez względu na to, czy mają
odpowiadające sobie wiersze w drugiej relacji:
68
LEWOSTRONNE ZŁĄCZENIE – zachowuje nie pasujące wiersze z
relacji będącej pierwszym argumentem operatora złączenia
PRAWOSTRONNE ZŁĄCZENIE - zachowuje nie pasujące wiersze z
relacji będącej drugim argumentem operatora złączenia
OBUSTRONNE ZŁĄCZENIE - zachowuje nie pasujące wiersze z
obydwu relacji będących argumentami operatora złączenia
69
SUMA – operator, który bierze dwie zgodne relacje (mają taką samą
strukturę – te same kolumny określone na tych samych dziedzinach)
i produkuje jedną relację wynikową
[UNION]
PRZECIĘCIE – operator o działaniu przeciwnym do działania sumy (suma
uwzględnia wszystkie wiersze z obu relacji, przecięcie natomiast
uwzględnia tylko wiersze wspólne dla obu relacji)
[INTERSECTION]
70
S2
S1
sid
sname
ocena
wiek
22
Dorota 7
45,0
31
Lena
55,5
58
Robert 10
8
35,5
sid
sname
ocena
wiek
28
Jadwiga
9
35,0
31
Lena
8
55,5
44
Grażyna
5
35,0
58
Robert
10
35,5
suma (union)
S1 4 S2
sid
sname
ocena
wiek
22
Dorota
7
45,0
31
Lena
8
55,5
58
Robert
10
35,5
28
Jadwiga
9
35,0
44
Grażyna
5
35,0
71
S2
S1
sid
sname
ocena
wiek
22
Dorota 7
45,0
31
Lena
55,5
58
Robert 10
8
35,5
sid
sname
ocena
wiek
28
Jadwiga
9
35,0
31
Lena
8
55,5
44
Grażyna
5
35,0
58
Robert
10
35,5
przecięcie
S1 3 S2
sid
sname
ocena
wiek
31
Lena
8
55,5
58
Robert
10
35,5
72
RÓŻNICA - operator, który bierze dwie relację jako swój argument i
produkuje w wyniku jedną relację wynikową, składającą się z
wierszy znajdujących się tylko w pierwszej relacji (pierwszy
argument) i nie znajdujących w drugiej relacji (drugi argument)
[DIFFERENCE]
73
S2
S1
sid
sname
ocena
wiek
sid
sname
ocena
wiek
22
Dorota 7
45,0
28
Jadwiga
9
35,0
31
Lena
55,5
31
Lena
8
55,5
58
Robert 10
35,5
44
Grażyna
5
35,0
58
Robert
10
35,5
8
różnica
S1 – S2
sid
22
sname
ocena
Dorota 7
wiek
45,0
74
Tabele używane do
demonstrowania
złączeń,
prezentowanych na
następnych slajdach.
75
Iloczyn
kartezjański
Kod SQL
iloczynu
76
LEWE ZŁĄCZENIE [ ZEWNĘTRZNE ]
Oznacza, że z tabeli podanej po lewej stronie instrukcji złączenia
zwrócone zostaną wszystkie rekordy. Dotyczy to
również rekordów z lewej tabeli, które nie mają
odpowiadających im rekordów w tabeli prawej. Wtedy
kolumny z prawej tabeli zwracają wartości NULL.
Wielu profesjonalistów rekomenduje konfigurację złączeń
zewnętrznych jako lewych złączeń dla zachowania konsekwencji
77
Lewe
złączenie
[zewnętrzne]
Kod SQL
lewego
złączenia
78
PRAWE ZŁĄCZENIE [ ZEWNĘTRZNE ]
Zwrócone zostaną wszystkie rekordy z tabeli podanej po
prawej stronie instrukcji złączenia, nawet jeśli nie
istnieją pasujące rekordy w lewej tabeli. Kolumny z
lewej tabeli zwracają wartości NULL
79
Prawe
złączenie
[zewnętrzne]
Kod SQL
prawego
złączenia
80
ZŁĄCZENIE WEWNĘTRZNE
Oznacza, że nie pasujące wiersze z obu tabel zostaną
opuszczone. Jeśli w zapisie ANSI nie zostanie
jawnie zdefiniowany typ złączenia, jest to
zachowanie domyślne.
81
Złączenie
wewnętrzne
Kod SQL
złączenia
wewnętrznego
82
Instrukcja UNION (nie będąca częścią standardu SQL92) tworzy sumę
dwóch lub więcej tabel. Oto jej składnia:
[TABLE] Query
(UNION [ALL] [TABLE] Query), ...
Parametr Query reprezentuje instrukcję SELECT, nazwę procedury
składowanej lub nazwę tabeli składowanej, poprzedzonej
słowem kluczowym TABLE.
Opcja ALL sprawia dodawanie wszystkich rekordów, jest więc zalecana
nawet w przypadku braku powtarzających się wierszy.
83
9
Wszystkie kwerendy w operacji UNION muszą zwracać tę samą
liczbę pól. Jednak pola te nie muszą mieć tego samego rozmiaru,
ani typu danych
9
Składanie kolumn odbywa się według ich porządku w klauzulach
kwerend, nie według ich nazw
9
W pierwszej instrukcji SELECT (jeżeli taka istnieje) można używać
aliasów, aby zmienić nazwy zwracanych kolumn
9
Klauzulę ORDER BY można zastosować na końcu ostatniej
kwerendy, aby nadać określony porządek zwracanym danym.
Należy używać nazw kolumn z pierwszej kwerendy.
9
Klauzule GROUP BY i HAVING można użyć w każdym argumencie
kwerendy w celu grupowania zwracanych danych
9
Tablicy wynikowej UNION nie można aktualizować
84
Poniższa instrukcja tworzy sumę wszystkich wierszy tabeli BOOKS
oraz wierszy tabeli LIBRARY_FLAT, zawierających cenę
większą od 25,00 zł (Price > 25.00), sortując tabelę
wynikową według kolumny Title:
TABLE BOOKS
UNION ALL
SELECT * FROM LIBRARY_FLAT WHERE Price > 25.00
ORDER BY Title
85
Tabele używane do
demonstrowania
instrukcji UNION
86
Widok
tabeli
wynikowej
Kod SQL
instrukcji
UNION
87
Strukturalny język
zapytań
© Andrzej Barczak, Janusz Kosiń
Kosiński 2004
88
W latach 1970, IBM zaprojektował produkt nazywany SEQUEL, lub
strukturalny angielski język zapytań (Structured English Query
Language), ostatecznie stał się on strukturalnym językiem zapytań
Structured Query Language (SQL).
IBM, wraz z innymi dostawcami relacyjnych baz danych, chciał stworzyć
standardową metodę dostępu do danych i manipulacji nimi w
relacyjnych bazach danych. Przez dekady, wiele konkurujących
języków pozwalało programistom i dostawcom na te operacje,
jednakże tylko nieliczne z nich były łatwe do nauczenia i powszechnie
akceptowane, jak SQL.
Programiści i dostawcy odnoszą obecnie korzyści z uczenia się języka, który
– z niewielkimi modyfikacjami – ma zastosowanie w wielu
różnorodnych aplikacjach i produktach związanych z bazami danych.
89
Systemy zarządzania relacyjnymi bazami danych (systemy RDBMS
–
Relational Database Management Systems), takie jak SQL Server i
Oracle są podstawowymi mechanizmami stosowanymi w systemach
informacyjnych na świecie, szczególnie w aplikacjach internetowych /
intranetowych i rozproszonych systemach przetwarzania typu klientserwer.
RDBMS jest zdefiniowany jako system, którego użytkownicy widzą dane jako
zbiór tabel powiązanych miedzy sobą poprzez wspólne wartości
danych.
Dane są przechowywane w tabelach, zaś tabele są zbudowane z rekordów i
kolumn.
Tabele zawierające niezależne dane mogą być łączone pomiędzy sobą, jeśli
zawierają kolumny danych (zwanych kluczami), które mają tę samą wartość.
90
Standard SQL
Dla wprowadzenia większej zgodności pomiędzy dostawcami, Amerykański
Instytut Normalizacyjny (ANSI – American National Standard Institute).
ANSI opublikował swój pierwszy standard języka SQL, w 1986 roku. Drugi,
szeroko zaakceptowany standard powstał w roku 1989. W roku 1992,
ANSI opublikował uaktualnienia znane jako SQL92 i SQL2, zaś w
1999 roku, powstałą wersja znana pod dwiema nazwami SQL99 i
SQL3.
Międzynarodowa Organizacja Normalizacyjna (ISO) zatwierdziła SQL99
jako swój standard.
91
Klasy instrukcji w SQL99
Porównanie klas instrukcji określa SQL92 i SQL99. W SQL92, instrukcje SQL byty
zgrupowane w trzech kategoriach: język manipulacji danymi – DML (Data
Manipulation Language), język definiowania danych DDL - (Data Definition
Language) i język kontroli danych – DCL (Data Control Language).
DML dostarcza specyficznych poleceń manipulacji danymi, takich jak SELECT,
INSERT, UPDATE, i DELETE.
DDL zawiera polecenia, które służą do dostępu do i tworzenia obiektów baz
danych, takie jak CREATE i DROP
DCL zawiera polecenia dotyczące uprawnień GRANT i REVOKE.
W przeciwieństwie do poprzednika, SQL99 definiuje siedem kategorii, które tworzą
ogólną strukturę typów instrukcji dostępnych w języku SQL. Te „klasy” instrukcji
różnią się nieznacznie od klas zdefiniowanych w SQL92, ponieważ próbują
identyfikować instrukcje wewnątrz każdej z nich ściślej i w sposób bardziej
logiczny.
92
Klasa
Instrukcje obsługi połączeń
SQL
Instrukcje kontrolne SQL
Przykładowe
Opis
polecenia
Otwarcie i zamknięcie
połączenia z klientem
CONNECT,
DISCONNECT
Kontrolowanie wykonania
zbiorów instrukcji
CALL, RETURN
Wywieranie trwałych efektów SELECT, INSERT,
Instrukcje obsługi danych SQL
na danych
UPDATE, DELETE
Instrukcje diagnostyczne SQL
Instrukcje obsługi schematów
SQL
Instrukcje obsługi sesji SQL
Instrukcje obsługi transakcji
SQL
Zgłaszanie wyjątków i
błędów
Wywieranie trwałych efektów
na schematy baz danych i
obiekty wewnątrz schematów
Kontrolowanie zachowań
domyślnych i innych
parametrów
Ustalanie początkowych i
końcowych punktów
transakcji
GET DIAGNOSTICS
ALTER, CREATE,
DROP
SET
COMMIT, ROLLBACK
93
Dialekty SQL
Ciągła ewolucja SQL spowodowała wzrost liczby dialektów SQL
stosowanych przez różnych dostawców w różnych produktach.
Te dialekty powstawały w wyniku oczekiwań użytkowników na nowe
możliwości przed stworzeniem przez ANSI nowych
standardów.
Na przykład, wielu dostawców zwiększa swoją ofertę o możliwości współpracy
z językiem Java (Oracle i Sybase) czy VBScript (Microsoft).
Pomimo to, każdy z tych dialektów zawiera przetwarzanie warunkowe (IF . .
. THEN), funkcje sterujące przepływem (pętla WHILE),
zmienne i
obsługę błędów.
Ponieważ ANSI nie stworzył jeszcze standardów obejmujących te ważne cechy,
projektanci i dostawcy systemów RDBMS mogli tworzyć własne polecenia i
składnię. W rezultacie produkty kilku najstarszych dostawców (od lat 1980)
różnią się w sposobie rozumienia podstawowych poleceń takich jak SELECT,
ponieważ ich implementacje powstały wcześniej niż standard.
94
Niektóre z tych dialektów wprowadzają polecenia proceduralne, aby wpierać
możliwości bardziej kompletnych języków programowania. Na przykład
implementacje proceduralne zawierają polecenia obsługi błędów,
kontroli przepływu, instrukcje warunkowe, obsługę zmiennych, tablice i
wiele innych rozszerzeń – są one dialektami pomimo, że technicznie są
to rozbieżne implementacje. Niektóre popularne dialekty SQL, to:
PL/SQL
Stworzony przez Oracle. PL/SQL nazwa pochodzi od Procedural
Language/SQL i zawiera wiele podobieństw do języka Ada.
Transact-SQL
Używany przez Microsoft SQL Server i Sybase Adaptive Server. Gdy
Microsoft i Sybase odsunęły się od wspólnej platformy, która posiadały
we wczesnych latach 1990, ich implementacje Transact-SQL też się
zróżnicowały.
PL/pgSQL
Jest to nazwa i rozszerzenie zaimplementowane w PostgreSQL. Skrót
pochodzi od Procedural Language/postgreSQL.
95
Instrukcje języka SQL mogą być analizowane, kompilowane i wykonywane
na różne sposoby, szczególnie jeśli są używane różne style powiązane:
SQL Module Language
Powoduje, że instrukcje SQL są przygotowywane podczas tworzenia
modułów i wykonywane, gdy moduł jest wywoływany (jak np.
Procedura składowana).
Embedded SQL Syntax
Pozwala na przygotowanie instrukcji SQL podczas prekompilacji
programu w jego języku podstawowym i wykonywanie podczas
wywoływania tego programu (jak np. PRO*C czy PRO*Fortran).
Direct SQL Invocation
powoduje, że statyczna instrukcja SQL jest przygotowana i
natychmiast wykonywana.
Zatem różnice w stylach powiązanych, są jeszcze jednym powodem
różnego funkcjonowania różnych DBMS.
96
kategoria
przykładowe typy danych i skróty
opis
Binary (binarne)
binary large object (BLOB)
Ten typ danych przechowuje wartości
łańcuchowe w formacie
szesnastkowym.
Bit string
(łańcuchy bitowe)
bit
bit varying
Ten typ danych przechowuje dane
binarne i szesnastkowe. BIT ma stałą
długość, zaś BIT VARYING zmienną
długość
Boolean
(logiczne)
boolean
Ten typ danych przechowuje wartości
logiczne: TRUE (prawda), FALSE
(fałsz) lub UNKNOWN (nieznana).
Character
(znakowe)
char
character varying
Ten typ danych przechowuje dowolne
kombinacje znaków z odpowiedniego
zestawu. Typy zmiennej długości
(varying) mogą przechowywać dane
dowolnej, pozostałe zaś – wyłącznie
określonej długości. Typy zmiennej
długości automatycznie dostosowują
swój rozmiar do zawartości, usuwając
spacje, pozostałe zaś zachowują
swoją wielkość bez względu na
faktyczny rozmiar przechowywanych
danych.
(VARCHAR)
national character (NCHAR)
national character varying
(NVARCHAR)
character large object
(CLOB)
national character large
object (NCLOB)
97
kategoria
przykładowe typy danych i skróty
opis
Numeric
(liczbowe)
integer (INT)
smallint
numeric
decimal (DEC)
float(p,s)
real
double precision
Ten typ danych przechowuje wartości
ldokładne (całkowite lub dziesiętne) lub
przybliżone (zmiennoprzecinkowe). INT i
SMALLINT przechowują wartości
dokładne z predefiniowaną precyzją I
skalą równą 0. NUMERIC i DEC
przechowują wartości dokładne z
predefiniowaną precyzją i definiowalną
skalą. FLOAT przechowuje wartości
przybliżone z definiowalną skalą, podczas
gdy REAL i DOUBLE PRECISION mają
predefiniowaną precyzję. Precyzję (p) i
skalę (s) można odpowiednio definiować
dla określenia dopuszczalnej liczby cyfr i
liczby miejsc dziesiętnych.
Temporal
(czasowe)
date
time
time with time zone
timestamp
timestamp with time zone
interval
Ten typ danych przechowuje wartości
związane z czasem. DATE i TIME nie
wymagają wyjaśnień. Typy z przyrostkiem
WITH TIME ZONE (ze strefą czasową)
zawierają znacznik strefy. Typy
TIMESTAMP są wyliczane podczas
działania komputera. INTERVAL określa
odcinek czasu.
98
Kategorie składni
Polecenia SQL zawierają trzy kategorie składni:
identyfikatory, literały oraz słowa kluczowe i zarezerwowane:
Identyfikatory to nazwy obiektów stworzonych przez użytkownika lub
proces systemowy, taki jak bazy danych, tabele, kolumny w tabelach
czy perspektywy.
Literały to wartości (nie będące wartościami NULL) wprowadzone do
systemu.
Słowa kluczowe i zarezerwowane na przykład SELECT, GRANT,
DELETE czy CREATE to słowa mające specjalne znaczenie dla parsera
(analizatora składni) bazy danych SQL.
99
Identyfikatory
Należy pamiętać, że RDBMS są oparte na teorii mnogości: klastry
zawierają zbiory katalogów, katalogi zawierają zbiory schematów,
schematy zawierają zbiory obiektów, itd. Na każdym poziomie tej
struktury wszystkie elementy muszą mieć unikatowe nazwy czy
identyfikatory.
Oznacza to, że każdy obiekt (bez względu na to, czy jest to baza
danych, tabela, perspektywa, kolumna, indeks, wyzwalacz, procedura
składowana czy więzy) w systemie RDBMS musi mieć nazwę. Gdy
wydawane jest plecenie tworzące obiekt na serwerze konieczne jest
podanie dla tego nowego obiektu nazwy.
100
Są dwa zbiory reguł, stosowane przez doświadczonych
programistów, podczas wybierania identyfikatora dla
konkretnego obiektu:
! pierwszy zbiór reguł zawiera logiczne zasady i konwencje,
które
pozwalają na tworzenie lepszych struktur danych.
Ich stosowanie nie jest wymagane przez język SQL, ale warto je wziąć
pod uwagę, ponieważ wynikają z praktycznego doświadczenia.
! drugi zbiór zawiera reguły zdefiniowane w standardzie języka
SQL, które zostały zaimplementowane przez dostawców.
101
KONWENCJE DOTYCZĄCE NAZW
(oparte na wieloletnim doświadczeniu programistów)
Wybierz nazwę mającą znaczenie, istotną i opisującą
Nie nazywaj np. bazy danych WD03; zamiast tego nazwij ją Wydatki_2003, co pozwala
na stwierdzenie, że przechowywane dane dotyczą wydatków poniesionych w roku
2003. Każdy dostawca bazy danych wprowadza limity dotyczące długości
nazw ale można stosować zrozumiałe skróty.
Wybierz i stosuj tę samą wielkość znaków w nazwach
należy używać nazw zbudowanych bądź z samych wielkich lub samych małych liter
dla wszystkich obiektów w bazie. Warto pamiętać, że niektóre serwery baz danych
są wrażliwe na wielkość liter.
Używaj skrótów konsekwentnie
jeżeli już raz zastosowałeś skrót, powinien być stosowany konsekwentnie w całej bazie
danych. Na przykład, jeżeli skrót PRAC został zastosowany dla PRACOWNIK, to
PRAC powinien być stosowany konsekwentnie w całej bazie danych.
102
Stosuj kompletne, mające znaczenie, nazwy z podkreśleniami
Nazwa kolumny DUZELITERYZPODKRESLENIAMI nie jest tak czytelna jak
DUZE_LITERY_Z_PODKRESLENIAMI.
Nie umieszczaj nazwy firmy czy produktu w nazwach obiektów
Firmy rozwijają się a produkty zmieniają nazwy. To są zbyt krótkotrwałe
elementy aby włączać je do obiektów baz danych.
Nie stosuj oczywistych przedrostków i przyrostków
Nie powinno się rozpoczynać nazwy bazy danych od „DB_”, czy nazwy każdej
perspektywy od „P”. Czasami przyrostki i przedrostki są bardzo użyteczne, jeśli
są stosowane konsekwentnie.
Nie twórz nazw obiektów wypełniających całe dostępne miejsce
Jeżeli system bazy danych pozwala na 32 znakowe nazwy tabel, warto zostawić
kilka pustych miejsc. Niektóre systemy dodają czasem do nazw przedrostki lub
przyrostki podczas manipulacji tymczasowymi kopiami tabel.
Nie używaj identyfikatorów w cudzysłowach
103
Zasady tworzenia nazw
Poniżej przedstawione są zasady nazywania obiektów zdefiniowane
w standardzie SQL99:
• identyfikator nie może być dłuższy niż 128 znaków. (wiele baz
danych ogranicza go do 32 lub mniej znaków)
• identyfikator może zawierać cyfry, litery i symbole.
• identyfikator musi zaczynać się od litery (lub innego dopuszczalnego
symbolu).
• identyfikator nie może zawierać spacji, ani innych znaków
specjalnych.
• identyfikator nie może być słowem kluczowym czy zarezerwowanym.
104
• w wielu przypadkach, identyfikatory muszą być unikatowe dla
każdego właściciela wewnątrz jego zakresu. Na przykład,
jakkolwiek Oracle pozwala stworzyć dwa obiekty o tej samej
nazwie w dwóch odrębnych schematach, generalnie jednak
wszystkie bazy danych i wszystkie tabele wewnątrz bazy
danych powinny mieć unikatowe nazwy.
• identyfikatory w cudzysłowach (nazwy obiektów wzięte w
cudzysłów) mogą być użyte do złamania niektórych powyżej
wymienionych zasad. Na przykład, tabela może mieć nazwę
„stawki##podatku”, ale nie stawki##podatku ponieważ
pierwszy identyfikator jest wzięty w cudzysłów. Tego typu
identyfikatory są czasem nazywane identyfikatorami
ograniczonymi (delimited identifiers.)
105
Literały
SQL uznaje za literał każdą wartość liczbową, znakową ,łańcuchową, czasową
czy logiczną, która nie jest identyfikatorem. Bazy danych SQL
pozwalają na używanie w programach SQL wielu rodzajów literałów.
Na przykład, SQL Server ma wśród typów liczbowych takie jak (między innymi):
integer, real, i money. Wtedy literały liczbowe mogą wyglądać
następująco:
30
-117
+883.3338
-6.66
$70000
2E5
7E-3
106
Jak widać z przykładu, SQL Server dopuszcza liczby ze znakiem lub
bez, w notacji zwykłej lub naukowej.
Ponieważ SQL ma typ danych money, można umieszczać w literałach
znak dolara ($).
SQL nie zezwala na używanie w literałach liczbowych, znaków innych
niż:
0 1 2 3 4 5 6 7 8 9 + -$ . E e
zatem nie pozwala na użycie przecinka.
Większość baz danych interpretuje przecinek jako symbol
oddzielający elementy. Np. wartość 3,000 będzie zinterpretowana
przez bazę danych jako 3 i, oddzielnie, 000.
107
Literały znakowe i łańcuchowe
powinny być ograniczane przez znaki apostrofu (‘ ’).
SQL pozwala również na stosowanie znaków cudzysłowu, pod
warunkiem, że literał jest ograniczony z obu stron w ten sam
sposób.
Jedyną różnicą pomiędzy literałem znakowym a łańcuchowym jest to, ze
literał znakowy zawiera tylko jeden znak, zaś łańcuchowy wiele
znaków.
Dodatkowo, literały znakowe i łańcuchowe nie ograniczają się wyłącznie
do alfabetu.
W praktyce, każdy drukowalny znak z zestawu znaków serwera może być
reprezentowany jako literał.
108
Wszystkie poniższe łańcuchy są literałami:
‘2004'
'$70,000 + 14000'
‘Był sobie raz człowiek z Nantucket,'
'Oct 28, 2003'
Przykłady te są zgodne z typem danych CHARACTER. Nie należy mylić
literału łańcuchowego ‘2004’ z literałem liczbowym 2004 .
Z jednej strony literały łańcuchowe są związane z typami danych CHAR
i nie mogą być stosowane w operacjach arytmetycznych.
Z drugiej strony wiele produktów baz danych przeprowadza
automatyczną konwersję literałów łańcuchowych podczas
porównywania z typami danych DATE.
109
Operatory i ograniczniki systemowe
Ograniczniki łańcuchów wyznaczają granice łańcucha znaków
alfanumerycznych.
Ograniczniki systemowe powodują, że znaki umieszczone
pomiędzy nimi mają specjalne znaczenie dla serwera baz
danych.
Ograniczniki są symbolami, które pozwalają wyznaczyć
hierarchię działań i elementów list.
Operatory to symbole używane do oceniania wyniku operacji
porównywania oraz symbole używane w operacjach
arytmetycznych i matematycznych.
110
Symbol
Użycie
+
Operator dodawania lub konkatenacji
-
Operator odejmowania lub wskaźnik zasięgu w wiezach
*
Operator mnożenia
/
Operator dzielenia
=
Operator równości (lewa strona jest równa prawej)
<> !=
Operator różności (lewa strona jest różna od prawej)
<
Operator mniejszości
>
Operator większości
<=
Operator „mniejsze lub równe”
>=
Operator „większe lub równe”
(
Ogranicznik wyrażenia lub hierarchii
)
Ogranicznik wyrażenia lub hierarchii
111
Symbol
Użycie
%
Symbol wieloznaczny
,
Separator elementów list
@
Oznaczenie zmiennej lokalnej
@@
Oznaczenie zmiennej globalnej
.
Kwalifikator oddzielający
‘‘
””
Oznaczenie łańcucha znakowego
””
Oznaczenie identyfikatora ograniczonego
--
Oznaczenie komentarza jednoliniowego
/*
Oznaczenie początku komentarza wieloliniowego
*/
Oznaczenie końca komentarza wieloliniowego
112
Słowa kluczowe i zarezerwowane
Tak jak pewne symbole pełnią w SQL specjalne funkcje, tak pewne
słowa lub wyrażenia mają również specjalne znaczenie.
Słowa kluczowe języka SQL, to wyrażenia, których znaczenie
jest tak związane z operacjami wewnątrz RDBMS, że ich
użycie w jakimkolwiek innym celu nie jest dozwolone; generalnie są
to słowa występujące w poleceniach SQL.
Na przykład słowo SELECT nie może wystąpić w nazwie tabeli.
Dobrym pomysłem jest unikanie umieszczania w nazwach kolumn
czy tabel słów kluczowych występujących w innych systemach baz
danych, ponieważ aplikacje baz danych są często konwertowane z
jednej implementacji na inną.
113
Słowa zarezerwowane
to wyrażenia, które nie mają specjalnego znaczenia teraz, ale
prawdopodobnie będą je miały w następnych wersjach
Dlatego są one zarezerwowane i nie powinny występować w nazwach
obiektów. W przeciwieństwie do słów kluczowych, słowa
zarezerwowane nie zawsze są wyrażeniami stosowanymi w poleceniach
SQL.
Większość tych słów jest związana z technologiami baz
danych, ale nie muszą mieć one wyraźnego związku z
poleceniami SQL..
114
Stosowanie języka SQL
Najważniejszym w SQL jest polecenie SELECT, oraz związane z nim
zastosowania – relacyjne operacje, znane jako: rzutowanie, selekcja i
złączenie.
Uproszczony przykład składni instrukcji SELECT jest przedstawiony poniżej:
SELECT lista_wyboru
FROM lista_tabel
WHERE kryteria_wyszukiwania
Poniższa instrukcja zawiera w sobie dwie z trzech operacji relacyjnych:
selekcję i rzutowanie:
SELECT data_wydatku, wysokość_wydatku, opis_wydatku
FROM wydatki
WHERE imie_pracownika = ‘Elmer‘
AND nazwisko_pracownika = ‘Fudd'
115
Rzutowanie
Rzutowanie (projekcja) to relacyjna operacja wybierania z tabeli konkretnych
kolumn danych.
Poniżej przedstawione jest zapytanie, które z tabeli autorzy wybiera imię,
nazwisko i stan zamieszkania autora:
SELECT au_imie, au_nazwisko, stan
FROM autorzy
wyniki każdego zapytania SELECT tego typu są przedstawiane jako
kolejna tabela, zawierająca wybrane dane:
au_imie
-------------------Jon
Adam
Mary
au_nazwisko
-----------------Marjorie
Smith
Pickford
stan
------CA
CA
CA
Tabela zawierająca wynik jest nazywana tabelą roboczą lub tabelą pochodną.
116
Selekcja
Selekcja jest relacyjną operacją wybierania z tabeli konkretnych rekordów.
Przeprowadzenie takiej operacji umożliwia klauzula WHERE instrukcji SELECT.
Działanie WHERE polega na odfiltrowaniu niepotrzebnych rekordów i
przedstawieniu jedynie rekordów żądanych. Poniższe zapytanie, otrzymane przez
przebudowanie poprzedniego przykładu, pozwala na wybranie autorów, którzy nie
mieszkają w Kaliforni:
SELECT au_imie
FROM autorzy
WHERE stan <> ‘CA’
au_imie
-------------------Jon
Adam
Mary
Innes
au_nazwisko stan
------------------ ------Smith
KS
Greene
TN
Blotchet-Halls OR
del Castillo
MI
Łącząc mozliwości rzutowania i selekcji w jednym zapytaniu, SQL pozwala
wybierać tylko żądane kolumny i rekordy
117
Złączenia
Złączenia są jednymi z najważniejszych w relacyjnej bazie danych. Złączenie
umieszcza dane z jednej lub kilku tabel w zbiorze wyników za pomocą jednego
zapytania.
Różni dostawcy pozwalają na różne liczby tabel w jednej operacji złączenia.
(Oracle nie ogranicza liczby tabel, ale Microsoft SQL Server pozwala na nie
więcej niż 256 tabel w jednej operacji złączenia.)
Tworzenie złączeń w standardzie ANSI polega na użyciu klauzuli JOIN w
instrukcji SELECT.
Starsza metoda, znana jako złączenie theta, dokonuje tej operacji w kluzuli
WHERE.
Na następnym slajdzie podane są przykłady obu metod:
118
wg. Standardu ANSI
---------------------------------SELECT pr.id_pracownika,
złączenie THETA
------------------------------SELECT pr.id_pracownika,
pr.imie_pracownika,
pr.nazwisko_pracownika,
j.opis_pracy
FROM pracownicy pr,
JOIN prace j ON pr.id_pracy = j.id_pracy
pr.imie_pracownika,
pr.nazwisko_pracownika,
j.opis_pracy
FROM pracownicy pr,
prace j
WHERE pr.id_pracy = j.id_pracy
Wymagane są wszystkie rekordy z tabeli pracownicy, zaś wartości z
tabeli prace są opcjonalne i dołączane tylko wtedy, gdy wartości w obu
tabelach pasują do siebie
119
Klauzula WHERE jest bardzo ważną częścią instrukcji SELECT.
Klauzula WHERE zawiera większość warunków wyszukiwania,
które odrzucają niepożądane dane z zapytania; pozostałe warunki
wyszukiwania są umieszczone w klauzuli HAVING.
Źle napisana klauzula WHERE może zrujnować całkowicie
instrukcję SELECT, dlatego jest bardzo ważne opanowanie
niuansów tej klauzuli.
Na następnej stronie przedstawiony jest przykład wieloczęściowej
klauzuli WHERE:
120
SELECT
a.au_imie,
a.au_nazwisko,
t2.tytul,
convert(char,t2.data_publikacji)
FROM
autorzy a
JOIN
autorzy_tytuly t1 ON a.au_id = t1.au_id
JOIN
tytuly t2 ON t1.id_tytulu = t2.id_tytulu
WHERE
(t2.typ = 'business' OR t2.typ = 'popularna_komputerowa')
AND
t2.zaliczka> $5500
ORDER BY
t2.tytul
Należy zwrócić uwagę, że nawiasy ustalają porządek wykonywania działań w
klauzuli WHERE według priorytetu operatorów
121
Warunek
Prosty
warunek
logiczny
Składnia
Przykład
WHERE[NOT]
SELECT au_id
Do porównania wyrażeń można użyć
wyrażenie
FROM autorzy
operator_porównania
WHERE au_id =‘172-32-1176’
operatorów <, >, < >, >, <= oraz =.
Istnieją również operatory porównania
specjalne, jak LIKE.
wyrażenie
SELECT au_id
FROM autorzy
WHERE au_nazwisko NOT LIKE
‘John%‘
Złożony
warunek
logiczny
Użycie i opis
WHERE[NOT]
SELECT au_id
wyrażenie
FROM autorzy
operator_porównania
WHERE au_id = ‘172-32-1176’
wyrażenie
AND au_nazwisko =‘WHITE’
{AND|OR}
wyrażenie
operator_porównania
wyrażenie
Słowo kluczowe NOT sprawdza
odwrotność warunku podanego za
pomocą w/w operatorów oraz
operatorów specjalnych LIKE, NULL,
BETWEEN IN, EXIST, ANY i ALL
AND łączy wiele operatorów i zwraca
wynik, jeśli oba warunki są spełnione.
AND ma wyższy priorytet od
pozostałych.
Nawiasy w klauzuli WHERE wpływają
na priorytet operatorów. OR łączy
warunki i zwraca wartość.
Priorytet OR jest niższy niż AND
122
Warunek
Składnia
Przykład
Użycie i opis
Sprawdze
nie
wartości
NULL
WHERE[NOT]
SELECT *
IS NULL oraz
nazwa kolumny IS
FROM tytuly
[NOT]NULL
WHERE cena IS NULL
IS NOT NULL powodują sprawdzenie
występowania wartości null (lub
wszystkich wartości poza null)
Sprawdze
nie
więzów
WHERE[NOT]
SELECT a.au_imie,
wartość(i)_kolumny
a.au_nazwisko,
[(+)]=[(+)]
t2.tytul
wartość(i)_kolumny
FROM autorzy a,
lub
autorzy_tytuly t1,
WHERE[NOT]
tytuly t2
wartość(i)_kolumny
WHERE a.au_id = t1,au_id
[*]=[*]
AND
wartość(i)_kolumny
t1.id_tytulu = t2.id_tytulu
Sprawdzenie więzów może być
przeprowadzone przez obliczenie
wspólnego klucza dla dwóch lub
większej liczby tabel
ORDER BY t2.tytul
Sprawdze
nie wzorca
WHERE[NOT]
wartość(i)_kolumny
[NOT]LIKE
‘łańcuch_wzorca’
/* wybranie wszystkich
numerów rozpoczynających się
od 415 */
LIKE powoduje zastosowanie
dopasowania wzorca podanego, jako
łańcuch w apostrofach
SELECT *
FROM autorzy
WHERE telefon LIKE ‘415%’
123
Warunek
Sprawdze
nie
istnienia
Składnia
Przykład
WHERE[NOT]
SELECT pl.nazwa_wydawcy
EXISTS
FROM wydawcy pl
(podzapytanie)
WHERE EXISTS
(SELECT *
FROM tytuły
WHERE
Użycie i opis
EXISTS jest stosowane zawsze w
połączeniu z podzapytaniem;
podzapytanie to raczej sprawdza
istnienie danych, niż je zwraca.
Przykład ilustruje zwrócenie
wszystkich wydawców książek o
psychologii
id_wydawcy = pl.id_wydawcy
AND typ = ‘psychologia’)
Sprawdze
nie
zakresu
BETWEEN
WHERE[NOT]
SELECT *
wyrażenie[NOT]
FROM tytuly
BETWEEN wyrażenie
WHERE roczna_sprzedaz
AND wyrażenie
Sprawdze
nie
zakresu
IN
WHERE[NOT]
wyrażenie
[NOT]IN
(lista_wartosci |
podzapytanie)
BETWEEN 4000 AND 9000
/* wybranie wszystkich
numerów rozpoczynających się
od 415 */
SELECT *
FROM autorzy
WHERE telefon LIKE ‘415%’
BETWEEN sprawdza czy wyrażenie
należy do zakresu. Działa identycznie
z:
WHERE(wyrazenie >=x AND
wyrażenie <= y)
IN zwraca zbiór wartości, które pasują
do dowolnej wartości z listy lub
dowolnego rekordu wynikowego
podzapytanie lista wartości i
podzapytanie powinny być ujęte w
nawiasy
124
Warunek
Sprawdze
nie
zakresu
SOME i
ALL
Składnia
WHERE[NOT]
wyrażenie
operator_porównania
Przykład
-- działa tak samo jak IN
SELECT au_nazwisko,
au_imie
{[ANY|SOME]| ALL}
FROM
(podzapytanie)
WHERE miasto = ANY
autorzy
(SELECT miasto
FROM wydawcy)
-- działa tak,jak NOT IN
Użycie i opis
ALL oraz SOME są zawsze
stosowane z podzapytaniem i
operatorem porównania, takim jak
Zapytanie z ALL zwraca TRUE lub
FALSE, jeśli wszystkie wartości
podzapytania pasują do wartości
klauzuli WHERE (lub HAVING) lub
jeśli podzapytanie nie zwraca żadnych
wierszy
SELECT au_nazwisko,
au_imie
FROM
autorzy
WHERE miasto <> ALL
(SELECT miasto
FROM wydawcy)
-- działa tak,jak NOT IN
SELECT tytul,
FROM
SOME działa tak samo jak EXISTS.
Działa podobnie jak ALL, poza tym że
zwraca TRUE, jeśli jakakolwiek z
wartości zwróconych przez
podzapytanie spełnia warunek
porównania w klauzuli WHERE
zewnętrznej instrukcji
tytuly
WHERE zaliczka > ANY
(SELECT miasto
FROM wydawcy)
125
Warunek
Sprawdze
nie
zakresu
SOME i
ALL (c.d.)
Składnia
WHERE[NOT]
wyrażenie
operator_porównania
{[ANY|SOME]| ALL}
(podzapytanie)
Przykład
Użycie i opis
/* wszystkie tytuły, które mają
zaliczkę wiekszą niż minimalna
zaliczka płacona w NEW Moon
Books */
SELECT tytul,
FROM
tytuly
WHERE zaliczka > ANY
(SELECT zaliczka
FROM wydawcy, tytuly)
WHERE tytuly.id_tytulu
= wydawcy.id_tytulu
AND nazwa_wydawcy =
‘NEW Moon Books’)
126
Klauzula ORDER BY jest również ważną częścią instrukcji SELECT.
Zbiór wyników może być posortowany według porządku sortowania
określonego w bazie danych.
Sortowanie może być rosnące (ASC) lub malejące (DESC).
Porządek rosnący jest domyślny.
Jeśli ta klauzula nie zostanie podana, to w większości implementacji
rekordy zostaną zwrócone w kolejności fizycznego występowania w tabeli lub
zgodnie z zastosowanym w zapytaniu indeksem.
Może to powodować problemy, jeśli indeks czy fizyczny porządek danych
zmieni się. Warto zatem zdefiniować porządek jawnie.
127
Przykład klauzuli ORDER BY
-- zapytanie
SELECT p.id_prac „ID pracownika”,
rtrim(p.imie) || rtrim(p.nazwisko) ”Imię i nazwisko”,
s.id_stan „Stanowisko”,
FROM
pracownicy p,
stanowiska s
WHERE
p.id_stan = s.ic_stan
AND
p.nazwa = ‘Acquisitions Manager”,
ORDER BY
p.imie DESC
p.nazwisko ASC
128
-- wyniki
ID pracownika
-------------------------
Imię i nazwisko
-----------------------------
Stanowisko
--------------------
M-R38834F
Manager
Marta Rojek
Acquisition
MAS7046F
Manager
Maria Siwecka
Acquisition
KJJT56-23F
Manager
Katarzyna Jabłońska
Acquisition
GHT50522M
Manager
Grzegorz Tomaszewski
Acquisition
Po stworzeniu zbioru wyników zgodnego z warunkami wyszukiwania,
jest on sortowany według imienia pracownika w porządku malejącym.
Jeśli imiona są takie same, następuje sortowanie według nazwisk w
porządku rosnącym.
129
Normalizacja
130
NORMALIZACJA jest PROCESEM IDENTYFIKOWANIA
logicznych związków między elementami danych
oraz projektowania bd w taki sposób,
aby reprezentowała (odwzorowywała) ona te związki,
ale bez występowania anomalii
korzystania z plików bd
LOGICZNE ZWIĄZKI między elementami danych
nazywamy ZWIĄZKAMI ZALEŻNOŚCI lub DETERMINOWANIA
131
ZALEŻNOŚĆ (determinowanie) między elementami danych
wskazuje KIERUNEK W ZWIĄZKU
Jeżeli element danych A jest elementem DETERMINUJĄCYM, zaś B
ZALEŻNYM elementem danych,
to kierunek związku jest od A do B, a nie odwrotnie.
A
B
132
ISTNIEJĄ DWA GŁÓWNE TYPY ZALEŻNOŚCI:
9 ZALEŻNOŚCI FUNKCYJNE (jednowartościowe)
9 ZALEŻNOŚCI NIEFUNKCYJNE (wielowartościowe)
Element danych B jest FUNKCYJNIE ZALEŻNY od elementu A,
jeżeli dla każdej wartości A istnieje JEDNA, JEDNOZNACZNIE
OKREŚLONA wartość B.
Element danych B jest niefunkcyjnie zależny od elementu danych A,
jeżeli dla każdej wartości A istnieje OGRANICZONY ZBIÓR
WARTOŚCI danych B.
133
Moduły
Nazwa_modulu
Nr_prac
Nazw_pracownika
Nr_studenta
Nazw_studenta
Ocena
Typ_oceny
SRBD
315
SZYMCZYK
54678
STAŃCZAK
B3
K1
SRBD
315
SZYMCZYK
54678
STAŃCZAK
B1
K2
SRBD
315
SZYMCZYK
55675
TOMCZAK
B2
K1
SRBD
315
SZYMCZYK
52378
FUJARSKI
B3
K1
SRBD
315
SZYMCZYK
52378
FUJARSKI
B1
K2
PRBD
315
SZYMCZYK
54678
STAŃCZAK
B3
K1
PRBD
315
SZYMCZYK
53276
CZERWIŃSKI
B2
K1
DBD
415
PAWŁOWSKI
57111
POLACZEK
A1
EGZAMIN
Usunięcie studenta nr 57111 ? tracimy informacje nt. DBD i powiązanego z tym
przedmiotem wykładowcy – EFEKT UBOCZNEGO USUNIĘCIA
Zmiana wykładowcy DBD ? należy zmienić także numer wykładowcy - EFEKT
UBOCZNEJ MODYFIKACJI
Wpisanie nowego studenta na moduł ? nie możemy wprowadzić rekordu studenta
dopóty, dopóki nie będzie przynajmniej jednego zaliczenia – EFEKT
UBOCZNEGO WSTAWIENIA.
134
Moduły
Nazwa_modulu
Nr_prac
Nazw_pracownika
Nr_studenta
Nazw_studenta
Ocena
Typ_oceny
SRBD
315
SZYMCZYK
54678
STAŃCZAK
B3
K1
SRBD
315
SZYMCZYK
54678
STAŃCZAK
B1
K2
SRBD
315
SZYMCZYK
55675
TOMCZAK
B2
K1
SRBD
315
SZYMCZYK
52378
FUJARSKI
B3
K1
SRBD
315
SZYMCZYK
52378
FUJARSKI
B1
K2
PRBD
315
SZYMCZYK
54678
STAŃCZAK
B3
K1
PRBD
315
SZYMCZYK
53276
CZERWIŃSKI
B2
K1
DBD
415
PAWŁOWSKI
57111
POLACZEK
A1
EGZAMIN
Tabela MODUŁY nie stanowi logicznej reprezentacji zdefiniowanej relacji;
Komórka tabeli dla atrybutów Nr_studenta, Nazw_studenta, Ocena i Typ_oceny
zawiera wiele wartości;
Nr_studenta, Nazw_studenta, Ocena i Typ_oceny powtarzają się względem atrybutu
Nazwa_modułu.
135
Relacja jest w 1NF wtedy i tylko wtedy, gdy każdy jej atrybut
NIEKLUCZOWY jest FUNKCYJNIE ZALEŻNY od KLUCZA GŁÓWNEGO;
Atrybuty Nr_studenta, Nazw_studenta, Ocena i Typ_oceny nie są
funkcyjnie zależne od klucza głównego Nazwa_Modulu;
Natomiast atrybuty Nr_prac i Nazw_pracownika są funkcyjnie
zależne;
Oznacza to konieczność utworzenia dwóch tabel:
* Dla atrybutów funkcyjnie zależnych;
* Dla atrybutów funkcyjnie niezależnych.
136
Moduły
Nazwa_modulu
Nr_prac
Nazw_pracownika
SRBD
315
SZYMCZYK
PRBD
315
SZYMCZYK
DBD
415
PAWŁOWSKI
Klucz główny
Nazwa_ modułu
PIERWSZA
POSTAĆ
NORMALNA
Zaliczenia
Nazwa_modulu
Nr_studenta
SRBD
54678
SRBD
Ocena
Typ_oceny
STAŃCZAK
B3
K1
54678
STAŃCZAK
B1
K2
SRBD
55675
TOMCZAK
B2
K1
SRBD
52378
FUJARSKI
B3
K1
SRBD
52378
FUJARSKI
B1
K2
PRBD
54678
STAŃCZAK
B3
K1
PRBD
53276
CZERWIŃSKI
B2
K1
DBD
57111
POLACZEK
A1
EGZAMIN
© Andrzej Barczak, Janusz Kosiń
Kosiński 2004
Nazw_studenta
Klucz główny
Nazwa_modulu,
Nr_studenta,
Typ_oceny
137
Atrybut B relacji jest w pełni funkcyjnie zależny od atrybutu
A tej relacji
(który może być atrybutem złożonym, tj. zbiorem atrybutów prostych)
Jeśli JEST FUNKCJONALNIE ZALEŻNY OD NIEGO, ale nie jest
funkcjonalnie zależny od żadnego podzbioru zbioru A.
Relacja jest w 2NF wtedy i tylko wtedy, gdy jest w 1NF i każdy
atrybut niekluczowy /nie należący do żadnego klucza/ jest w pełni
funkcyjnie zależny od klucza głównego
(inaczej mówiąc przy przeprowadzeniu relacji z 1NF do 2NF należy usunąć
niepełne zależności funkcyjne tj. atrybuty zależne od części klucza);
© Andrzej Barczak, Janusz Kosiń
Kosiński 2004
138
TABELA ZALICZENIA:
* * Potrzebne są wszystkie elementy klucza aby wyznaczyć
ocenę;
* * Nazwa_modulu i Typ_oceny NIE MAJĄ ŻADNEGO WPŁYWU
na Nazw_studenta Nr_studenta SAM DETERMINUJE Nazw_studenta;
* * Dlatego rozdzielamy determinujące i zależne elementy
danych na osobne tabele.
© Andrzej Barczak, Janusz Kosiń
Kosiński 2004
139
Moduły
Nazwa_modulu
Nr_prac
Nazw_pracownika
SRBD
315
SZYMCZYK
PRBD
315
SZYMCZYK
DBD
415
PAWŁOWSKI
Zaliczenia
DRUGA POSTAĆ
NORMALNA
PRZY PRZEPROWADZENIU RELACJI Z 1NF
DO 2NF CHODZI O USUNIĘCIE NIEPEŁNEJ
ZALEŻNOŚCI FUNKCJONALNEJ tj.
ATRYBUTÓW ZALEŻNYCH OD CZĘŚCI
KLUCZA
Studenci
Nazwa_modulu
Nr_studenta
Ocena
Typ_oceny
Nr_studenta
Nazw_studenta
SRBD
54678
B3
K1
54678
STAŃCZAK
SRBD
54678
B1
K2
54678
STAŃCZAK
SRBD
55675
B2
K1
55675
TOMCZAK
SRBD
52378
B3
K1
52378
FUJARSKI
SRBD
52378
B1
K2
52378
FUJARSKI
PRBD
54678
B3
K1
54678
STAŃCZAK
PRBD
53276
B2
K1
53276
CZERWIŃSKI
DBD
57111
A1
EGZAMIN
57111
POLACZEK
© Andrzej Barczak, Janusz Kosiń
Kosiński 2004
140
Niech A, B, C, będą trzema rozłącznymi podzbiorami
atrybutów.
Atrybut C jest przechodnio (tranzytywnie) funkcjonalnie zależny
od atrybutu A, jeśli C jest funkcjonalnie zależny od atrybutu B, atrybut
B jest funkcjonalnie zależny od atrybutu A, atrybut A zaś nie jest
funkcjonalnie zależny od B lub B nie jest funkcjonalnie zależny OD C.
Jeśli A B, B
C i nie prawda, że gdy B
A lub C
B
to A wyznacza w sposób przechodni C
Relacja jest w 3NF wtedy i tylko wtedy, gdy jest w 2NF i
każdy jej niekluczowy atrybut jest bezpośrednio zależny (a nie
przechodnio) od klucza głównego
141
ABY PRZEJŚĆ Z 2NF DO 3NF, NALEŻY USUNĄĆ TAK ZWANE
ZALEŻNOŚCI PRZECHODNIE MIĘDZY DANYMI
* Rozważamy każdą tabelę i dla każdej pary niekluczowych
elementów danych zadajemy pytanie, czy wartość pola a zależy
od wartości pola b lub odwrotnie?
Jeżeli odpowiedź brzmi tak, to przenosimy powiązane elementy
danych do oddzielnej tabeli
* Zależności przechodnie istnieją w tabeli Moduły
Nr_prac determinuje Nazw_pracownika.
Atrybut Nazw_pracownika jest zatem przechodnio zależny od
Nazwa_modulu;
Nr_prac pretenduje, aby być kluczem głównym;
tworzymy oddzielną tabelę o nazwie Wykładowcy
z Nr_prac jako kluczem głównym.
142
Moduły
Nazwa_modulu
Wykładowcy
Nr_prac
Nr_prac
Nazw_pracownika
SRBD
315
315
SZYMCZYK
PRBD
315
315
SZYMCZYK
DBD
415
415
PAWŁOWSKI
Zaliczenia
TRZECIA
POSTAĆ
NORMALNA
Studenci
Nazwa_modulu
Nr_studenta
Ocena
Typ_oceny
Nr_studenta
Nazw_studenta
SRBD
54678
B3
K1
54678
STAŃCZAK
SRBD
54678
B1
K2
54678
STAŃCZAK
SRBD
55675
B2
K1
55675
TOMCZAK
SRBD
52378
B3
K1
52378
FUJARSKI
SRBD
52378
B1
K2
52378
FUJARSKI
PRBD
54678
B3
K1
54678
STAŃCZAK
PRBD
53276
B2
K1
53276
CZERWIŃSKI
DBD
57111
A1
EGZAMIN
57111
POLACZEK
143
PRZYSIĘGA NORMALIZACJI (parafraza):
* * BEZ POWTÓRZEŃ;
* * POLA ZALEŻĄ OD KLUCZA;
* * OD CAŁEGO KLUCZA;
* * I NICZEGO INNEGO, TYLKO KLUCZA;
* * TAK MI DOPOMÓŻ CODD.
144
ZALEŻNOŚCI FUNKCYJNE
Element
determinujący
Element
zależny
Numer_pracownika
Nazwisko_pracownika
Numer_zamowienia
Data_zamowienia
Kod_kursu
Numer_studenta
145
ZALEŻNOŚCI NIEFUNKCYJNE
(wielowartościowe)
Element danych B jest niefunkcyjnie zależny od elementu danych A,
jeżeli dla każdej wartości elementu A istnieje ograniczony zbiór
wartości elementu danych B
Nazwa_modulu
Numer_pracownika
Numer_studenta
Numer_pracownika
Język_pracownika
Nazwisko_pracownika
146
ZALEŻNOŚCI PRZECHODNIE
Numer_pracownika
Nazwa_ dzialu
Lokalizacja
ZALEŻNOŚCI ZŁOŻONE
Nazwa_ modulu
Numer_studenta
Ocena
Typ_zaliczenia
147
AKOMODACJA ZALEŻNOŚCI FUNKCYJNYCH
Numer_
pracownika
Nazwa_
dzialu
Lokalizacja
Nazwisko_
pracownika
Reguła Boyce’a – Codda
Każdy funkcyjnie determinujący element staje się kluczem głównym (kluczem
kandydującym relacji)
Wszystkie bezpośrednio zależne od niego elementy danych stają się
niegłównymi atrybutami tabeli
148
DIAGRAM ZALEŻNOŚCI
Działy
Pracownicy
Nazwa_dzialu
Lokalizacja
Numer_pracownika
Nazwisko_
pracownika
149
AKOMODACJA ZALEŻNOŚCI NIEFUNKCYJNYCH
Działy
Nazwa_dzialu
Lokalizacja
Pracownicy
Jezyk
Nr_pracownika
Nazwisko_
pracownika
Jezyk_
pracownika
Każdy
Każdyniefunkcyjnie
niefunkcyjniezależny
zależny
element
elementstaje
stajesię
sięczęścią
częścią
klucza
kluczagłównego
głównegotabeli
tabeli
(Tworzymy
(Tworzymyklucz
kluczzłożony
złożony
zzdeterminującego
determinującegoelementu
elementu
danych
danychi izależnych
zależnychelementów
elementów
danych
danychwchodzących
wchodzącychwwskład
skład
związku
związkuniefunkcyjnego)
niefunkcyjnego)
150
Aby przejść z 3NF do 4NF,
szukamy tabel, które
zawierają dwie lub więcej
zależności
wielowartościowych
nr_pracownika
umiejetnosci
jezyk
24
OBSLUGA KOMPUTERA
ANGIELSKI
24
OBSLUGA KOMPUTERA
FRANCUSKI
24
DYKTOWANIE
ANGIELSKI
35
OBSLUGA KOMPUTERA
NIEMIECKI
35
DYKTOWANIE
FRANCUSKI
46
OBSLUGA KOMPUTERA
FRANCUSKI
46
OBSLUGA KOMPUTERA
ANGIELSKI
(umiejętności i język nie są wewnętrznie powiązane)
151
CZWARTA POSTAĆ NORMALNA
Umiejętnosci
Numer_pracownika
Jezyk
W 4NF te dwa związki nie mogą być reprezentowane
w jednej tabeli. Występowanie dwóch niezależnych zależności
wielowartościowych oznacza, że musimy podzielić tabelę na dwie
tabele
152
nr_pracownika
umiejetnosci
24
OBSLUGA KOMPUTERA
24
DYKTOWANIE
35
OBSLUGA KOMPUTERA
35
DYKTOWANIE
46
OBSLUGA KOMPUTERA
nr_pracownika
CZWARTA
POSTAĆ
NORMALNA
jezyk
24
ANGIELSKI
24
FRANCUSKI
35
NIEMIECKI
35
FRANCUSKI
46
FRANCUSKI
46
ANGIELSKI
153
Relacja jest w 5NF wtedy i tylko wtedy, gdy jest w 4NF
i nie istnieje jej rozkład odwracalny na zbiór mniejszych tabel
dealer
firma
pojazd
Szewczyk
Ford
OSOBOWY
Szewczyk
Lada
FURGONETKA
Zasada
Ford
FURGONETKA
Zasada
Lada
OSOBOWY
FIRMA
DEALER
POJAZD
PIĄTA POSTAĆ
NORMALNA
5NF dotyczy powiązanych
między sobą zależności
wielowartościowych,
nazywanych
też zależnościami
złączenia
154
PRZYKŁAD - WYJŚCIOWY SCHEMAT RELACJI 1NF
Zamówienie
WADY:
* Numer_zam
* Data_zam
* Indeks_kl
* Nazwa_kl
* Adres_kl
Zamówienie - Wyrób
* Numer_zam
* Kod_wyr
* Nazwa_wyr
* Cena_wyr
* Ilość_zam
* Wielokrotnie dublowany adres i nazwa
klienta
* Możliwość wystąpienia niespójności
danych na skutek uaktualniania
adresu klienta w jednych krotkach i
pozostawienie starego w innych
* Nie możemy zapamiętać adresu klienta, który
nie złożył żadnego zamówienia
* Usuwając informacje o zamówieniu złożonym
przez danego klienta możemy
utracić informacje o kliencie jeżeli
to był jedyny klient
* Wartosc_zam
155
Przykład: Wyjściowy
schemat relacji 1NF
ZALEŻNOŚCI
FUNKCYJNE
Zamowienie
* Numer_Zam
* Data_Zam
* Indeks_Kl
* Nazwa_Kl
* Adres_Kl
Zamowienie - Wyrob
* Numer_Zam
* Kod_Wyr
* Nazwa_Wyr
* Cena_Wyr
* Ilosc_Zam
* Wartosc_Zam
156
W wyjściowym schemacie relacji istnieje niepełna zależność
funkcyjna
Kod_wyr
Nazwa_wyr
Kod_wyr
Cena_wyr
* atrybuty Nazwa_wyr i Cena_wyr są funkcyjnie zależne od
podzbioru klucza relacji, tj. od Kod_wyr stanowiącego część
klucza (Numer_zam, Kod_wyr)
* przy przeprowadzeniu relacji z 1NF do 2NF należy usunąć
niepełne zależności tj. atrybuty zależne od części klucza
157
WADY
Dublowanie się danych, np.
Indeks_Kl, Nazwa_Kl,
Adres_Kl,
(Istnieją zależności przechodnie)
ZALEŻNOŚCI
FUNKCYJNE
Przykład c.d.:
Relacja w 2NF
Zamowienie
* Numer_Zam
* Data_Zam
* Indeks_Kl
* Nazwa_Kl
* Adres_Kl
Zamowienie - Wyrob
Wyrob
* Numer_Zam
* Kod_Wyr
* Kod_Wyr
* Nazwa_Wyr
* Ilosc_Zam
* Cena_Wyr
* Wartosc_Zam
158
W relacji Zamówienie zachodzą następujące przechodnie zależności
funkcyjne
Numer_Zam
Indeks_Kl
A
B
Indeks_Kl
Nazwa_Kl
B
C
(odwrotna zależność nie jest prawdziwa)
* Nazwa_Kl jest przechodnio funkcjonalnie zależna od Numer_Zam
* Przy przeprowadzeniu relacji do 3NF chodzi o usunięcie
przechodnich zależności funkcyjnych
(atrybutów zależnych od innych niż klucz relacji)
* Jeśli A
BiB
C czyli C przechodnio zależy od A, należy
podzielić je na dwie relacje (AB) i (BC)
159
ZALEŻNOŚCI
FUNKCYJNE
Przykład c.d.:
Relacja w 3NF
Zamowienie
Klient
* Numer_Zam
* Indeks_Kl
* Data_Zam
* Nazwa_Kl
* Indeks_Kl
* Adres_Kl
Zamowienie - Wyrob
Wyrob
* Numer_Zam
* Kod_Wyr
* Kod_Wyr
* Nazwa_Wyr
* Ilosc_Zam
* Cena_Wyr
* Wartosc_Zam
160
Funkcje
sumaryczne i
podzapytania
161
Funkcja jest specjalnym rodzajem polecenia w zbiorze poleceń
SQL99.
Funkcje to jednowymiarowe polecenia zwracające jedną wartość.
Wartość funkcji może być uzależniona od parametrów wejściowych, jak w
przypadku funkcji obliczającej średnią z listy wartości bazy danych.
Wiele funkcji nie używa jednak parametrów żadnego typu, jak funkcja
CURRENT_TIME zwracająca bieżący czas systemu.
Każdy dostawca systemów baz danych oferuje własną listę funkcji
wewnętrznych wykraczających poza zakres standardu SQL.
Większość dostawców baz danych oferuje możliwość obsługiwania funkcji
definiowanych przez użytkownika (UDF – User Definable Function).
162
Funkcje mogą być deterministyczne i niedeterministyczne.
Funkcja deterministyczna zawsze zwraca ten sam wynik, jeśli podano te
same wartości wejściowe.
Funkcja niedeterministyczna zwraca inny wynik przy każdym
wywołaniu, nawet jeśli podano te same wartości wejściowe.
To jest ważne, ponieważ od tego zależy sposób użycia funkcji w
perspektywach, funkcjach UDF czy procedurach składowanych.
Zasady i ograniczenia są różne u poszczególnych dostawców więc
należy korzystać z dokumentacji poszczególnych systemów baz
danych.
Na przykład Microsoft SQL Server pozwala na tworzenie indeksu dla
wyrażenia kolumnowego tylko wtedy, jeśli wyrażenie nie zawiera funkcji
niedeterministycznych.
163
Typy funkcji
Istnieje kilka podstawowych typów i kategorii funkcji w SQL99 i
implementacjach SQL u dostawców.
Podstawowymi są:
Funkcje agregujące
Działają na zbiorze wartości, ale zwracają pojedynczą wartość
podsumowującą.
Funkcje skalarne
Działają na pojedynczej wartości i zwracają jedną wartość na
podstawie wartości wejściowej. Niektóre funkcje skalarne, np.
CURRENT_TIME, nie wymagają żadnych argumentów.
164
Funkcje agregujące
Funkcje agregujące zwracają pojedynczą wartość na podstawie zbioru innych
wartości. Jeśli są używane wraz z innymi wyrażeniami w liście instrukcji SELECT,
SELECT musi mieć klauzulę GROUP BY. Klauzula ta nie jest wymagana, jeśli
funkcje agregujące są jedynymi wartościami zwracanymi przez SELECT.
AVG (wyrażenie)
Oblicza średnią wartość kolumny podanej w wyrażeniu
COUNT (wyrażenie)
Liczy wiersze podane w wyrażeniu
COUNT(*)
Liczy wszystkie wiersze podanej tabeli lub perspektywy
MIN(wyrażenie)
Znajduje minimalną wartość w kolumnie podanej w wyrażeniu
MAX(wyrażenie)
Znajduje maksymalną wartość w kolumnie podanej w
wyrażeniu
SUM(wyrażenie)
Oblicza sumę wartości kolumny podanej w wyrażeniu
ANY, EVERY i SOME są uważane za funkcje agregujące, są
jednak najczęściej stosowane jako kryteria zakresu wyszukiwania,
ponieważ w ten sposób są najczęściej stosowane - klauzule
związane z SELECT ... WHERE
165
AVG i SUM
Poniższe zapytanie oblicza średnią roczną sprzedaż każdego typu
książek:
SELECT
typ, AVG(roczna_sprzedaz) AS „srednia_roczna_sprzedaz”
FROM
tytuly
GROUP BY typ;
Zaś to zapytanie zwraca sumę rocznej sprzedaży książek każdego typu:
SELECT
typ, SUM(roczna_sprzedaz) AS „srednia_roczna_sprzedaz”
FROM
tytuly
GROUP BY typ;
AVG i SUM są obsługiwane
przez Microsoft SQL Server,
MYSQL, Oracle i PostgreSQL
166
COUNT
Funkcja COUNT ma trzy warianty. COUNT (*) liczy wszystkie wiersze w
docelowej tabeli bez względu na to, czy zawierają wartość NULL,
czy nie, COUNT(wyrażenie) zlicza w podanej kolumnie lub
wyrażeniu wiersze, które nie zawierają wartości NULL.
COUNT(DISTINCT wyrażenie) podaje liczbę różnych (nie NULL)
wartości w kolumnie lub wyrażeniu.
Poniższe wyrażenie liczy wszystkie wiersze tabeli:
SELECT COUNT(*) FROM wydawcy;
Zaś to zapytanie znajduje liczbę państw, w których znajdują się wydawcy:
SELECT COUNT(DISTINCT kraj) „Liczba_krajow”)
FROM wydawcy;
167
MIN i MAX
MIN(wyrażenie) i MAX(wyrażenie) znajdują minimalną i maksymalną
wartość (czasu, łańcuchową, czy liczbową) w zbiorze wierszy. Można w tych
funkcjach stosować DISTINCT i ALL, ale nie wpływa to na wynik.
Poniższe zapytanie znajduje najlepszą i najgorszą wartość rocznej
sprzedaży dowolnego tytułu:
SELECT
‘MIN’ = MIN(roczna_sprzedaz). ‘MAX’ = MAX(roczna_sprzedaz) FROM
tytuly;
Funkcje agregujące są często używane w klauzuli HAVING zapytań z grupy
GROUP BY:
SELECT
FROM
‘kategoria’, AVG(cena) ‘srednia_cena’
tytuly
GROUP BY typ
HAVING
AVG(cena) > 15
MIN i MAX są obsługiwane przez Microsoft SQL Server, MYSQL, Oracle i PostgreSQL
168
Funkcje skalarne - kategorie
wbudowane
Przeprowadzają operacje na wartościach lub ustawieniach w
budowanych w bazę danych.
Oracle używa terminu „wbudowany” do opisu wszystkich funkcji
dostarczanych przez Oracle, zatem „wbudowanych” w ten DBMS –
czyli jest to inne stosowanie tego terminu
daty i czasu
Przeprowadzają operacje na polach zawierających datę i czas i
zwracają wyniki typu date, time
liczbowe
Przeprowadzają operacje na danych liczbowych i zwracają wartości
liczbowe
znakowe
Przeprowadzają operacje na wartościach tekstowych (char, varchar,
nchar, nvarchar, CLOB) i zwracają łańcuch lub wartość liczbową,
169
Wbudowane funkcje skalarne
CURRENT_DATE
Bieżąca data
CURRENT_TIME
Bieżący czas
CURRENT_TIMESTAMP
Bieżąca data i czas
CURENT_USER
Identyfikuje aktywnego użytkownika w serwerze bazy danych
SESSION_USER
Identyfikuje obecnie aktywny identyfikator autoryzacji
(AuthorizationID), jeśli różni się od identyfikatora użytkownika
SYSTEM_USER
Identyfikuje aktywnego użytkownika w systemie operacyjnym
komputera lokalnego
Poniższe zapytania pobierają wartości wbudowanych funkcji
(różne dla różnych dostawców):
/*MySQL */
SELECT CURRENT_TIMESTAMP;
-> ‘2002-12-15 23:50:26’
/*Microsoft SQL Server */
SELECT CURRENT_TIMESTAMP
GO
-> ‘Dec 15, 2002 23:50:26’
/*Oracle */
SELECT USER FROM; dual;
-> dylan
170
Liczbowe funkcje skalarne
BIT_LENGHT
(wyrażenie)
Zwraca liczbę całkowitą oznaczająca liczbę bitów w wyrażeniu
CHAR_LENGHT
(wyrażenie)
Zwraca liczbę całkowitą oznaczającą liczbę znaków w
wyrażeniu
EXTRACT(wyrażenie
daty-czasu, część_daty
FROM wyrażenie)
Pozwala na wyodrębnienie z wyrażenia części daty (YEAR,
MONTH, DAY, HOUR, MINUTE, SECOND,
TIMEZONE_HOUR lub TIMEZONE_MINUTE)
OCTET_LENGHT
(wyrażenie)
Zwraca liczbę całkowitą reprezentującą liczbę oktetów w
wyrażeniu. Jest to taka sama wartość jak BIT_LENGHT
POSITION
(podłańcuch IN
łańcuch)
Zwraca liczbę całkowitą oznaczającą pozycję początku
szukanego podłańcucha w łańcuchu poszukiwanym
171
Funkcje znakowe
Podstawowe funkcje znakowe oferują kilka możliwości. Jako wynik
zwracają łańcuch znaków. Niektóre funkcje są dwuargumentowe,
tzn. działają jednocześnie na dwóch łańcuchach znaków.
SQL99 opisuje następujące funkcje znakowe:
CONCATENATE
Łączy dwa (lub więcej) wyrażenia literalne, wartości kolumn lub
zmiennych razem w jeden łańcuch znaków
CONVERT
Konwertuje łańcuch na inną reprezentację w tym samym zestawie
znaków
LOWER
Konwertuje łańcuch na złożony z samych małych liter
SUBSTRING
Wybiera część łańcucha
TRANSLATE
Konwertuje łańcuch z jednego zestawu znaków na inny
TRIM
Usuwa znaki z początku, kończ lub z obu stron łańcucha znaków
UPPER
Konwertuje łańcuch na złożony z samych wielkich liter
(wyrażenie | | wyrażenie)
172
Klauzula GROUP BY (i klauzula HAVING) jest potrzebna tylko w
zapytaniach używających funkcji agregujących. Zapytania
zawierające funkcje agregujące mogą dostarczać wielu
podsumowujących informacji.
Zapytania, znane jako agregacje skalarne zwracają tylko jedna wartość i
nie wymagają stosowania klauzuli GROUP BY. Przykładowo:
-- zapytanie
SELECT AVG (cena)
FROM tytuly
-- wynik
14.77
Zapytania, zwracające zarówno zwykłe kolumny, jak i funkcje agregujące są
nazywane agregacjami wektorowymi. Agregacje takie używają
klauzuli GROUP BY i zwracają jeden wiersz lub więcej.
173
Niektóre zasady stosowania GROUP BY
GROUP BY należy umieścić w odpowiednim miejscu: po klauzuli
WHERE i przed klauzulą ORDER BY
W klauzuli GROUP BY należy wymienić wszystkie kolumny nie
zawierające agregacji
W klauzuli GROUP BY nie należy stosować aliasów nazw kolumn.
Aliasy nazw tabel są dopuszczalne
174
Np. chcemy uzyskać informację, ile osób pracuje w firmie w danym
charakterze
-- zapytanie
SELECT
COUNT
FROM
JOIN
GROUP BY
p.stanowisko AS „Stanowisko”,
(p.id_stan) AS „Liczba_pracowników”
pracownicy p
stanowisko s ON p.id_stan = s.id_stan
p.stanowisko
-- wyniki
Stanowisko
----------------------------Acquisition Manager
Bussiness Operations Manager
Chief Executive Officer
Chief Financial Officer
Designer
Managing Editor
Publisher
Sales Representative
Liczba pracowników
----------------------------4
1
1
1
3
5
7
3
175
Klauzula HAVING pozwala na przeprowadzenie wyszukiwania w
zbiorze wyników klauzuli GROUP BY. Nie wpływa ona na
wiersze używane do obliczania agregacji, a tylko na wiersze
zwrócone przez zapytanie.
HAVING działa podobnie jak klauzula WHERE. Stosowane są również
te same warunki wyszukiwania.
HAVING nie powinna być używana do eliminowania wierszy, które są
eliminowane przez klauzulę WHERE. Warunki WHERE
powinny zawsze dotyczyć wartości agregacji.
176
Np. chcemy uzyskać informację o stanowiskach na których
pracuje więcej niż 3 osoby
-- zapytanie
SELECT
p.stanowisko AS „Stanowisko”,
COUNT
(p.id_stan) AS „Liczba_pracowników”
FROM
pracownicy p
JOIN
stanowisko s ON p.id_stan = s.id_stan
GROUP BY
p.stanowisko
HAVING COUNT (p.id_stan) > 3
-- wyniki
Stanowisko
----------------------------Acquisition Manager
Managing Editor
Publisher
Liczba pracowników
----------------------------4
5
7
177
Instrukcja SELECT pobiera wiersze, kolumny i wartości z jednej
tabeli lub kilku tabel bazy danych.
Dostawca
Polecenie
SQL Server
obsługiwane ze zmianami (obsługa złączeń ANSI)
MySQL
obsługiwane ze zmianami (częściowa obsługa złączeń ANSI)
ORACLE
obsługiwane ze zmianami (brak obsługi złączeń ANSI)
PostgreSQL
obsługiwane ze zmianami (częściowa obsługa złączeń ANSI)
178
Pełna składnia instrukcji SELECT jest złożona, ale może być
podzielona na następujące główne klauzule:
SELECT [ ALL | DISTINCT ] lista_select
FROM nazwa_tabeli [ , ..., nazwa_tabeliN ]
[ JOIN warunek_złączenia ]
[ WHERE warunek_wyszukiwania ]
[ GROUP BY wyrażenie_grupujące ]
[ HAVING warunek_wyszukiwania ]
[ ORDER BY wyrażenie_porządkujące [ ASC | DESC ] ]
179
Nie każde zapytanie wymaga wszystkich klauzul. Wymagane
jest co najmniej podanie listy instrukcji SELECT i klauzuli FROM.
Lista instrukcji SELECT zawiera spis informacji, które użytkownik chce
otrzymać z serwera. Na tej liście mogą pojawiać się elementy
różnych typów. Mogą to być łańcuchy znaków, funkcje
agregujące i obliczenia matematyczne.
W Microsoft SQL Server lista SELECT może zawierać podzapytanie.
Domyślna opcja ALL oznacza, że zwrócone zostaną wszystkie
rekordy, włącznie z wartościami domyślnymi.
Słowo kluczowe DISTINCT powoduje odfiltrowanie wszystkich
powtarzających się rekordów. Zbiór wynikowy będzie zawierał
po jednej instancji identycznych rekordów.
180
Istniej kilka reguł, dotyczących tego, co może pojawić się na
liście wyrażenia SELECT:
9
Powinny być wymienione, oddzielone przecinkami wszystkie
żądane kolumny
9
Znak gwiazdki ( * ) służy za skrót pozwalający na uzyskanie
wszystkich kolumn ze wszystkich tabel wymienionych w
klauzuli FROM, tak jak zostały podane w instrukcji CREATE
TABLE
181
Można podać aliasy nazw kolumn, które zastąpią nagłówki
kolumn w zbiorze wyników. Służą do tego kolumna AS alias i
kolumna alias.
Jest to szczególnie użyteczne, gdy nagłówek kolumny jest
zbyt tajemniczy lub zbyt długi, aby być zrozumiałym.
Przykładowo:
–
format aliasu
SELECT au_nazw AS „Nazwisko”
FROM autorzy
– alternatywny format aliasu
SELECT au_nazw „Nazwisko”
FROM autorzy
182
9
w liście instrukcji SELECT mogą wystąpić zmienne lokalne i
globalne, jeśli są obsługiwane
9
w każdej instrukcji SQL czy Transact-SQL mogą wystąpić
komentarze oznaczone przez podwójny myślnik ( -- ) lub
ukośnik i gwiazdkę ( /* ... */ ).
Podwójny myślnik powoduje zignorowanie tekstu
następującego po nim aż do końca linii.
Ukośnik powoduje zignorowanie każdego tekstu pomiędzy
znakami: ukośnik-gwiazdka i gwiazdka-ukośnik
183
9
nazwy kolumn w zapytaniu dotyczącym wielu tabel powinny
być poprzedzone przez nazwę tabeli. Jest to uznawane za dobrą
praktykę, bowiem nazwa kolumny może pasować do obu tabel.
Przykładowo, zarówno tabela pracownicy jak i stanowiska zawiera
kolumnę id_stan.
SELECT pracownicy.id_stanowiska,
pracownicy.imie,
pracownicy.nazwisko,
stanowiska.nazwa
FROM
pracownicy, stanowiska
WHERE pracownicy.id_stanowiska = stanowiska.id_stan
ORDER BY
pracownicy.imie
pracownicy.nazwisko
184
9
jeśli dane są pobierane spoza kontekstu bieżącego
użytkownika, nazwy kolumn powinny być poprzedzone przez nazwę
schematu lub użytkownika. Jeśli kolumna należy do innego
użytkownika, jego nazwa musi być podana w odwołaniu do tej
kolumny. Na przykład przyjmijmy, że poniższe zapytanie jest
wykonywane w bazie danych PUBS, ale pobiera dane również z bazy
danych SPRZEDAŻ:
SELECT
pracownicy.id_prac
admin_sprzedazy.suma_sprzedazy.kwota_razem
-- musi być podana nazwa schematu, tabeli i kolumny
FROM
pracownicy
admin_sprzedazy.suma_sprzedazy
WHERE
pracownicy.id_prac = admin_sprzedazy.suma_sprzedazy.id_prac
ORDER BY pracownicy.id_prac
185
9
9
w liście instrukcji SELECT można stosować wyrażenia literalne
jako elementy listy mogą być również podane obliczenia
matematyczne.
W Microsoft SQL Server nie jest potrzebna klauzula FROM. W Oracle
obliczenia powinny być wykonywane na systemowej tabeli DUAL –
tabela ta pozwala poleceniu SELECT na zwrócenie wartości, gdy nie
istnieje żadna tabela. Przykładowo:
-- zapytanie (Microsoft SQL Server)
SELECT 2 + 2
-- zapytanie (Oracle)
SELECT 2 + 2
FROM dual
-- wynik
4
186
Klauzula FROM służy generalnie do dwóch celów: do podania listy
tabel i perspektyw (oddzielonych przecinkami), z których
pobierane są dane i do nadawania aliasów długim nazwom
tabel, co upraszcza tworzenie długich zapytań.
Alias może być podany w klauzuli FROM na dwa sposoby:
• przez wpisanie nazwy tabel, spacji i nazwy aliasu lub
• przez podanie nazwy tabeli, AS i aliasu.
187
Przykładowe zapytanie pobierające dane z kilu tabel może zawierać
klauzule FROM i WHERE zastosowane w następujący sposób:
SELECT p.id_prac,
p.imie,
p.nazwisko
s.nazwa
FROM
pracownicy p,
stanowiska s
WHERE
p.id_stan = s.id_stan
ORDER BY
p.imie
p.nazwisko
188
Operator LIKE pozwala na podanie wzorca dopasowania
łańcucha znaków w instrukcjach SELECT, INSERT, UPDATE i
DELETE. Wzorzec może zawierać symbole wieloznaczne.
Dostawca
--------------SQL Server
MySQL
Oracle
PostgreSQL
Polecenie
-----------------obsługiwane ze
obsługiwane ze
obsługiwane ze
obsługiwane ze
zmianami
zmianami
zmianami
zmianami
Składnia SQL99
WHERE wyrażenie [ NOT ] LIKE wzorzec
189
Użyteczność LIKE opiera się na obsługiwanych symbolach
wieloznacznych. LIKE zwraca wartość logiczną TRUE, jeśli znaleziono
jedną (lub więcej) pasującą wartość.
Warto pamiętać, że domyślne rozróżnianie wielkości znaków w
DBMS ma duży wpływ na zachowanie LIKE.
190
Operator
wieloznaczny
%
Przykład
SELECT * FROM autorzy
WHERE miasto LIKE’%ville%’
Zwraca wszystkie rekordy dotyczące miast mających w
nazwie „ville” (obsługiwany przez wszystkich dostawców)
[]
SELECT * FROM autorzy
WHERE au_nazwisko LIKE ‘[CK]ars[eo]n’
Zwraca autorów o nazwiskach Carson, Carsen, Karson i
Karsen
[^]
SELECT * FROM autorzy
WHERE au_nazwisko LIKE ‘[A-Z^L]ars[eo]n’
Zwraca autorów, których nazwiska kończą się na –arson
lub –arsen, z wyłączeniem Larsen i Larson
_
(podkreślenie)
SELECT * FROM autorzy
WHERE au_imie NOT LIKE ‘_heryl’
Zwraca autorów, którzy nie mają na imię Sheryl czy
Cheryl.
Opis
Obsługiwany przez
wszystkich dostawców.
Dopasowuje dowolny
łańcuch podobny do * w
operacjach DOS.
Obsługiwany przez
Microsoft SQL Server.
Dopasowuje wszystkie
wartości z podanego zbioru,
takiego jak [abc] lub zakresu
takiego jak [k-n].
Obsługiwany przez
Microsoft SQL Server.
Dopasowuje dowolny znak
nie należący do podanego
zbioru czy zakresu.
Obsługiwany przez
wszystkich dostawców.
Dopasowuje dowolny
pojedynczy znak
191
Perspektywa [instrukcja CREATE VIEW] działa jak zwykła tabela, ale
jest zdefiniowana jak zapytanie.
Składniki perspektywy może definiować prawie każde prawidłowe
polecenie SELECT, zabronione jest zazwyczaj stosowanie klauzuli
ORDER BY.
Gdy w instrukcji występuje odwołanie do perspektywy, zbiór
wyników zapytania staje się zawartością perspektywy na czas
działania polecenia.
W niektórych przypadkach perspektywy mogą być
modyfikowane, co powoduje przeniesienie tych zmian do do danych
w tabeli bazowej.
192
Perspektywa jest tabelą wirtualną. Nie istnieje w rzeczywistości w
tym sensie, że w perspektywie nie przechowuje się żadnych danych.
Perspektywa jest po prostu ”oknem” na bazę danych.
Są trzy główne, zależne od siebie, zastosowania perspektyw w systemie bazy
danych: do upraszczania, do wykonywania pewnych funkcji lub do
realizacji strategii ochrony:
1.
Uproszczenie. Można utworzyć kilka perspektyw upraszczając
dane, które ogląda każdy z użytkowników.
2.
Funkcjonalność. Istnieje wewnętrzna zasada w modelu
relacyjnym: przechowuj najmniej jak tylko jest to możliwe.
Konsekwencją tego jest to, że dane, które mogą być wydobyte z
innych danych w bazie, nie są zazwyczaj przechowywane.
3.
Ochrona. Stosuje się deklarowanie perspektyw dla określonych
użytkowników.
193
Perspektywy mogą być budowane także na
podstawie innych perspektyw.
Konstrukcje takie nie są jednak zalecane i uważa się
stosowanie ich za złą praktykę.
194
Przykłady:
Najprostsza perspektywa opiera się na zawartości jednej tabeli:
CREATE VIEW pracownicy
AS
SELECT *
FROM
tabela_pracownicy;
W poniższym przykładzie stworzono perspektywę o nazwie
autorzy_z_kalifornii, która pozwala na modyfikację tylko danych autorów,
którzy mieszkają w Kalifornii:
CREATE VIEW autorzy_z_kalifornii
AS
SELECT au_imie, au_nazwisko, miasto, stan
FROM
authors;
WHERE
stan = ‘CA’
WITH CHECK OPTION
GO
195
Wstęp do sterowania
transakcjami
196
Zdarzenia, które powodują zmianę stanu, są w terminologii baz
danych nazywane transakcjami.
Transakcja zmienia bazę danych z jednego stanu w drugi.
Nowy stan jest wprowadzany przez stwierdzenie faktów, które stają się
prawdziwe i/lub przez zaprzeczenie faktów które przestają być prawdziwe.
Przykładem transakcji może być, np.
Zapisz studenta na moduł
197
W systemie baz danych z wieloma użytkownikami
transakcjami nazywamy procedury, które
wprowadzają zmiany do bazy danych lub które wyszukują
dane w bazie danych.
Transakcja może być zdefiniowana jako logiczna
jednostka pracy.
Transakcja zazwyczaj odpowiada pewnej
spójnej operacji
wykonywanej na bazie danych przez organizację.
198
Każda transakcja powinna mieć właściwości:
9
9
9
9
Niepodzielności
Spójności
Izolacji
Trwałości
199
Niepodzielność
Skoro transakcja składa się ze zbioru akcji, to menedżer transakcji
powinien zapewnić, że albo transakcja zostanie wykonana w
całości albo w ogóle nic się nie wydarzy.
Spójność
Wszystkie transakcje muszą zachowywać spójność i integralność
bazy danych. Operacje wykonywane np. przez transakcję
modyfikującą, nie powinny pozostawiać bazy danych w stanie
niespójnym lub nie poprawionym.
200
Izolacja
Jeżeli transakcja modyfikuje dzielone dane, to te dane mogą być
tymczasowo niespójne. Takie dane muszą być niedostępne dla
innych transakcji, dopóty, dopóki dana transakcja nie przestanie ich
używać .
Trwałość
Gdy transakcja kończy się, wówczas zmiany dokonane przez nią
powinny zostać w pełni utrwalone. To znaczy, nawet w wypadku
awarii sprzętu lub oprogramowania powinny zostać one zachowane.
201
Konwencjonalną metodą zapobiegania niepoprawnym
zjawiskom, np. utraceniu modyfikacji, jest
stosowanie
blokad systemowych.
Gdy użytkownik zakłada blokadę na rekord lub plik,
przekazuje tym samym innym użytkownikom sygnał, że
coś robi z tym rekordem lub plikiem i prosi o poczekanie
aż ukończy swoje zadanie.
202
Blokady do odczytu
Blokada do odczytu daje dostęp tylko do odczytu danych i
ochrania zablokowane dane przed ich modyfikacją przez
inną transakcję.
Dowolna liczba transakcji może mieć założoną blokadę do
odczytu na elemencie danych. Ten typ blokady
stosujemy, gdy chcemy zastosować zapytanie na tabeli,
bez potrzeby dokonywania w niej zmian. Ponadto jest
istotne, aby inni użytkownicy nie zmieniali tabeli w czasie,
gdy ktoś ją ogląda.
203
Blokady do zapisu
Blokada do zapisu umożliwia dostęp do elementów
danych zarówno w celu ich odczytu, jak i zapisu.
Jednocześnie uniemożliwia innym transakcjom jakikolwiek
odczyt i zapis dla tego elementu danych.
Z tego powodu nazywana jest również blokadą wyłączną.
204
Zakleszczenie, zwane też wzajemną blokadą lub śmiertelnym
uściskiem, przedstawimy na podstawie przykładu. Rozważmy
transakcje, Trans1 i Trans2:
1. W chwili t1 Trans1 zakłada blokadę do zapisu elementu danych A.
2. W chwili t1 Trans2 zakłada blokadę do zapisu elementu danych B.
3. W chwili t2 Trans1 żąda blokady do zapisu na elemencie danych
B. Musi czekać, ponieważ Trans2 zablokowała B.
4. W chwili t2 Trans2 żąda blokady do zapisu na elemencie danych
A. Musi czekać, ponieważ Trans1 zablokowała A.
205
Istnieje kilka strategii zapobiegania zakleszczeniom. Jedna z nich
polega na wymaganiu od wszystkich transakcji, aby zakładały
swoje blokady przed rozpoczęciem działania. Przyjęcie takiej
strategii ma negatywny wpływ na wydajność systemu, gdyż duże
transakcje mogą ciągle czekać na rozpoczęcie działania.
Bardziej efektywne strategie radzenia sobie z zakleszczaniem w
systemach baz danych polegają na jego wykryciu po tym, jak już
wystąpiło, a następnie jego zlikwidowaniu
206
W większości produktów, których podstawę stanowi SQL, transakcja
jest po prostu ciągiem instrukcji SQL, które są zebrane
razem jako jedna jednostka przetwarzania danych na bazie
danych.
Relacyjne DBMS utrzymują spójność przez zapewnienie, że albo
wszystkie instrukcje SQL w transakcji kończą się pomyślnie,
albo żadna.
W SQL do kończenia transakcji używamy instrukcji COMMIT i
ROLLBACK.
COMMIT czyni trwałymi zmiany dokonane w bazie danych przez
pomyślną transakcję. ROLLBACK wycofuje wszystkie zmiany
dokonane w bazie danych przez niepomyślną transakcję.
207
Oprócz finalizowania jednej lub grupy operacji manipulacji danymi,
COMMIT ma wpływ na inne aspekty transakcji.
Po pierwsze, zamyka wszystkie powiązane z nią otwarte kursory.
Po drugie usuwa dane z wszystkich tymczasowych tabel
utworzonych z klauzulą ON COMMIT DELETE ROWS.
Po trzecie zwalania wszystkie blokady stworzone przez transakcję.
Po czwarte, sprawdzane są wszystkie odroczone więzy – jeśli któreś
z nich są naruszone, cała transakcja jest cofana.
Składnia:
COMMIT [WORK]
208
Brudny odczyt
Występuje, jeśli transakcja czyta rekordy zmieniane
przez inną transakcję przed zakończeniem tej
transakcji. Powoduje to możliwość modyfikacji
danych rekordu, który może nie istnieć w bazie
danych.
209
Odczyt niepowtarzalny
Występuje, jeśli transakcja czyta rekord, który jest
modyfikowany przez inną transakcję. Zatem gdy
pierwsza transakcja próbuje ponownie odczytać ten
rekord, nie może go znaleźć.
210
Rekordy-widma
Występują, gdy transakcja czyta grupę rekordów, ale
modyfikacja danych dodaje lub zmienia dane, co
powoduje, że więcej rekordów spełnia warunki
pierwszej transakcji.
211
Ustawienie poziomów izolacji wpływa na te
anomalie
W SQL99 domyślnym poziomem izolacji jest
SERIALIZABLE.
Transakcje READ WRITE nie mogą być ustawione
jako READ UNCOMMITED
212
Wpływ poziomów izolacji na
anomalie
Brudny odczyt
Odczyt
niepowtarzalny
Rekordywidma
READ COMMITED
Nie
Tak
Tak
READ UNCOMMITED
Tak
Tak
Tak
REPETEABLE READ
Nie
Nie
Tak
SERIALIZABLE
Nie
Nie
Nie
213
Polecenie BEGIN TRANSACTION działa podobnie jak START
TRANSACTION.
Polecenie to obsługuje zarówno Microsoft SQL Server jak i
PostgreSQL. Należy upewnić się, że każde BEGIN ma
swoje własne COMMIT i ROLLBACK.
W innym przypadku DBMS nie zakończy instrukcji do spotkania
następnego COMMIT lub ROLLBACK. Może to prowadzić do
powstania wielkich transakcji o nieprzewidywalnym wpływie na dane
214
Instrukcja ROLLBACK cofa wykonanie transakcji do jej początku lub
do zdefiniowanego punktu zapisu (SAVEPOINT). Zamyka
otwarte kursory i zwalnia blokady tak samo jak COMMIT.
Dostawca
Polecenie
---------------------------------------------------------SQL Server
obsługiwane ze zmianami
MySQL
nie obsługiwane
Oracle
obsługiwane
PostgreSQL
obsługiwane
215
Polecenie SAVEPOINT tworzy punkt zapisu w bieżącej transakcji.
Dzięki temu poleceniu można podzielić transakcję na logiczne bloki.
Dla jednej transakcji można podać wiele punktów zapisu.
Główną korzyścią wynikająca z instrukcji SAVEPOINT jest
możliwość częściowego cofnięcia transakcji do podanego,
unikatowo nazwanego punktu za pomocą polecenia
ROLLBACK.
216
Głównymi krokami przy wykonywaniu transakcji są:
1.
Uruchom transakcję
2.
Zapisz transakcję do dziennika. Zapisz w dzienniku informacje
początkowe o transakcji
3.
Sprowadź rekordy z bazy danych
4.
Zapisz do dziennika obraz przed transakcją, to jest wartości przed
przetworzeniem przez transakcję
5.
Oblicz nowe wartości
6.
Zapisz do dziennika obraz po transakcji, to jest wartości po przetworzeniu
przez transakcję
7.
Zapisz w dzienniku zatwierdzone dane
8.
Zapisz nowe rekordy do bazy danych
217
Słownik danych jest sposobem zapisywania metadanych
jakiejś organizacji, to znaczy danych na temat danych.
To co tworzy metadane jest określane na etapie tworzenia bazy
danych.
218
Katalog systemowy lub słownik danych jest sercem systemu
zarządzania bazą danych.
Podstawowe informacje, które są przechowywane w słowniku
danych, to:
1.
Opis relacji w bazie danych, wliczając w to nazwy relacji, nazwy kolumn,
typy danych kolumn, charakterystyki null kolumn
2.
Deklaracje kluczy głównych i obcych, wliczając w to więzy propagacji
3.
Opis perspektyw
4.
Deklaracje grup użytkowników i uprawnień
5.
Informacje na temat indeksów, rozmiarów plików, struktur plików i
klastrów
219
Możemy wydzielić trzy poziomy słownika danych:
1.
Koncepcyjne słowniki danych zawierają metadane na bardzo wysokim
poziomie abstrakcji
2.
Logiczne słowniki danych są używane do zapisywania wymagań
dotyczących danych niezależnie od sposobu, w jaki te wymagania mają
być spełnione. Logiczne metadane są na trochę niższym poziomie
abstrakcji niż koncepcyjne metadane.
3.
Fizyczne słowniki danych są używane do zapisywania struktur danych
wyrażonych za pomocą rekordów. To znaczy zapisują metadane
powiązane z aktualny i strukturami bazy danych lub plików. Zbiór tabel
systemowych RBDMS jest fizycznym słownikiem danych.
220
Hierarchiczny
model danych
221
Hierarchiczny model danych (HMBD) używa dwóch struktur
danych (typy rekordów i związków nadrzędny – podrzędny)
* Typ rekordu jest nazwaną strukturą danych, złożoną ze zbioru
nazwanych pól
* Każde pole używane jest do przechowywania prostego
atrybutu, któremu przyporządkowany jest typ danych
222
* Powiązanie nadrzędny – podrzędny jest związkiem (relacją)
jeden do wielu między dwoma typami rekordów
* Relacje w HMBD są reprezentowane w kategoriach
Ojciec/Syn
* Operowanie danymi w HMBD jest wykonywane przez
wbudowanie funkcji dostępu do BD w wybranym języku
programowania, w tzw. Języku Gospodarza
223
Dane w HMBD mają strukturę odwróconego drzewa. Jedna z tabel pełni rolę
„korzenia”, a pozostałe mają postać „gałęzi” biorących swój początek w korzeniu.
POŚREDNICY
MUZYCY
KLIENCI
TERMINARZE
UMOWY
ROZLICZENIA
DIAGRAM MODELU HIERARCHICZNEGO
224
W HMBD tabela „OJCIEC” może być powiązana z wieloma tabelami
„SYN”, lecz pojedynczy „SYN” może mieć tylko jednego „OJCA”
* Tabele w HMBD mogą być powiązane jawnie, przez wskaźniki, lub
przez fizyczną organizację rekordów wewnątrz tabel
* Dostęp do danych w HMBD, użytkownik rozpoczyna od korzenia
(przedziera się przez całe drzewo, aż do interesującego go miejsca)
Zalety HMBD:
* * Względnie szybki dostęp do danych (poszczególne tabele są ze
sobą bezpośrednio powiązane)
* * Tabele mają automatycznie wbudowaną integralność odwołań
(rekord z tabeli „SYN” musi być powiązany z istniejącym rekordem w
tabeli „OJCIEC”)
225
Wady HMBD:
* * Nie możemy dopisać w tabeli „syn” rekordu niepowiązanego z żadnym
rekordem tabeli „ojciec”
(nie można dopisać nowego muzyka dopóki nie przypiszemy mu
pośrednika - sztuczne dane)
* * Model nie jest zdolny do obsługi złożonych relacji typu wiele - do wielu ( jeden muzyk gra dla wielu klientów, a jeden klient może zatrudniać
wielu muzyków/
* * Nadmiarowość danych (tabela terminarz zawiera dane o klientach - te same
dane zawiera także tabela klienci. Tabela terminarz zawiera dane o
muzykach - te same dane znajdują się w tabeli muzycy)
* * Nadmiarowość danych może burzyć integralność BD
(problem rozwiązuje się często przez tworzenie osobnych HBD - BD dla
muzyków i pośredników)
226
Wylistowanie muzyków, z którymi zawarł
umowę
dany klient i terminarza występu danego
muzyka
Pośrednicy
Muzycy
BAZA DANYCH
MUZYKÓW
Lo
g
oj iczn
ci a
ec re
- s lac
yn ja
Klienci
Umowy
Rozliczenia
BAZA DANYCH POŚREDNIKÓW
227
Hierarchiczne modele danych są wciąż w praktycznym użyciu, np. przy
budowie aplikacji WWW z zastosowaniem XML
(Extensible Markup Language) - sztywna struktura
hierarchicznych baz pomaga w zarządzaniu rozprzestrzenianiem
dokumentów XML, w tak zwanych repozytoriach XML
(systemach przechowywania i wyszukiwania danych XML).
Z powodu wzrastającego znaczenia usług katalogowych X.500/LDAP
– które są hierarchiczne - wzrasta ponownie zainteresowanie
hierarchiczną organizacją danych.
228
Plik XML
<klient>
<nazwisko>Bogdan Kowal</nazwisko>
<sprzedaz>
<data>2006/04/15</data>
<produkt>
<nazwa>srubokret</nazwa>
<cena>10 PLN</cena>
<producent>ACME z.o.o.</producent>
</produkt>
</sprzedaz>
<sprzedaz>
<data>2006/04/15</data>
<produkt>
<nazwa>mlotek</nazwa>
<cena>5 PLN</cena>
<producent>ACME z.o.o.</producent>
</produkt>
</sprzedaz>
</klient>
Relacyjna baza danych
Ta baza jest relacyjna
ale plik XML
zawiera dane
hierarchiczne
Klient
Sprzedaż
Produkt
Producent
Hierarchiczna baza danych
Ta baza odpowiada
hierarchicznej
Klient
strukturze
Sprzedaż
plików XML
Produkt
- może
Producent
z łatwością
importować
dane XML
229
Polska
Kraj (c)
ACE Sp. z o. o.
Produkcja
Organizacja (o)
Administracja
Wydział (ou)
Adam W.
Jerzy W.
Edward Z.
Jan K.
Roman S.
Anna Z.
Zatrudnieni (cn)
Wskazuje pracujących na I piętrze
Jan K. jest jednoznacznie identyfikowany jako:
c = Polska, o = ACE Sp. z o.o., ou = Administracja, cn = Jan K.
Przykłady danych zestawianych w katalogach LDAP:
* książka telefoniczna zatrudnionych
* schemat organizacyjny
* usługi IT (np. adresy IP serwerów) * adresy e-mail
* dane binarne takie jak rysunki
230
Sieciowy
model danych
231
SIECIOWY MODEL BAZY DANYCH (SMBD) - następca HMBD powstał w celu rozwiązania problemów mających miejsce w HMBD
Dane w SMBD, podobnie jak w HMBD, mają strukturę „odwróconego
drzewa”, z tą różnicą, że kilka drzew może dzielić ze sobą gałęzie,
a każde drzewo stanowi część ogólnej struktury BD
SMBD – podobnie jak HMBD – ma dwie struktury danych
* * Typy rekordów (pola mogą być używane do przechowywania wielu wartości
lub do reprezentowania złożonych wartości, które się powtarzają)
* * Typy kolekcji (set structures) - niejawna konstrukcja łącząca dwie tabele
przez przypisanie jednej z nich roli właściciela, a drugiej roli członka
(stanowiło to postęp w porównaniu z relacjami ojciec – syn, ponieważ
umożliwiało wprowadzenie relacji jeden – do – wielu)
232
Pośrednicy
tabela - członek
kolekcja
kieruje
reprezentuje
Klienci
uiszcza
Rozliczenia
tabela - właściciel
Muzycy
zawiera
wypełnia
Umowy
gra
Style muzyczne
Diagram modelu sieciowego
233
Schemat sieciowej bazy danych - przykład
SCHEMA : Akademia
RECORD : Kursy
FIELDS(
Kod_Kursu :
CHARACTER(6),
Nazwa_Kursu :
CHARACTER(20),
Rok_Kontroli :
DATE,
ACCESS : HASH USING Kod_Kursu
DUPLICATES ARE NOT ALLOWED FOR
Kod_Kursu
RECORD : Modul
FIELDS(
Nazwa_Modulu :
CHARACTER(20),
Nr_Prac :
INTEGER(5),
Poziom :
INTEGER(1),
ACCESS : VIA SET
DUPLICATES ARE NOT ALLOWED FOR
Nazwa_Modulu
234
RECORD : STUDENCI
FIELDS(
Nr_Studenta :
INTEGER(5),
Nazwisko_Studenta :
CHARACTER(20),
Adres :
CHARACTER(30),
ACCESS : VIA SET
DUPLICATES ARE NOT ALLOWED FOR
Nr_Studenta
SET : Prowadzi
OWNER :
Kurs
MEMBER :
Modul
ORDER BY
Nazwa_Modulu
ASCENDING
SET : Ma
OWNER :
Modul
MEMBER :
Student
ORDER BY
Nr_Studenta
ASCENDING
235
OPEROWANIE DANYMI – Ciąg operacji na BD jest wkładany do
programu w języku gospodarza (język programowania gospodarza i
SBD to dwa oddzielne systemy programowania. Są one połączone przez
wspólny interfejs. Polecenia tego sieciowego DML w każdej chwili dotyczą
zawsze jednego – bieżącego rekordu)
Operacje na BD dzielimy na trzy grupy:
* * NAWIGACJI (służą do ustawiania wskaźników bieżących rekordów na określone
wystąpienia rekordów i kolekcji);
* * SPRAWDZANIA ZAWARTOŚCI BIEŻĄCYCH REKORDÓW
* * MODYFIKOWANIA ZAWARTOŚCI WYSTĄPIEŃ REKORDÓW I KOLEKCJI
236
* Integralność danych – dotyczy członkostwa w kolekcji (wymagane lub
opcjonalne) i trybu wstawiania
* * Wymagane (każde wystąpienie rekordu członka będzie należało do
pewnego wystąpienia kolekcji)
* * Tryb wstawiania (ręczny - programy użytkowe muszą wstawiać rekordy
członków do określonego wcześniej wystąpienia kolekcji i automatyczny
tzn. gdy tworzymy rekord członka, jest on automatycznie wstawiany do
bieżącego wystąpienia kolekcji)
* Więzy integralności definiujemy za pomocą dodatkowej klauzuli w definicji
typu kolekcji
Przykład
SET :
Ma
OWNER :
Modul
MEMBER :
Student
ORDER BY Nr_Studenta ASCENDING
INSERTION IS MANDATORY, AUTOMATIC
237
Wady SMBD
* * użytkownik musi mieć dobre wyobrażenie o strukturze BD
(należy pamiętać przez które kolekcje należy przejść aby uzyskać
potrzebną informację)
* * niemożność zmiany struktury BD bez ponownego tworzenia
obsługujących ją programów (danej kolekcji nie można zmienić bez
modyfikowania aplikacji bazodanowej. Jeśli któraś kolekcja ulegnie zmianie,
wszystkie odwołania do tej kolekcji zawarte w aplikacji obsługującej BD
muszą również zostać zmienione)
Zalety SMBD
* * poszukiwanie danych można rozpocząć od dowolnej tabeli
* * względnie duża szybkość odczytu danych
* * możliwość tworzenia bardziej złożonych zapytań niż HMBD.
238
Struktura danych
HMBD
drzewo
Operowanie danymi
nawigacyjne – w
automatyczne wspomaganie
jednej chwili jeden
dla pewnych postaci
rekord
integralności referencyjnej
nawigacyjne – w
SMBD
sieć
jednej chwili jeden
rekord
nieproceduralne –
RMBD
tabela
Integralność danych
w jednej chwili jeden
plik
wbudowane wspomaganie
dla pewnych postaci
integralności referencyjnej
wspomaganie różne, w
zależności od produktu
Klasyczne BD sprzyjają stosowaniu przetwarzania nawigacyjnego
SZBD oparte na takich modelach danych dostarczają użytkownikom proceduralnego DML
RBD działają na całych tabelach i sprzyjają wytwarzaniu nieproceduralnych interfejsów
239
Obiektowy model
danych
240
9
9
Pojęcie obiektowości ma wiele różnych znaczeń
Termin ten po raz pierwszy zastosowano do grupy języków
programowania (simula)
9
Obiektowość w dziedzinie baz danych zastosowano dopiero
niedawno
9
W obiektowych bazach danych (OBD) obiekty istnieją trwale pozostają zapisane w pamięci pomocniczej przed i po
wykonaniu programów
241
9
Klasyczne modele danych reprezentują schematy za pomocą struktur
rekordów i powiązań między nimi
9
Semantyczne modele danych (SeMD) Dostarczają bogatszy zbiór
narzędzi do budowy schematów i umożliwiają twórcom BD określenie
w schemacie bazy danych znaczenia lub semantyki dotyczących
dziedziny aplikacji
242
Najpopularniejszy kierunek wsród SeMD przyjmuje za podstawę
diagramy związków encji (CHEN 1976)
Nie ma zgody co do różnicy między SeMD a OMD:
¾ SeMD są zazwyczaj uważane za mechanizmy do tworzenia
strukturalnych abstrakcji
¾ OMD skupiają się bardziej na dostarczaniu abstrakcji zachowania;
¾ SeMD są skoncentrowane na stronie reprezentacji danych, a OMD na
operowaniu danymi.
243
Składniki obiektowego modelu danych
w 1991r powstaje
OBJECT DATABASE MANAGEMENT GROUP (ODMG)
w celu stworzenia standardów obiektowego zarządzania danymi,
które wspomagałyby przenośność aplikacji między systemami
244
Obiektowa baza danych składa się z obiektów i klas obiektów,
powiązanych pewną liczbą mechanizmów abstrakcji:
* * Obiekt jest pakietem danych i procedur
* * Dane są trzymane w atrybutach obiektu
* * Procedury są definiowane za pomocą metod obiektu
* * Metody są uaktywniane przez komunikaty przekazywane między
obiektami
OMD dostarcza środków do realizacji tożsamości obiektów (rozróżnienie
dwóch obiektów o takich samych cechach)
245
Model relacyjny vs. obiektowy
Model Obiektowy
Model Relacyjny
Relacja
Podobne
Klasa
Krotka
Podobne
Obiekt instancji
Kolumna
Podobne
Atrybut
Różne
Metoda
Procedura składowana
246
RMD jest zorientowany na wartości (explicite nie ma możliwości
przyporządkowania jednoznacznego identyfikatora każdemu
obiektowi w BD)
* * dwie identyczne krotki w RMD wskazują na ten sam
obiekt
* * dwa identyczne rekordy w OBD mogą odwoływać się
do dwóch różnych obiektów dzięki wprowadzeniu
jednoznacznego identyfikatora generowanego przez
system
247
Wszystkie obiekty muszą mieć właściwość
hermetyzacji
- Procedura umieszczania danych i procesu w jednym
opakowaniu w ramach zdefiniowanego interfejsu i
udostępniania go z zewnątrz w sposób kontrolowany przez
ten interfejs.
Hermetyzację przyjmuje się niejawnie w definicji obiektu
248
Klasy obiektów - zgrupowania podobnych obiektów (używamy
je do określenia wspólnych dla grupy obiektów atrybutów, metod i
związków)
* * obiekty są więc instancjami pewnej klasy mają te same
atrybuty i metody
* * Klasy obiektów definiują schemat BD – główny temat dziedziny
projektowania baz danych
* * Obiekty definiują zawartość BD - główny temat dziedziny
implementacji BD
249
OMD dostarcza dwóch mechanizmów, które
umożliwiają konstruowanie hierarchii lub struktur klas
obiektów - mechanizm uogólniania i agregacji:
• mechanizm uogólniania umożliwia deklarowanie
pewnych klas obiektów jako podklas innych klas
obiektów
• agregacja jest procesem, dzięki któremu obiekt
wyższego poziomu jest używany do grupowania
pewnej liczby obiektów niższych poziomów.
250
Proces dziedziczenia jest związany z pojęciem hierarchii
uogólnienia
Istnieją dwa główne typy dziedziczenia – dziedziczenie struktury i
zachowania:
* * Przy dziedziczeniu struktury mówimy, że podklasa
dziedziczy atrybuty swojej nadklasy
* * Przy dziedziczeniu zachowania mówimy że, podklasa
dziedziczy metody swojej nadklasy.
251
Dziedziczenie
Osoba
Nazwisko
data urodzenia
Rodzice
dzieci
atrybuty
wiek
Zatrudniony
Student
ID studenta
ID
zatrudnionego
wiek
wiek
metoda
252
Rozróżniamy dwa rodzaje dziedziczenia
Pojedyncze - klasa może być podklasą tylko jednej nadklasy
Wielokrotne - klasa może dziedziczyć atrybuty i metody od
więcej niż jednej nadklasy
253
Integralność wewnętrzna
(wynika ze związku między obiektami a klasami)
* * integralność klasa – klasa (np. nadklasa student nie może być
usunięta dopóki nie zostaną usunięte wszystkie powiązane z nią
podklasy)
* * integralność klasa – obiekt (np. klasa nie może być usunięta dopóty,
dopóki nie zostaną usunięte wszystkie powiązane z nią obiekty)
* * integralność dziedziny (atrybuty są definiowane we wcześniej
utworzonych klasach)
* * integralność referencyjna (podobnie jak w RBD skoro klasy mogą
być powiązane z innymi klasami przez związki)
254
Integralność dodatkowa
Wprowadzamy ją do OMD przez więzy umieszczone w treściach
metod
(Te dwa typy integralności są związane z logicznym stanem BD i
są szczególnym przypadkiem integralności semantycznej)
255

Podobne dokumenty