Modele danych
• hierarchiczny
• sieciowy
• relacyjny
• obiektowy
• postrelacyjny
• semantyczny
• NoSQL
– Klucz-wartość
– Dokumentowe
– Rodziny kolumn
– Grafowe
– Obiektowe
• NewSQL
Historia rozwoju BD
fizyczny systemu
informatyzacji
realizacji SI (od oprogramowania, syst. oper. itp.).
Model logiczny i
użytkownika
Model procesów
Strategia Specyfikacja Weryfikacja
Definiowanie
informatyzacji wymagań funkcji
modeli
danych
organizacji użytkownika procesów i
Model
systemu danych
Model funkcji
systemu
Definiowanie Modyfikacja
modelu
danych
Model
Model danych danych
Nowe wymagania
Nowe wymagania
• Wg ANSI (1975):
• Modelowanie koncepcyjne;
• Opis semantyczny (kontekst modelu)
• Wysoki poziom abstrakcji
• Język "domenowy"
• Definiuje dopuszczalne "obiekty"
• Modelowanie logiczne
• Powiązanie pozycji zdefiniowanych w modelu koncpecyjnym z konretną realizacją, zgodną z
wybranym modelem danych
• W praktyce model koncepcyjny często jest tożsamy z logicznym
• Modelowanie fizyczne
• Uwzględnia zagadneinia organizacji danych, wydajność rozproszenie itd
• W prostych przypadkach może być tożsamy z modelem logicznym
Metody modelowania danych
• ERD
• Entity Relationship Diagram – Diagram Związków Encji
• Zgodny z modelem relacyjnym
• Najbardziej rozpowszechniony
• Peter Chen - 1976
• DFD
• Data Flow Diagram – Diagram przepływu danych
• Lata 70’
• Opisują przepływ danych w programie komputerowym, mogą być wykorzystane
do problemów biznesowych (wyparty przez BPMN)
• Alternatywa dla diagramów aktywności – DFD eliminuje kontrolę przepływu ->
pomaga skupić się na danych w stanie czystym
• Modelowanie w NoSQL
• Brak jednoznacznie dedykowanych narzędzi i metod -> szczegóły na odrębnym
wykładzie
Diagram Przepływu Danych
• DFD jest narzędziem modelowania pozwalającym zobrazować system
jako sieć procesów funkcyjnych, połączonych ze sobą “potokami” i
“zbiornikami” danych
Diagram przepływu danych (Data Flow Diagram
– DFD)
kartoteka
zlecenie zleceń
telefoniczne
klient rejestracja przekazanie
zlecenia zadań
e-mail zlecenie
e-mail
skrzynka
odebranie
poczty odczytanie
poczty
obsługa
poczty
Składniki DFD
• Proces (funkcja)
• Przepływ
• Magazyn
• Terminator
Proces (funkcja)
Sprawdź Wyślij
wiarygodność towar
klienta do klienta
Dział
Kosztów
Przepływ
stan zadłużenia -
zamówienie stan zadłużenia - niedopuszczalny
dopuszczalny
korpus
Sprawdź
klienta
kran
Montuj
kran
stan
zadłużenia
Przepływ
wniosek
kredytowy Sprawdź
Klient klienta
Oblicz
nazwisko, płace
godziny
karty pracy
Wydział
wyroby,
godziny Oblicz
robociznę
Terminator
Dział
Klient
kosztów
Dział
kosztów
Klient
Dział
kosztów
Magazyn
M5 Magazyn wyrobów
zamówienie
D5 Portfel zamówień
Sprawdź zamówienie
zamówienie zamówienie Opracuj
odmowa plan
potwier- produkcji
dzenie
zamówienie
zamówienie Opracuj
Sprawdź
plan
zamówienie
produkcji
odmowa
potwier-
dzenie
Metoda konstruowania DFD
• Podejście klasyczne, zstępujące (De Marco 1979, Gane i Sarson 1979)
Diagram Proces
Kontekstowy elem. n
Proces
1
Proces
3
Proces
4
Proces
elem. 1
Diagramy szczegółowe
Metoda konstruowania DFD
• Podejście Yourdona (Yourdon 1989)
Diagram
Kontekstowy Proces Proces
elem. n elem. n
Diagram Kontekstowy
Proces
elem. 1
Proces
elem. 1
Lista zdarzeń
1. .......... Proces
elem. 2
Proces
elem. 2
2. .........
...........
n. .........
Komponent Opis
KLIENT
* Nazwa FAKTURA
* Adres
o e_mail
Przykład Przeznaczenie
STUDENT Mat/123/04
Jan
# nr albumu Kowalski
* imię 14-05-1990
* nazwisko Dobre Miasto
* data urodzenia
* miejsce urodzenia
Mat/345/04
Anna
Nowak
21-05--1986
Dobre Miasto
OLX 2361
Nissan Almera
SAMOCH ÓD
2000
# nr rejestracyjny 55000
* typ Czerwony
* rok produkcji 1,6 m3
* cena
* kolor OM- 2388
* pojemność silnika Renault
2004
62000
Złoty
1,4 m3
Związek
Stopień
Przykład Znaczenie
związku
jeden - do - w ielu
zw iązek
wymagany
(obowiązkowy)
w iele - do - w ielu
Diagramy Związków Encji
• Liczebność (stopień)
• 1:1 Wykładowca
• 1:M
or
• M:N
• Liczebność min/max r1 r2
Wykładowca
and
r1 r2
Moduł
Diagramy Związków Encji
• Związki rekurencyjne
(jednoargumentowe)
• Związki trójargumentowe –
rozbicie na dwie osobne relacje Pracownik Zarządza
powoduje utratę informacji
• Role
• Atrybuty związków (możliwa
konwersja do nowego zbioru Pracownik
encji)
Wykorzystuje_umiejętność
Agregat Umiejętność
Podklasy w modelu ER
Przykład:
składa
Klient Zamówienia
jest zlecone
Sal a Op eracyjna
Ses ja Klin iczna
nu mer sa li
id se sji Le ka rz
na zwa sa li
rod zaj ses ji id le ka rza
na zwi sko
im ie jest miejscem dla
obejmuje
sp ecjal izacja
odby wa sie w
przeprowadzana jest w ramach
dokonuje
Ses ja Opera cyjn a
Kon su ltacja wykonuje
nr ses ji
id kons ultacj i rod zaj ses ji
da ta ko nsu lta cji przeprowadzana jest przez
tre sc
korzy st a
Pacje nt
nr pacje nta Ope racja
na zwi sko poddawany jest doty czy nr ope racji jest przy dzielona do
im ie da ta ope racji
ad res
Diagramy Związków Encji
Wykład Moduł
1 M
Wykład Moduł
Wykład Moduł
1:1 0:M
Wykład Moduł
Wykład Moduł
Projektowanie logicze danych
Pojęcie Opis
Relacja Jest to podzbiór iloczynu kartezjańskiego reprezentowany przez zbiór
krotek. Reprezentacją relacji jest tablica.
Krotka Oznacza wiersz tablicy. Reprezentacją krotki w tablicy jest rekord.
każda encja staje się tablicą, której nazwa jest zazwyczaj nazwą encji
w liczbie mnogiej;
każdy atrybut staje się komuną, a jego nazwa odpowiednio nazwą tej
kolumny. Natomiast właściwości atrybutu stają się odpowiadającymi
im właściwościami w projekcie danych. Atrybuty obowiązkowe stają
się kolumnami NOT NULL (co oznacza, że nie jest możliwe by wartość
kolumny przyjmowała wartość NULL);
unikalny identyfikator encji staje się kluczem głównym tabeli;
każdy związek jest przekształcany w dwa obiekty. Kolumnę klucz
obcego, zgodną z kluczem głównym (lub unikalnym) tabeli, której
dotyczy. Dziedziczy ona typ i rozmiar danego klucz głównego.
Przekształcanie encji
nazwa nazwa
unikalny identyfikator klucz głowny
Klienci
Klient
# id_klient # id_klient
* nazwa * nazwa
* adres * adres
Przekształcanie związków
Zamówienie
Klient
# id_zamówienia
# id_klient
* data zamówienia
* nazwa
…
* adres
Klienci Zamówienia
Not NULL
# id_zamowiania
# id_klient
* data-zamówienia
* nazwa
* id_klienta
* adres
...
Przekształcenie diagramu ERD
Przekształcenie diagramu ERD
Relacyjny model danych
Relacyjny model danych
• Podstawą tego modelu stała się praca opublikowana przez E.F. Codda w
1970r.
• W pracy „Relacyjny model logiczny dla dużych banków danych” Codd
zaprezentował założenia relacyjnego modelu baz danych
• W roku 1990 Codd opublikował artykuł „Relacyjny model zarządzania
bazami danych: wersja 2”, rozszerzający poprzednie prace
• RMD oparty jest o algebrę relacji
• Podstawowe elementy modelu to
• relacje
• więzi
Podstawowe pojęcia w bazach danych:
zbiór atrybutów
R A1 , A2 ,...., An
SR
który jednoznacznie identyfikuje wszystkie krotki w relacji R.
W żadnej relacji o schemacie R nie mogą istnieć dwie krotki t1 i t2 takie, że
t1[S]=t2[S]
Klucz
A B
Zależność funkcjonalna
X{A1...AN}, Y{A1...AN}
X Y
i nie istnieje
X X
'
takie, że
X Y
'
Zależność funkcjonalna
X Y
i istnieje
X X
'
takie, że
X Y
'
Zależność funkcjonalna
s1[X]=s2[X]=t1[X]=t2[X] i
s1[Y]= t1[Y] i s1[R-X-Y]=t2[R-X-Y] i
s2 [Y]= t2[Y] i s2 [R-X-Y]=t1[R-X-Y]
Zależność wielowartościowa
X Y R-X-Y
t1[X]=t2[X]=s1[X]=s2[X]=(Kot)
s1[Y]= t1[Y]=(Ania) i
s1[R-X-Y]=t2[R-X-Y]=(angielski) i
s2 [Y]= t2[Y]=(Jaś) i
s2 [R-X-Y]=t1[R-X-Y]=(niemiecki)
Trywialna zależność wielowartościowa
1 10.03.05 1 4
1 10.03.05 2 4
2 10.03.05 1 4
2 10.03.05 3 8
1 11.03.05 1 8
2 11.03.05 3 2
2 11.03.05 2 6
Bazy Danych
Projektowanie. Normalizacja.
Piotr Macioł
WIMiIP, KISiM,
pmaciol@agh.edu.pl
B5, pok. 606
Etapy projektowania baz danych:
— Cele:
Normalizacja.
Piotr Macioł
WIMiIP, KISiM,
pmaciol@agh.edu.pl
B5, pok. 606
Metoda graficzna (diagramy ERD)
3
Przykład wad bazy danych:
L.p. Imię Nazwisko Marka piwa Nazwa piwa Gatunek Alkohol [%]
1. Stefan Żeromski Okocim Palone lager 7
porter
2. Stefan Żeromski Żywiec Porter bałtycki 9,5
3. Stefan Żeromski Cornelius ALE ALE ale 5,8
4. Eliza Orzeszkowa Ciechan Miodowe pilzner 5,7
5. Eliza Orzeszkowa Redd's Cranberry pilzner 4,5
porter
6. Adam Mickiewicz Okocim Porter bałtycki 8,3
7. Friedrich Nietzsche Paulaner Hefe-Weissbier Naturtrüb pszeniczne 5,5
8. Friedrich Nietzsche Ciechan Pszeniczne pszeniczne 5,6
9. Tadeusz Konwicki Żywiec Żywiec Beer pilzner 5,6
10. Rafał Wojaczek Żywiec Żywiec Beer pilzner 5,6
11. Wisława Szymborska Żywiec Żywiec Beer pilzner 5,6
12. Johann Goethe Żywiec Żywiec Beer pilzner 5,6
13. James Joyce Carlsberg Carlsberg lager 5
14. Francis Fitzgerald Haineken Haineken Lager Beer lager 5
Skłodowska-
15. Maria Curie Żywiec Desperados pilzner 6
16. Zofia Nałkowska Łomża Miodowe pilzner 5,7
17. Fiodor Dostojewski Tyskie Gronie pilzner 5,6
18. Fryderyk Chopin Tyskie Gronie pilzner 6,6
KISIM, WIMiIP, AGH 19. Stefan Batory Tyskie Gronie pilzner 7,6 7
„Student lubi piwo…”
STUDENT PIWO
L.p. Imię Nazwisko Marka piwa Nazwa piwa Gatunek Alkohol [%]
1. Stefan Żeromski Okocim Palone lager 7
porter
2. Stefan Żeromski Żywiec Porter bałtycki 9,5
3. Stefan Żeromski Cornelius ALE ALE ale 5,8
4. Eliza Orzeszkowa Ciechan Miodowe pilzner 5,7
5. Eliza Orzeszkowa Redd's Cranberry pilzner 4,5
porter
6. Adam Mickiewicz Okocim Porter bałtycki 8,3
7. Friedrich Nietzsche Paulaner Hefe-Weissbier Naturtrüb pszeniczne 5,5
8. Friedrich Nietzsche Ciechan Pszeniczne pszeniczne 5,6
9. Tadeusz Konwicki Żywiec Żywiec Beer pilzner 5,6
10. Rafał Wojaczek Żywiec Żywiec Beer pilzner 5,6
11. Wisława Szymborska Żywiec Żywiec Beer pilzner 5,6
12. Johann Goethe Żywiec Żywiec Beer pilzner 5,6
13. James Joyce Carlsberg Carlsberg lager 5
14. Francis Fitzgerald Haineken Haineken Lager Beer lager 5
Skłodowska-
15. Maria Curie Żywiec Desperados pilzner 6
16. Zofia Nałkowska Łomża Miodowe pilzner 5,7
17. Fiodor Dostojewski Tyskie Gronie pilzner 5,6
18. Fryderyk Chopin Tyskie Gronie pilzner 6,6
KISIM, WIMiIP, AGH 19. Stefan Batory Tyskie Gronie pilzner 7,6 8
„Student lubi piwo…”
KISIM, WIMiIP, AGH 19. Stefan Batory Tyskie Gronie pilzner 7,6 9
„Student lubi piwo…”
L.p. Imię Nazwisko Marka piwa Nazwa piwa Alkohol [%] Gatunek
imie marka_piwa
— Pierwsza (1PN)
— Druga (2PN)
— Trzecia (3PN)
— Boyce’a-Codd’a (PNBC)
— Czwarta (4PN)
— Piąta (5PN)
Pracownik Języki
16
Relacja nie znormalizowana
Język Poziom
niemiecki dobrze
17
Relacja nie znormalizowana
18
Relacja znormalizowana
19
Relacja znormalizowana
20
Relacja znormalizowana - nieporozumienia
Jaś 15.03.2001
Filemon 30.07.2003
21
Relacja znormalizowana - nieporozumienia
22
Pierwsza postać normalna
23
Pierwsza postać normalna
Przedmiot Prowadzący
matematyka prof. Lis
24
Anomalie przy usuwaniu, wstawianiu i aktualizacji
25
Anomalie przy usuwaniu, wstawianiu i aktualizacji
26
Przykład:
Zależności funkcyjne
X→Y (X określa Y)
przykład: gdy znamy numer PESEL naszego pracownika, możemy określić jego
nazwisko
— Zależność wielowartościowa oznacza, że znając wartość jednego atrybutu,
możemy zawsze określić wartości zbioru innego atrybutu. W teorii relacji
używa się symbolu zależności wielowartościowej w postaci podwójnej
strzałki, na przykład:
X →→ Y (X określa wiele Y)
przykład: znając numer oddziału możemy określić nazwiska wszystkich
zatrudnionych pracowników
— Relacja jest w drugiej postaci normalnej, jeśli jest w 1PN oraz każdy atrybut
tej relacji nie wchodzący w skład żadnego klucza potencjalnego jest w pełni
funkcyjnie zależny od wszystkich kluczy potencjalnych tej relacji.
— Relacja jest w 2PN jeżeli każdy atrybut nie wchodzący w skład klucza zależy
od całości klucza a nie od jego części.
— Relacja będąca w pierwszej postaci normalnej, jest równocześnie w drugiej
postaci normalnej, jeśli wszystkie jej klucze potencjalne są kluczami
prostymi.
— Dana relacja jest w trzeciej postaci normalnej, jeśli jest ona w drugiej
postaci normalnej i każdy jej atrybut nie wchodzący w skład żadnego klucza
potencjalnego nie jest przechodnio funkcyjnie zależny od żadnego klucza
potencjalnego tej relacji.
Dana relacja jest w trzeciej postaci normalnej, jeśli jest ona w drugiej postaci
normalnej i każdy jej atrybut nie wchodzący w skład żadnego klucza potencjalnego
nie jest przechodnio funkcyjnie zależny od żadnego klucza potencjalnego tej relacji.
• opiekun może mieć tylko jedno seminarium, więc kluczem w relacji może być:
podzbiór IdStudenta + Seminarium lub IdStudenta + Opiekun
• Student może chodzić na konkretne seminarium u tylko jednej osoby
• opiekun może mieć tylko jedno seminarium, więc kluczem w relacji może być:
podzbiór IdStudenta + Seminarium lub IdStudenta + Opiekun
• Student może chodzić na konkretne seminarium u tylko jednej osoby
• opiekun może mieć tylko jedno seminarium, więc kluczem w relacji może być:
podzbiór IdStudenta + Seminarium lub IdStudenta + Opiekun
• Student może chodzić na konkretne seminarium u tylko jednej osoby
• opiekun może mieć tylko jedno seminarium, więc kluczem w relacji może być:
podzbiór IdStudenta + Seminarium lub IdStudenta + Opiekun
• Student może chodzić na konkretne seminarium u tylko jednej osoby
• Nie spełniona jest III postać normalna, ponieważ klucz IdStudenta + Opiekun nie
determinują seminarium, która zależy tylko i wyłącznie od opiekuna. Z tego powodu
jako kandydata na klucz główny powinno się wziąć pod uwagę IdStudenta +
Seminarium
• zależność Opiekun Seminarium jest funkcjonalna i nietrywialna a Opiekun nie jest
zbiorem identyfikującym
IdStudenta Seminarium
1 metalurgia
1 inżynieria wiedzy
2 inżynieria wiedzy
3 metalurgia
4 informatyka
— Relacja jest w czwartej formie normalnej (IV PN) wtedy i tylko wtedy, gdy
jest w trzeciej postaci normalnej i nie zawiera nietrywialnej
wielowartościowej zależności atrybutów
— Podzbiór atrybutów Y jest wielowartościowo funkcjonalnie zależny od
podzbioru X w schemacie R, jeżeli dla dowolnej relacji r w schemacie R i dla
dowolnej pary krotek t1 i t2 z relacji r istnieje taka para krotek że:
s1[X]=s2[X]=t1[X]=t2[X] i
s1[Y]= t1[Y] i s1[R-X-Y]=t2[R-X-Y] i
s2 [Y]= t2[Y] i s2 [R-X-Y]=t1[R-X-Y]
X Y R-X-Y
krotka Nazwisko Imię Znajomość języków
dziecka
t1 Kot Ania niemiecki
t2 Kot Jaś angielski
s1 Kot Ania angielski
s2 Kot Jaś niemiecki
Słoń Ola niemiecki
Słoń Ola angielski
t1[X]=t2[X]=s1[X]=s2[X]=(Kot)
s1[Y]= t1[Y]=(Ania) i
s1[R-X-Y]=t2[R-X-Y]=(angielski) i
s2 [Y]= t2[Y]=(Jaś) i
s2 [R-X-Y]=t1[R-X-Y]=(niemiecki)
Tabela spełnia PNBC; klucz (X + Y) -> (z definicji) brak atrybutów niekluczowych (patrz
definicja PNBC), pomimo to pozostają anomalie (np. zmiana obszaru dostawy wymaga
…(?) ). 50
KISIM, WIMiIP, AGH
Czwarta forma normalna
Restauracja Gatunki
A1 Pizza Thick Crust
A1 Pizza Stuffed Crust
Elite Pizza Thin Crust
Elite Pizza Stuffed Crust
Vincenzo's Pizza Thick Crust
Vincenzo's Pizza Thin Crust
52
Piąta postać normalna
Tabela jest w 4PN, ponieważ nie jest możliwy podział na relacje (Sprzedawca,
Marka) + (Marka, Typ produktu) ani (Sprzedawca, Typ produktu) + (Sprzedawca,
Marka) ani (Sprzedawca, Typ produktu) + (Marka, Typ produktu)
59
Nr faktury Za okres Nabywca Usługa Strefa Kierunek Liczba W artość Stawka VAT Kwota VAT W artość
czasowa jednostek netto brutto
(czas
połączenia)
od do
21113332437 1.11.2007 30.11.2007 Andrzej Macioł, Kraków ul. Abonam ent 1 70,00 22,00 15,40 85,40
Arm ii Krajowej 7
21113332437 1.11.2007 30.11.2007 Andrzej Macioł, Kraków ul. Połaczenia Szczyt Era 25,3 50,60 22,00 11,13 61,73
Arm ii Krajowej 8 krajowe
21113332437 1.11.2007 30.11.2007 Andrzej Macioł, Kraków ul. Połaczenia Szczyt Plus GSM 30 33,00 22,00 7,26 40,26
Arm ii Krajowej 9 krajowe
21113332437 1.11.2007 30.11.2007 Andrzej Macioł, Kraków ul. Połaczenia Poza Plus GSM 15 15,00 22,00 3,30 18,30
Arm ii Krajowej 10 krajowe szczytem
21113332437 1.11.2007 30.11.2007 Andrzej Macioł, Kraków ul. SMS 20 10,00 22,00 2,20 12,20
Arm ii Krajowej 11
21113332437 1.11.2007 30.11.2007 Andrzej Macioł, Kraków ul. Razem 186,10 0,00 186,10
Arm ii Krajowej 12
21113332442 1.11.2007 30.11.2007 Adam Stawowy, Zabierzów ul. Abonam ent 1 70,00 22,00 15,40 85,40
Spokojna 5
21113332442 1.11.2007 30.11.2007 Adam Stawowy, Zabierzów ul. Połaczenia Szczyt Era 15 30,00 22,00 6,60 36,60
Spokojna 5 krajowe
21113332442 1.11.2007 30.11.2007 Adam Stawowy, Zabierzów ul. Połaczenia Szczyt Plus GSM 28 30,80 22,00 6,78 37,58
Spokojna 5 krajowe
21113332442 1.11.2007 30.11.2007 Adam Stawowy, Zabierzów ul. Połaczenia Poza Plus GSM 12 12,00 22,00 2,64 14,64
Spokojna 5 krajowe szczytem
21113332442 1.11.2007 30.11.2007 Adam Stawowy, Zabierzów ul. SMS 15 7,50 22,00 1,65 9,15
Spokojna 5
21113332442 1.11.2007 30.11.2007 Adam Stawowy, Zabierzów ul. Razem 156,30 33,07 183,37
Spokojna 5
60
Nr faktury Za okres Nabywca Usługa Strefa Kierunek Liczba Wartość Stawka VAT Kwota VAT Wartość
czasowa jednostek netto brutto
(czas
połączenia)
od do
Abonament 1 70,00 22,00 15,40 85,40
Połaczenia Szczyt Era 25,3 50,60 22,00 11,13 61,73
krajowe
Połaczenia Szczyt Plus GSM 30 33,00 22,00 7,26 40,26
Andrzej Macioł, Kraków ul. krajowe
21113332437 1.11.2007 30.11.2007
Armii Krajowej 7
Połaczenia Poza Plus GSM 15 15,00 22,00 3,30 18,30
krajowe szczytem
SMS 20 10,00 22,00 2,20 12,20
Razem 186,10 0,00 186,10
Abonament 1 70,00 22,00 15,40 85,40
Połaczenia Szczyt Era 15 30,00 22,00 6,60 36,60
krajowe
Połaczenia Szczyt Plus GSM 28 30,80 22,00 6,78 37,58
Adam Stawowy, Zabierzów ul. krajowe
21113332442 1.11.2007 30.11.2007
Spokojna 5
Połaczenia Poza Plus GSM 12 12,00 22,00 2,64 14,64
krajowe szczytem
SMS 15 7,50 22,00 1,65 9,15
Razem 156,30 33,07 183,37
Klucz w grupie
61
Nr faktury Za okres Nabywca
od do
21113332437 1.11.2007 30.11.2007 Andrzej Macioł, Kraków ul.
Arm ii Krajowej 7
21113332442 1.11.2007 30.11.2007 Adam Stawowy, Zabierzów ul.
Spokojna 5
62
to też jest powtarzająca się grupa danych bo za miesiąc będzie tak:
63
Nr faktury Za okres Nabywca
od do Imię Nazwisko Miejscowość Ulica Nr domu
64
Nr faktury Za okres Identyfikator
od do nabywcy wartość netto = liczba jednostek *
21113332437 1.11.2007 30.11.2007 1 cena
1
kwota VAT = wartość netto * stawka
21218909871 1.12.2007 31.12.2007
21113332442 1.11.2007 30.11.2007 2
2
wartość brutto = wartość netto +
21218909900 1.12.2007 31.12.2007
kwota Vat
tego nie
trzeba
pamiętać
65
to też jest powtarzająca się grupa danych, bo tabela może wyglądać
tak:
66
brak dobrego kandydata na klucz grupy i dlatego wprowadzamy
klucz sztuczny i wykonujemy dekompozycję
67
to też jest powtarzająca się grupa danych, w której kluczem jest
rodzaj usługi i dlatego trzeba tablicę zdekomponować:
68
to nie są powtarzające się grupy danych, ale powtarzające się dane,
które warto przechowywać w słownikach:
69
można nie używać sztucznych kluczy ale należy wówczas zadbać o
integralność poprzez zapewnienie kaskadowej aktualizacji:
on update cascade on delete cascade
70
Nr faktury Za okres Identyfikator
od do nabywcy
71
Klucz sztuczny
1
4/10/2017
Filtry Kwerendy
— Warunki wpisane w tej samej linii kryteriów są połączone — Istnieje możliwość wybrania w prosty sposób pewnej grupy
spójnikiem logicznym "i" (podając liczbę krotek, lub procentowy udział) największych
bądź najmniejszych wartości (zależnie od ustawienia
— Warunki wpisane w różnych liniach są połączone spójnikiem
sortowania)
logicznym "lub"
— można też wpisywać dowolne wyrażenia logiczne, np:
"101107" Or "101109"
2
4/10/2017
— Oprócz wyboru do relacji wynikowej kolumn z relacji danych, możliwe jest — W ten sposób można obliczyć sumę lub średnią
także zdefiniowanie kolumn, których wartości są wyliczane na podstawie wartości w kolumnie, znaleźć wartość minimalną lub
innych. maksymalną i policzyć liczbę elementów w kolumnie.
3
4/10/2017
Interfejs użytkownika
4
4/10/2017
Typy formularzy
Lista pól
Przybornik formantów
Formanty Właściwości
— Właściwości formularza i formantów:
— Etykieta – przeznaczona do » Określają wygląd
wyświetlania tekstów informacyjnych
» Zachowanie
— Pole tekstowe – zawiera dane z obiektu
źródłowego lub będące wynikiem » Źródło danych
wyrażenia. » Zachowanie formantu
— Grupa opcji – pozwala na dokonywanie — Np:
wyboru w formularzu. Można do niej
dodawać pole wyboru, przycisk opcji » Źródło rekordów – domyślna tabela,
bądź przycisk przełącznika jako kwerenda lub wyrażenie w języku SQL
elementy umożliwiające wybór.
będące podstawą formularza Zakładki grup
— Pole listy – wyświetla listę wartości, z właściwości
której należy wybrać jedną. Musi mieć » Tytuł – tekst pojawiający się na pasku
określone źródło informacji, z którego tytułu w widoku Formularz,
pobiera wartości. » Widok domyślny – określa wygląd
— Pole kombi – stanowi połączenie pola formularza po jego otwarciu, może to być
tekstowego i pola listy tzn. wartość Formularz pojedynczy, Formularze ciągłe
może być wpisana w polu lub wybrana z lub Arkusz danych,
listy.
— Przycisk polecenia – jest formantem po,
» Dostępne widoki – decyduje o możliwości
kliknięciu którego uruchamiane jest przełączania się pomiędzy widokami.
makropolecenie lub procedura
zdarzenia.
— Umożliwiają dostęp do
danych z dwóch tabel — Cel: proste uzupełnianie
— Dla każdej tabeli osobny tabeli wyniki:
formularz » nr_albumu
— Podformularz w formularzu » ID_kolokwium
głównym
(bez zapamiętywania
— Połączone formularze wartości kluczy)
5
4/10/2017
— Ich przeznaczeniem jest umożliwiać przełączanie pomiędzy — Istnieje możliwość zaprojektowania formularza będącego
innymi obiektami (formularzami, raportami) rozbudowanym oknem dialogowym.
— Podstawowy formant: przycisk polecenia — Przykład: parametry wyszukiwania produktu
— Pola tekstowe
odpowiadające
kryteriom
wyszukiwania
— Przycisk polecenia
wywołujący kwerendę
szukaj_produktu
Kwerenda
szukaj_produktu
6
4/10/2017
Interfejs użytkownika
Raport
— umożliwia tworzenie określonych zestawień, podsumowań
dotyczących danych zawartych w bazie
— jest odbiciem chwilowego stanu bazy (fotografia
rzeczywistości)
— najczęściej tworzony są dla potrzeb wydruku lub eksportu do
pliku
Raporty — projektując raport użytkownik ma wpływ na szatę graficzną
raportu, można w nim umieszczać m.in. rysunki, linie, ramki,
wykresy itp.
— można sortować i grupować informacje wg określonych
kryteriów
— można w raporcie wykonać obliczenia na danych włączając w
to sumy częściowe i całkowite.
— Pobiera dane z tabel i kwerend
— Skonstruowany przy użyciu formantów
w polu, po którym
grupujemy wartości
Nagłówek, stopka raportu powtarzające są
umieszczamy elementy, które wyświetlane tylko raz
są widoczne na pierwszej i
ostatniej stronie (np. strona
Grupowanie po nazwie
tytułowa)
kategorii oraz nazwie
producenta
7
4/10/2017
Model relacyjny:
• Baza danych przedstawiona jest w postaci tablic
dla encji, związków i ich atrybutów.
Podstawowe zagadnienia • Tablice, a tym samym cała baza danych, mogą być
interpretowane jako relacje w sensie
algebry relacji matematycznym. Również operacje w bazie danych
– jako operacje na relacjach.
• Podstawą modelu jest algebra relacji opisująca te
operacje i ich własności.
• Algebra relacji stanowi również podstawę języków
DDL i DML w tym SQL.
customer
1
4/10/2017
Przykłady:
Działania teoriomnogościowe: R: Marka Model Rok
S: Marka Model Rok
samochodu samochodu produkcji samochodu samochodu produkcji
Fiat Uno 1990 Fiat Uno 1990
• RS – suma zbiorów R i S jest zbiorem krotek, z Ford Fiesta 2000 Ford Mondeo 2000
których każda należy do R lub S lub do obu razem; Fiat Panda 1004
jeżeli krotka występuje w obu relacjach to w ich Ford Mondeo 1998
sumie pojawia się tylko raz
Marka Model Rok
RS:
• RS – przecięcie zbiorów R i S jest zbiorem krotek, samochodu samochodu produkcji
Fiat Uno 1990
które należą zarówno do R jak i S Ford Fiesta 2000
• R-S – różnica zbiorów R i S zawiera krotki należące Ford Mondeo 2000
do R i nie należące do S Fiat Panda 1004
Ford Mondeo 1998
• Relacje R i S muszą mieć identyczne schematy R-S : Marka Model Rok
RS : Marka Model Rok
samochodu samochodu produkcji samochodu samochodu produkcji
Ford Fiesta 2000 Fiat Uno 1990
Rzutowanie: Selekcja:
• nie zmieniając schematu relacji R tworzy nową
relację zawierającej podzbiór krotek R spełniających
pewien logiczny warunek
• Tworzy nową relację z relacji R przez usunięcie z niej
pewnych kolumn
C (R)
A1, A2,...,An ( R)
• gdzie C to wyrażenie warunkowe na jednym lub
więcej atrybutach
2
4/10/2017
Złączenie teta
R
Równozłączenie
Towar Data_Od Data_do Cena
Złączenie lewostronne
Równozłączenie
zewnętrzne
R S R S
Towar Klient Kontrahent Miasto Towar Klient Kontrahent Miasto
stal Exbud Exbud Kielce stal Exbud Exbud Kielce
PBS Kraków PBS Kraków
cegła PBS cegła PBS
PHS Tarnów PHS Tarnów
złom złom
R R.Klient=S.Kontrahent S R R.Klient=S.Kontrahent S
Towar Klient Miasto Towar Klient Miasto
stal Exbud Kielce stal Exbud Kielce
cegła PBS Kraków cegła PBS Kraków
złom
3
4/10/2017
Złączenie prawostronne
Złączenie zewnętrzne pełne
zewnętrzne
R S R S
Towar Klient Kontrahent Miasto Towar Klient Kontrahent Miasto
stal Exbud Exbud Kielce stal Exbud Exbud Kielce
PBS Kraków PBS Kraków
cegła PBS cegła PBS
PHS Tarnów PHS Tarnów
złom złom
R R.Klient=S.Kontrahent S
R R.Klient=S.Kontrahent S
Towar Klient Miasto
Towar Klient Miasto stal Exbud Kielce
stal Exbud Kielce cegła PBS Kraków
cegła PBS Kraków
złom
PHS Tarnów
PHS Tarnów
Przemianowanie:
Złączenie zewnętrzne typu union
R S
Towar Klient Kontrahent Miasto
stal Exbud
Exbud Kielce • zmienia nazwę relacji i ewentualnie nazwy atrybutów
PBS Kraków (kolumn) w relacji i jest oznaczane
cegła PBS
PHS Tarnów
złom
R S
S ( A , A ,...A ) ( R)
1 2 n
R.Klient=S.Kontrahent
Towar Klient Miasto
złom
• w tym przypadku relacja R zostanie przemianowana na S a
atrybuty otrzymają nazwy A1, A2,...An
PHS Tarnów
4
4/10/2017
Piotr Macioł
WIMiIP, KISiM,
pmaciol@agh.edu.pl
B5, pok. 606
— SQL w swoich konstrukcjach opiera się na algebrze relacji. — 1983: ISO** – definicja SQL
— Aplikacje sięgają do bazy danych za pomocą SQL w dwóch — 1986: ANSI – pierwszy standard SQL (SQL-86)
trybach: — 1987: ISO – pierwszy standard SQL (ISO 9075)
» Wykonane są w językach (np. C, Cobol, Pascal) — SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2008,
rozszerzonych o możliwość łączenia z SQL (embedded SQL)
— SQL:2011 [ISO/IEC 9075:2011] (siódma wersja)
» Korzystają ze specjalnego interfejsu (np. ODBC/JDBC), który
pozwala wysyłać do bazy zapytania sformułowane w SQL. — SQL:2016 - Adds row pattern matching, polymorphic table functions, JSON.
— DDL (Data Definition Language) – tworzenie, usuwanie i — Standard SQL definiuje również zasady osadzania (embedded)
modyfikacja schematów, kluczy, indeksów, widoków, SQL w językach programowania, takich jak C++, Java itd.
warunków integralności i praw dostępu, a także fizyczną
strukturę pamięci dyskowej (CREATE, DROP, ALTER) — Język, w którym osadzono SQL nazywany jest host language a
struktury SQL dozwolone w tym języku tworzą osadzony SQL.
— DML (Data Manipulation Language) – język zapytań oparty na — <struktura-osadzonego-SQL> wykorzystuje w ogólnym
algebrze relacji obejmujący ponadto polecenia dodające, przypadku pełne możliwości SQL uzupełnione o pewne
usuwające i aktualizujące dane w bazie danych (SELECT, elementy wynikające z osadzenia.
INSERT, DELETE, UPDATE)
— Aktualnie rzadko stosowany -> komunikacja poprzez ODBC lub
— Kontrola transakcji – SQL obejmuje polecenia rozpoczęcia i interfejsy wyższego poziomu
zakończenia transakcji, a także blokowania danych dla
współbieżnych operacji (START TRANSACTION, COMMIT,
ROLLBACK etc.)
KISIM, WIMiIP, AGH 5 KISIM, WIMiIP, AGH 6
1
4/10/2017
Schematy Schematy
— Standard SQL dopuszcza tworzenie własnych zbiorów — CHAR(n) – skończonej długości łańcuch znakowy, z podaną przez
dopuszczalnych wartości pewnych kolumn w tabelach użytkownika długością n
(dziedzin atrybutów) — VARCHAR(n) – zmiennej długości łańcuch znakowy, z podaną przez
użytkownika maksymalną długością n
CREATE DOMAIN nazwa_domeny AS typ_danych — TEXT – typ znakowy różniący się od CHAR i VARCHAR długością, nie może
posiadać wartości DEFAULT
DEFAULT wartosc_domyslna
CHECK warunek_kontrolny — INT(n), INTEGER(n) – liczba całkowita o podanej długości
— BOOL, BOOLEAN – równoważne typowi TINYINT(1), mogą posiadać
CREATE DOMAIN kontrola AS CHAR(1) wartość 1 lub 0 rozumiane odpowiednio jako TRUE lub FALSE
DEFAULT ‘T’ — DATE - daty zawierające rok (4-cyfrowy), miesiąc i dzień
CHECK(UPPER(VALUE) = ‘T’ OR UPPER(VALUE)=‘N’) (w formacie YYYY-MM-DD)
— TIME - czas w godzinach, minutach i sekundach
— DATETIME – kombinacja DATE i TIME (np.: 9999-12-31 23:59:59)
2
4/10/2017
— FLOAT – mała liczba rzeczywista, zmiennoprzecinkowa — wartość NULL nie może być umieszczona w kolumnie
— DOUBLE(length, decimal) – duża liczba rzeczywista, zmiennoprzecinkowa
NOT NULL,
— DECIMAL(length, decimal)– liczba typu DOUBLE przechowywana w postaci — porównywanie dwóch kolumn zawierających NULL
łańcucha co pozwala na zastosowanie stałej liczby miejsc po przecinku jest nieskuteczne (wartości NULL można identyfikować
— SERIAL - jest aliasem dla w klauzuli WHERE przy użyciu wyrażeń IS NULL IS NOT
‘BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE’ NULL)
— SERIAL DEFAULT VALUE jako atrybut pola typu integer (od TINYINT do — kolumna zawierająca NULL jest ignorowana podczas
BIGINT) jest aliasem dla NOT NULL AUTO_INCREMENT obliczania wartości agregujących natomiast jest
— Wartości NULL dozwolone są we wszystkich typach. Deklarując atrybut ze uwzględniana w klauzuli GROUP BY
specyfikatorem NOT NULL, zabrania się wpisywania wartości NULL dla tego
atrybutu. — jeżeli w warunku złączenia pojawi się kolumna z
wartościami NULL to złączenie traktowane jest jako
zewnętrzne
KISIM, WIMiIP, AGH 13 KISIM, WIMiIP, AGH 14
3
4/10/2017
Klucze obce
4
4/10/2017
Wymuszanie integralności
5
4/10/2017
6
4/10/2017
— DROP TABLE tabela1, tabela2 — W większości przypadków pokazywanie wszystkich danych bazy wszystkim
Usuwa relacje (tabele) tabela1, tabela2 z bazy danych użytkownikom jest niepożądane. Również różni użytkownicy wymagają
prezentacji danych w różny sposób.
— RENAME TABLE tabela1 TO tabela1
» Np. Klient może być mieć dostęp do informacji o numerze konta
Polecenie służące do zmiany nazwy jednej lub więcej tabel innego klienta, ale nie może zobaczyć stanu tego konta.
— Przykłady: — Relację, która nie jest składową modelu bazy danych, ale jest
prezentowana użytkownikom, nazywa się widokiem (view).
CREATE TABLE new_table (...);
— Dla utworzenia widoku używa się polecenia postaci:
RENAME TABLE old_table TO backup_table,
CREATE VIEW nazwa_widoku AS <podzapytanie>
new_table TO old_table;
gdzie <podzapytanie> jest dowolną konstrukcją select-from-where.
— Po zdefiniowaniu widoku można się do niego odwoływać w zapytaniach jak
RENAME TABLE current_database.table_name
do normalnej relacji.
TO other_database.table_name;
KISIM, WIMiIP, AGH 37 KISIM, WIMiIP, AGH 38
7
4/10/2017
— Zgodnie ze standardem SQL-92 można modyfikować wyłącznie — Modyfikacja bazy danych przez ich usunięcie może być zrealizowana w SQL
za pomocą polecenia postaci:
takie perspektywy, które:
DELETE FROM <relacja> WHERE <warunek>
» nie zawierają złączeń, — Można zatem usuwać jedynie całe krotki, dla których prawdziwy jest
<warunek> , oraz jednokrotnie tylko z jednej <relacja> (tabeli).
» są pojedyncze (np. unie nie są dopuszczalne),
— Opuszczenie klauzuli WHERE skutkuje usunięciem danych z całej tabeli.
» nie mogą być oparte na zapytaniu grupującym lub
— Wykonanie DELETE przebiega w dwóch fazach: najpierw realizowany jest
zawierającym słowo DISTINCT, wybór wszystkich krotek, a następnie ich usuwanie.
» nie można modyfikować kolumn wyliczonych Usuń pracowników z wynagrodzeniem równym zero.
DELETE FROM pracownicy
WHERE placa = 0;
— <warunek> może mieć formę dowolną akceptowaną przez klauzulę WHERE
w zapytaniach, w tym może zawierać podzapytania.
— Modyfikacja bazy danych przez ich dodanie może być zrealizowana w SQL INSERT INTO Klient
za pomocą poleceń postaci: (NazwaKlienta, Telefon, KodPocztowy, Miejscowosc, Ulica,
NrDomuMieszkania, Email)
INSERT INTO <relacja> VALUES <krotka> VALUES('Nowy klient', '48 12 1234567', '30-333', 'Bolechowice',
INSERT INTO <relacja> VALUES <relacja-wstawiana> 'Jurajska', '20','ala@tlen.pl')
— Można zatem dodawać jedynie całe krotki oraz jednokrotnie tylko do
jednej relacji (tabeli). Zachowany być musi schemat relacji i domeny +-----------+-------------------+---------------+
atrybutów. | IdKlienta | NazwaKlienta | Telefon |
— O ile to jest dopuszczone <krotka> może zawierać wartości NULL. +-----------+-------------------+---------------+
| 3 | STALHANDEL | 48 32 7865748 |
Dodaj nową krotkę do relacji pracownicy z wynagrodzeniem ustawionym na NULL | 2 | Firma Krok Sp zoo | 48 12 6374532 |
INSERT INTO pracownicy (pesel, nazwisko, imie, placa) | 5 | PHPU OSA | 48 12 6372312 |
VALUES (‘99999900000’, ‘Regulski’, ‘Krzysztof’,’104BT’,NULL) | 4 | Rower Polska SA | 48 12 2853364 |
INSERT INTO pracownicy VALUES (‘99999900000’, ‘Regulski’, | 1 | FH Klin SA | 48 12 1273210 |
‘Krzysztof’,’104BT’,NULL) | 6 | Nowy klient | 48 12 1234567 |
+-----------+-------------------+---------------+
— Formę z values stosować można również do widoków.
KISIM, WIMiIP, AGH 45 KISIM, WIMiIP, AGH 46
— Modyfikacja bazy danych przez zmianę wartości atrybutów może być — istnieją wyłącznie w trakcie trwania sesji
zrealizowana w SQL za pomocą polecenia postaci:
— obsługuje się je identycznie jak tabele stałe
UPDATE <relacja> SET <modyfikacja> WHERE <warunek>
— są znacznie szybciej obsługiwane niż zapytania czy
— Można modyfikować jeden atrybut krotek, dla których prawdziwy jest perspektywy ale nie są automatycznie modyfikowane
<warunek> oraz jednokrotnie tylko z jednej <relacja> (tabeli).
— w przeciwieństwie do widoków są w pełni modyfikowalne
— <modyfikacja> jest wyrażeniem arytmetycznym (akceptowalnym w
klauzuli SELECT), przypisującym (=) nową wartość atrybutowi.
— Opuszczenie klauzuli WHERE skutkuje modyfikacją całej tabeli.
8
4/10/2017
Edycja złożenia
— W tabeli możemy zmienić dane posługując się nazwami DECLARE @indeks bigint;
pochodzącymi w systemie z różnych tabel
SELECT @indeks= dbo.ds_SlownikCech.IdSlownikaCech
— Po edycji można odtworzyć tabele źródłowe FROM dbo.ds_SlownikCech
WHERE dbo.ds_SlownikCech.WartoscSlownikowa='eliptyczna';
9
4/10/2017
Użytkownik ma prawa do edycji danych, nie może jednak zmieniać struktur bazy danych
haslo
GRANT CREATE , DROP , INDEX , ALTER , CREATE REVOKE ALL PRIVILEGES ON * . * FROM 'andrzej'@'localhost';
TEMPORARY TABLES ON * . * TO GRANT SELECT ,
'andrzej'@'localhost' IDENTIFIED BY '*****' WITH INSERT ,
UPDATE ,
MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 DELETE ,
MAX_UPDATES_PER_HOUR 0 ; RELOAD ,
SHUTDOWN ,
PROCESS ,
FILE ,
REFERENCES ,
SHOW DATABASES ,
SUPER ,
GRANT ALL PRIVILEGES ON `sprzedaz` . * TO LOCK TABLES ,
'andrzej'@'localhost' WITH GRANT OPTION ; EXECUTE ,
REPLICATION SLAVE ,
REPLICATION CLIENT ON * . * TO 'andrzej'@ 'localhost' WITH GRANT OPTION
MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;
10
4/10/2017
Transakcje
START (BEGIN) TRANSACTION; — Użycie tabeli w trakcie transakcji blokuje dostęp do tabeli
polecenia — Polecenie ROLLBACK kasuje działania wykonane podczas
transakcji
COMMIT – zatwierdzenie transakcji
— Polecenie COMMIT zatwierdza działania
lub
ROLLBACK – wycofanie transakcji
Transakcje w MySQL
BEGIN TRANSACTION;
UPDATE tch_ListaProduktow
SET CechaTekstowa1 = 4
WHERE (IdProduktu = 2944);
COMMIT;
11
4/10/2017
Procedury składowane
Wyzwalacze w SQL 99
12
4/10/2017
USE test
DROP TRIGGER uwaga
GO
CREATE TRIGGER uwaga
ON Przedmioty
AFTER INSERT, UPDATE
AS RAISERROR ('Nie wolno dopisywaæ danych', 16,
10)
GO
ds-asortymenty
CREATE TRIGGER archiwacja ON ds_asortymenty
FOR DELETE
AS
INSERT INTO ds_asortymenty_arch
SELECT *
FROM deleted
ds_asortymenty_arch
13
4/10/2017
Języki 4GL
14
4/10/2017
SELECT *
FROM oddzialy;
KISIM, WIMiIP, AGH 3 KISIM, WIMiIP, AGH 4
1
4/10/2017
| id_oddzialu |
FROM pracownicy, oddzialy +-----------------------+
(1)
| nazwa_oddzialu |
WHERE pracownicy.id_oddzialu=oddzialy.id_oddzialu +----------------+
AND oddzialy.nazwa_oddzialu LIKE ‘Betatrex’;
— SQL używa logicznych operatorów AND, OR i NOT, =, <, >, >=, <=, <>
— (NOT)BETWEEN .. AND kiedy specyfikuje się, że wartość ma zawierać się w określonym +----------+--------------+---------------------------+
przedziale zamkniętym | IdTowaru | SymbolTowaru | NazwaTowaru |
np..: WHERE cena BETWEEN ‘dolna_granica’ AND ‘górna_granica’ +----------+--------------+---------------------------+
| 1 | RZ001 | Rura zgrz. fi 6,3 gr 0,2 |
— (NOT) IN (e1, .., en) kiedy porównujemy do jednego z elementów zbioru
| 2 | RZ002 | Rura zgrz. fi 12,6 gr 0,2 |
np..: WHERE imie NOT IN (‘Stefan’, ‘Bożena’)
| 3 | RZ003 | Rura zgrz. fi 6,3 gr 0,3 |
— (NOT) LIKE kiedy porównujemy ciągi znaków do wzorca | 4 | RZ004 | Rura zgrz. fi 12,6 gr 0,3 |
Wyrażenia regularne: | 5 | RZ011 | Rura zgrz. kw 4 gr 0,2 |
% - dowolny ciąg znaków | 6 | RZ012 | Rura zgrz. kw 5 gr 0,3 |
| 7 | ZL001 | Złączka 1' |
_ (podkreślenie) - dowolny znak
| 8 | ZL002 | Złączka 2' |
[ck] - znak 'c' lub 'k'
+----------+--------------+---------------------------+
[c-k] - znak z zakresu od 'c' do 'k‘
[^c] - nie 'c'
— IS (NOT) NULL służy do sprawdzania, czy wartość w polu to NULL
2
4/10/2017
— Operacje połączenia (JOIN) bierze dwie relacje i zwraca jako wynik inną
SELECT * relacje.
FROM `towar` — Te dodatkowe operacje są zazwyczaj używane jako polecenie podzapytania
WHERE SymbolTowaru LIKE 'R%' w klauzuli FROM.
— Warunki połączenia definiują, które krotki z dwóch relacji pasują i które
+----------+--------------+---------------------------+ atrybuty będą obecne jako wynik połączenia.
| IdTowaru | SymbolTowaru | NazwaTowaru |
+----------+--------------+---------------------------+ — Typ połączenia - definiuje jak będą traktowane takie krotki z
| 1 | RZ001 | Rura zgrz. fi 6,3 gr 0,2 | poszczególnych relacji, które nie pasują do krotek z drugiej relacji.
| 2 | RZ002 | Rura zgrz. fi 12,6 gr 0,2 | tabela1 [NATURAL|LEFT|RIGHT|INNER|OUTER] JOIN tabela2
| 3 | RZ003 | Rura zgrz. fi 6,3 gr 0,3 |
| 4 | RZ004 | Rura zgrz. fi 12,6 gr 0,3 | — Warunki łączenia:
| 5 | RZ011 | Rura zgrz. kw 4 gr 0,2 | NATURAL, ON <warunek_złączenia>, USING <lista_atrybutów>
| 6 | RZ012 | Rura zgrz. kw 5 gr 0,3 | — JOIN w większości przypadków może być zastąpione przez odpowiednie
+----------+--------------+---------------------------+ klauzule FROM i WHERE
3
4/10/2017
— Relacja oddzialy:
+----------------+-----------------+
| id_oddzialu | nazwa_oddzialu |
SELECT oddzialy.nazwa_oddzialu, pracownicy.nazwisko
FROM (oddzialy INNER JOIN pracownicy
+----------------+-----------------+ ON oddzialy.id_oddzialu=pracownicy.id_oddzialu);
| L140 | Betatrex | +-----------------+-----------------+
| A4 | Alfatron | | nazwa_oddzialu | nazwisko |
+-----------------+-----------------+
| B340 | Tetrix | | Betatrex | Ambrozjowa |
+----------------+-----------------+ | Betatrex | Kosonosy |
| Alfatron | Angonilewicz |
— Relacja pracownicy: +-----------------+-----------------+
— Możliwe jest używanie aliasów nazw kolumn i nazw tabel. — Sortowanie wyników osiąga się dzięki klauzuli ORDER BY.
Umożliwiają one: Sortowanie odbywa się kolejno według wartości atrybutów
wymienionych w klauzuli.
» zmianę nazwy kolumny wyświetlanej
— Dla każdego z atrybutów można podać specyfikator DESC dla
» nadanie nazwy kolumnie będącej wynikiem wyrażenia lub
porządku malejącego lub ASC dla porządku rosnącego.
stałą
Porządek rosnący jest domyślny.
SELECT
@liczba1:=8 AS A, — Ponieważ sortowanie dużej ilości krotek jest kosztowne,
@liczba2:=2 AS B,
@wynik:=@liczba1+@liczba2 AS 'WYNIK A+B'; wskazane jest wykonywanie sortowania tylko wtedy, gdy jest
to niezbędne.
+---+---+-----------+
| A | B | WYNIK A+B |
+---+---+-----------+
| 8 | 2 | 10 |
SELECT nazwisko, imie
+---+---+-----------+ FROM pracownicy
ORDER BY nazwisko DESC, imie DESC;
4
4/10/2017
5
4/10/2017
+---------------------------+---------------------+--------+
| NazwaTowaru | DataZamowienia | Ilosc |
+---------------------------+---------------------+--------+ SELECT NazwaKlienta, NrKonta, NazwaBanku
| Rura zgrz. fi 12,6 gr 0,2 | 2004-04-04 00:00:00 | 12 |
FROM Klient JOIN Konto USING (IdKlienta) RIGHT
| Rura zgrz. fi 12,6 gr 0,2 | 2004-04-07 00:00:00 | 50 |
JOIN Bank Using(IdBanku)
| Rura zgrz. fi 12,6 gr 0,3 | 2004-04-06 00:00:00 | 12 |
| Rura zgrz. fi 6,3 gr 0,2 | 2004-04-04 00:00:00 | 20 | ORDER BY NazwaKlienta, NazwaBanku
| Rura zgrz. fi 6,3 gr 0,2 | 2004-04-06 00:00:00 | 50 |
| Rura zgrz. fi 6,3 gr 0,2 | 2004-04-05 00:00:00 | 100 |
| Rura zgrz. fi 6,3 gr 0,3 | 2004-04-04 00:00:00 | 25 |
| Rura zgrz. fi 6,3 gr 0,3 | 2004-04-06 00:00:00 | 50 | SELECT NazwaKlienta, NrKonta, NazwaBanku
| Rura zgrz. kw 4 gr 0,2 | 2004-04-07 00:00:00 | 30 |
FROM Klient JOIN Konto ON (Klient.IdKlienta =
| Rura zgrz. kw 4 gr 0,2 | 2004-04-05 00:00:00 | 6 |
| Rura zgrz. kw 5 gr 0,3 | [NULL] | [NULL] | Konto.IdKlienta) RIGHT JOIN Bank ON (Konto.IdBanku =
| Zlaczka 1' | 2004-04-06 00:00:00 | 100 | Bank.IdBanku)
| Zlaczka 2' | 2004-04-06 00:00:00 | 50 | ORDER BY NazwaKlienta, NazwaBanku
| Złączka 3/4' | [NULL] | [NULL] |
+---------------------------+---------------------+--------+
Zagnieżdżone podzapytania
6
4/10/2017
+---------------------------+--------+
| NazwaTowaru | Ilosc |
+---------------------------+--------+
| Rura zgrz. fi 6,3 gr 0,2 | 20 |
| Rura zgrz. fi 12,6 gr 0,2 | 12 |
| Rura zgrz. fi 6,3 gr 0,3 | 25 |
+---------------------------+--------+
+-----------------+---------------------------+--------+
| NazwaKlienta | NazwaTowaru | Ilosc |
+-----------------+---------------------------+--------+
| FH Klin SA | Rura zgrz. fi 6,3 gr 0,3 | 25 |
| STALHANDEL | Rura zgrz. fi 6,3 gr 0,3 | 50 |
| FH Klin SA | Rura zgrz. fi 12,6 gr 0,2 | 12 |
| Rower Polska SA | Rura zgrz. fi 12,6 gr 0,2 | 50 |
+-----------------+---------------------------+--------+
KISIM, WIMiIP, AGH 39 KISIM, WIMiIP, AGH 40
+-----------------+
SELECT NazwaKlienta | NazwaKlienta |
FROM Towar JOIN LiniaZamowienia USING (IdTowaru) JOIN Zamowienie USING
(IdZamowienia) JOIN Klient Using (IdKlienta) +-----------------+
WHERE NazwaTowaru = 'Rura zgrz. fi 6,3 gr 0,3' | FH Klin SA |
UNION | STALHANDEL |
SELECT NazwaKlienta | Rower Polska SA |
FROM Towar JOIN LiniaZamowienia USING (IdTowaru) JOIN Zamowienie USING
(IdZamowienia) JOIN Klient Using (IdKlienta) +-----------------+
WHERE NazwaTowaru = 'Rura zgrz. fi 12,6 gr 0,2'
7
4/10/2017
+-----------------+ +-----------------+
| NazwaKlienta | | NazwaKlienta |
+-----------------+ +-----------------+
| FH Klin SA | | FH Klin SA |
| FH Klin SA | | STALHANDEL |
| STALHANDEL | | Rower Polska SA |
| Rower Polska SA | +-----------------+
+-----------------+
KISIM, WIMiIP, AGH 43 KISIM, WIMiIP, AGH 44
8
4/10/2017
SELECT SUM(Ilosc*LiniaZamowienia.Cena)
SELECT COUNT(*) AS Liczba FROM Towar LEFT JOIN LiniaZamowienia USING (IdTowaru) LEFT JOIN Zamowienie
FROM Towar LEFT JOIN LiniaZamowienia USING (IdTowaru) LEFT JOIN Zamowienie USING (IdZamowienia)
USING (IdZamowienia)
ORDER BY NazwaTowaru 759,8
14
SELECT AVG(LiniaZamowienia.Cena)
FROM Towar LEFT JOIN LiniaZamowienia USING (IdTowaru)
SELECT COUNT(Ilosc) AS Liczba WHERE Towar.IdTowaru=1
FROM Towar LEFT JOIN LiniaZamowienia USING (IdTowaru) LEFT JOIN Zamowienie
USING (IdZamowienia) 1,46667
SELECT DATE_FORMAT(DataZamowienia, '%Y %m %d') AS Data, Towar.NazwaTowaru, SELECT NazwaKLienta, DATE_FORMAT(DataZamowienia, '%Y %m %d') AS Data,
SUM(Ilosc) AS Ilosc , SUM(Ilosc*Cena) AS Wartosc SUM(Ilosc*Cena) AS Wartosc
FROM Zamowienie JOIN LiniaZamowienia USING (IdZamowienia) JOIN Towar USING ( FROM Klient JOIN Zamowienie USING (IdKlienta) JOIN LiniaZamowienia USING
IdTowaru) (IdZamowienia)
GROUP BY DataZamowienia GROUP BY NazwaKlienta
ORDER BY DataZamowienia ORDER BY NazwaKLienta, DataZamowienia
+-------------------+------------+---------+
+------------+---------------------------+--------+---------+ | NazwaKLienta | Data | Wartosc |
| Data | NazwaTowaru | Ilosc | Wartosc | +-------------------+------------+---------+
+------------+---------------------------+--------+---------+ | FH Klin SA | 2004 04 04 | 203.1 |
| 2004 04 04 | Rura zgrz. fi 6,3 gr 0,2 | 57 | 103.5 | | Firma Krok Sp zoo | 2004 04 05 | 153.2 |
| 2004 04 05 | Rura zgrz. fi 6,3 gr 0,2 | 106 | 153.2 | | Rower Polska SA | 2004 04 07 | 153.5 |
| 2004 04 06 | Rura zgrz. fi 6,3 gr 0,2 | 262 | 349.6 | | STALHANDEL | 2004 04 06 | 250 |
| 2004 04 07 | Rura zgrz. fi 12,6 gr 0,2 | 80 | 153.5 | +-------------------+------------+---------+
+------------+---------------------------+--------+---------+
SELECT NazwaKLienta, DATE_FORMAT(DataZamowienia, '%Y %m %d') AS Data, SELECT NazwaKLienta, DATE_FORMAT(DataZamowienia, '%Y %m %d') AS Data,
SUM(Ilosc*Cena) AS Wartosc SUM(Ilosc*Cena) AS Wartosc
FROM Klient JOIN Zamowienie USING (IdKlienta) JOIN LiniaZamowienia USING FROM Klient JOIN Zamowienie USING (IdKlienta) JOIN LiniaZamowienia
(IdZamowienia) USING (IdZamowienia)
GROUP BY NazwaKlienta, DataZamowienia WHERE DataZamowienia > '2004-04-04'
ORDER BY NazwaKLienta, DataZamowienia GROUP BY NazwaKlienta, DataZamowienia
ORDER BY NazwaKLienta, DataZamowienia
+-------------------+------------+---------+ +-------------------+------------+---------+
| NazwaKLienta | Data | Wartosc | | NazwaKLienta | Data | Wartosc |
+-------------------+------------+---------+ +-------------------+------------+---------+
| FH Klin SA | 2004 04 04 | 103.5 | | FH Klin SA | 2004 04 06 | 99.6 |
| FH Klin SA | 2004 04 06 | 99.6 | | Firma Krok Sp zoo | 2004 04 05 | 153.2 |
| Firma Krok Sp zoo | 2004 04 05 | 153.2 | | Rower Polska SA | 2004 04 07 | 153.5 |
| Rower Polska SA | 2004 04 07 | 153.5 | | STALHANDEL | 2004 04 06 | 250 |
| STALHANDEL | 2004 04 06 | 250 | +-------------------+------------+---------+
+-------------------+------------+---------+
9
4/10/2017
+-------------+-------------+
— UPPER i LOWER konwertują łańcuchy tekstowe na duże lub małe | KodPocztowy | Miejscowosc |
+-------------+-------------+
litery | 30-121 | Kraków |
| 30-321 | Kraków |
| 34-876 | Sosnowiec |
— TRIM (słowo) – usuwa określone znaki z początku lub końca | 32-082 | Zabierzów |
łańcucha znaków. Domyślnie usuwa spacje z obu stron. Ilość | 30-432 | Kraków |
+-------------+-------------+
usuwanych znaków jest ograniczona do jednego.
SELECT SUBSTRING(TRIM(LEADING '3' FROM CONCAT(KodPocztowy, ' ', Miejscowosc))
» TRIM (BOTH znak FROM słowo) FROM 1 FOR 12) AS Miasto
FROM klient
WHERE UPPER(Miejscowosc) = 'KRAKÓW'
» TRIM (LEADING znak FROM słowo)
+--------------+
» TRIM (TRAILING znak FROM słowo) | Miasto |
+--------------+
— SUBSTRING (słowo FROM poz_startowa FOR liczba_znaków) | 0-121 Kraków |
| 0-321 Kraków |
| 0-432 Kraków |
+--------------+
10
4/10/2017
Przykłady zapytań
Zapytanie 1 Zapytanie 2
Pokaż listę pracowników wraz z NAZWAMI języków, Znajdź wszystkich pracowników znających język angielski i pokaż stopień jego
które znają, oznaczając kolumnę z językami jako JĘZYK znajomości w kolumnie POZIOM ANGIELSKIEGO. Wyniki poukładaj alfabetycznie (wg
nazwisk).
Zapytanie 3
11
Bazy Danych
Transakcje
Piotr Macioł
WIMiIP, KISiM,
pmaciol@agh.edu.pl
B5, pok. 606
Transakcje i blokady
— co to są transakcje?
— reguły ACID
— transakcje z pojedynczym użytkownikiem
— ograniczenia transakcji
— transakcje z wieloma użytkownikami
— poziomy izolacji ANSI
— tryby związany i niezwiązany
— blokowanie
— zakleszczanie i jawne blokady
6 BEGIN WORK 1
ROLLBACK WORK 5
6 BEGIN WORK 1
COMMIT WORK 5
— Ograniczenia transakcji
» Nie wolno zagnieżdżać transakcji
» Zaleca się aby transakcje były niewielkie. Należy wykonać
wiele działań aby upewnić się, że transakcje wielu
użytkowników są rozdzielone. Te elementy, które biorą
udział w transakcjach, muszą być zablokowane
» Transakcja, której wykonanie trwa długo i obejmuje wiele
tabel, uniemożliwia innym użytkownikom korzystanie z
danych, do czasu zakończenia lub anulowania transakcji
— nie ma znaczenia dla transakcji w sesji 2, że polecenie SELECT zostało wykonane po poleceniu
COMMIT. W obrębie transakcji nowy rekord jest natychmiast ''widzialny'' (równie dobrze
moglibyśmy wykonać SELECT przed wykonaniem polecenia COMMIT).
KISIM, WIMiIP, AGH 22
Sesja 1
mysql> SELECT * FROM tab;
+------+
| f |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 55 |
+------+
5 rows in set (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM tab;
+------+
| f |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 55 |
| 6 |
+------+
6 rows in set (0.00 sec)
— To właśnie jest tzw. dirty read - nowe rekordy nie zostały jeszcze nawet
potwierdzone w drugiej transakcji a już są widoczne z poziomu pierwszej transakcji.
Sesja 2
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
— Ponownie trzeba zmienić poziom izolacji i uruchomić dwie nowe (!) sesje.
mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL
READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)
Sesja 1
mysql>BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM tab;
+------+
| f |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 55 |
| 6 |
+------+
6 rows in set (0.00 sec)
Sesja 2
mysql> BEGIN;
Query OK, 0 rows affected (0.06 sec)
mysql> UPDATE tab SET f=88 WHERE f=8;
— Z powodu wykonania polecenia SELECT w sesji 1 polecenie UPDATE wykonywane w
sesji 2 czeka aż po poleceniu SELECT (w sesji 1) nie zostanie wykonane polecenie
COMMIT (tak, jak przy zwykłym LOCK IN SHARE MODE). Dopiero, kiedy w sesji 1
wykonane zostanie polecenie COMMIT kończące transakcję, wówczas zostanie
wykonanie polecenie UPDATE w sesji 2.
KISIM, WIMiIP, AGH 34
Sesja 1
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
Sesja 2
Query OK, 1 rows affected (4.23 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM tab
+------+
| f |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 55 |
| 6 |
| 7 |
| 88 |
+------+
8 rows in set (0.00 sec)
START TRANSACTION;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
BEGIN TRANSACTION;
UPDATE ListaProduktow
SET Cecha = 4
WHERE IdProduktu = 2944;
ROLLBACK;
Blokowanie tabel
ACID BASE
• Silna spójność • Słaba spójność
• Izolacja • Wysoka dostępność
• Transakcje i • Przybliżone odpowiedzi
zagnieżdżone • Optymistyczne
transakcje podejście do
• Pesymistyczne wielodostępu
podejście do • Szybsze i łatwiejsze
wielodostępu • Brak schematu
• Schemat danych
Twierdzenie CAP (Brewer'a)
Consistency
(spójność) - wszystkie
węzły mają jednakowe
dane
Availability
(dostępność)– każde
żądanie doczeka się
odpowiedzi
C Partition tolerance-
odporność na utratę
części węzłów
A P
Twierdzenie CAP (Brewer'a)
C
A P
Określenie priorytetów baz NoSQL
Cassandra
Voldemort
Dynamo
Partition
Availability tolerance
CauchDB
Riak
12
Typy baz danych NoSQL
• Klucz-wartość
• Dokumentowe
• Rodziny kolumn
• Grafowe
• Obiektowe
Baza klucz wartość
• Najprostsza implementacja NoSQL.
• Tablica asocjacyjna (pary klucz-wartość)
– Memcached, Redis, BarkeleyDB, DynamoDB, Riak
• Przykładowy kod Redis:
$redis = Redis::connection();
$redis->set('company', 'Grupa Tense');
$company= $redis->get('company');
echo $company;
Baza klucz wartość
• Różnice w stosunku do wbudowanych tablic asocjacyjnych (std::map)
– Transakcje (ale błąd nie przerywa wykonania!)
– Potrafi przerwać transakcję jeśli nastąpiła zmiana przed wykonaniem
– Jeden serwer – wielu użytkowników
– Replikacja
– TCP/IP
• Stosowane podczas optymalizacji i skalowania
– dane które nie zmieniają się przy każdym odświeżeniu strony jak np. tytuł
strony www
– skrypty które długo się wykonują
• Klucz-wartość vs. RDBMS
– Zaleta: szybkie
– Wady: cała reszta
REDIS
• Remote Dictionary Server
• Magazyn rekordów klucz-wartość.
• Rezyduje w pamięci RAM
• Zapisywanie danych na dysk:
– RDB – wykonujący snapshot bazy (dobra
wydajność, ale ryzyko utraty danych)
– AOF – tworzący log z informacjami o operacjach
zapisu (gorsza wydajność, ale mniejsze ryzyko
utraty danych – zależna od naszej konfiguracji)
Cechy szczególne
• Wsparcie dla transakcji
• TTL – możliwość zdefiniowania czasu życia rekordu
• Obsługa ciut bardziej rozbudowanych struktur danych (sety)
• Wsparcie dla replikacji
• Wsparcie dla partycjonowania danych
• Obsługa rekordów jako LRU (Least Recently Used -
usuwanie w pierwszej kolejności najrzadziej używanych)
• Wsparcie dla osadzonych skryptów w języku LUA
• Obsługa publish-subscribe (więcej za chwilę)
• Dobra baza bibliotek dla większości popularnych języków
programowania
Dodatkowe struktury danych
• List: sekwencje uporządkowanych wartości z możliwością dodawania na końcu lub
początku listy, ze wsparciem dla operacji POP (pobieranie i usuwanie wartości) oraz
TRIM (usuwanie wartości spoza podanych indeksów)
• Hash: pary klucz-wartość istniejące w ramach wyższego klucza.
• Set: sekwencja nieuporządkowanych, unikalnych wartości.
• Sorted set: sekwencja posortowanych, unikalnych wartości. Każda wartość
sortowana jest za pomocą dodatkowej wartości score.
Typowe zastosowanie
• Cache dla systemów rozproszonych
– TTL,
– Least Recently Used,
– in-memory
• Magazyn sesji w systemach rozproszonych –
szczególnie jeśli mamy REST API na wielu
instancjach i chcemy zapewnić uwspólnioną
obsługę tokenów.
• Rankingi –Sorted SetKolejki
• Skalowalny pub/sub
Przykład - Publish/Subscribe
• Wzorzec ten najprościej porównać do zasady funkcjonowania kanałów IRC.
W realizacji Pub/Sub biorą udział:
– Nadawcy, którzy wysyłają wiadomości
– Odbiorcy, którzy te wiadomości otrzymują
• C#:
– Najpierw: Install-Package StackExchange.Redis
namespace RedisCsSample
{
class Program
{
static void Main(string[] args)
{
var connector = ConnectionMultiplexer.Connect("127.0.0.1:6379");
var sub = connector.GetSubscriber();
sub.Subscribe("chat", (c, m) => Console.WriteLine(m));
while (true)
{
sub.Publish("chat", Console.ReadLine());
}
}
}
}
• MongoDB Query
XML
<?xml version="1.0" encoding="utf-8"?>
<dane>
<user>
<imie>jan</imie>
<nazwisko>Kowalski</nazwisko>
</user>
<user>
<imie>Piotr</imie>
<nazwisko>Nowak</nazwisko>
</user>
</dane>
JSON vs. XML
• Podobieństwa:
• format tekstowy (plain text)
• samoopisujący się i czytelny dla użytkownika
hierarchiczny (obiekty wewnątrz innych obiektów)
• Różnice:
• brak znaczników zamykających krótszy
• szybszy zapis i odczyt wykorzystuje tablice
• brak zastrzeżonych słów kluczowych
Kolekcja par nazwa-wartość
• Kolekcja par klucz-wartość jest umieszczana w
nawiasach klamrowych i może zawierać wiele par
nazwa/wartość.
• Nie jest uporządkowana.
• Można ją nazywać obiektem, strukturą, tablicą
hashowaną czy asocjacyjną, słownikem.
{
"imie" : "Piotr", "nazwisko" : "Nowak"
}
Uporządkowana lista wartości
• Uporządkowana lista wartości jest umieszczana w
nawiasach kwadratowych. Może zawierać wiele
wartości.
• Można ją nazywać tablicą, wektorem, listą czy
sekwencją.
"studenci":[
{"imie":"James", "nazwisko":"Bond"},
{"imie":"Jaś", "nazwisko":"Fasola"},
{"imie":"Angus", "nazwisko":"McGyver"}
]
Typy
• Wartości JSON to:
• liczby (integer lub float)
• ciągi znakowe (string w podwójnych cudzysłowach)
wartości logiczne (true lub false)
• tablice (w nawiasach kwadratowych)
• obiekt (w nawiasach klamrowych)
• wartość null
BSON
• Binary JSON - http://bsonspec.org/
• binarna serializacja dokumentów w formacie JSON
• tak samo jak JSON, wspiera zagnieżdżanie dokumentów
i tablic wewnątrz innych dokumentów czy tablic
• zawiera również rozszerzenie pozwalające na
reprezentację danych nie będących formatem JSON,
np. posiada typy Date czy BinData
• jest binarnym formatem wymiany danych
• biblioteki dla BSON istnieją dla większości
współczesnych języków programowania; część
implementacji obsługi BSON jest częścią sterownika do
bazy MongoDB
BSON
• Lekkość - minimalny narzut na zajmowaną
przestrzeń; bardzo ważne dla każdego formatu
reprezentacji danych, szczególnie w
zastosowaniach internetowych.
• Łatwość przeszukiwania/przeglądania - BSON został
zaprojektowany aby dało się go łatwo przeszukiwać;
cecha konieczna dla głównego formatu
przechowywania danych w MongoDB.
• Efektywność - kodowanie/dekodowanie danych
do/z formatu BSON jest bardzo szybkie w
większości języków programowania.
Instancja bazy danych dokumentów
• MongoDB Query
db.people.find({'groups': 'news', 'age': {'$gt': 20}});
(Auto-)sharding
• Partycjonowanie horyzontalne – wiersze jednej tabeli przechowywane w
rozproszeniu
• W podstawowej wersji partycjonowania dzielone są indeksy, serwer logiczny jest jeden
• Wady
• Uzależnienie od łączy
• Dodatkowe opóźnienia podczas przeszukiwania angażującego wiele partycji
• Specyficzne zapytania są szybkie, inne bardzo powolne
• Spójność i trwałość w przypadku awarii
• Embedded Data
MongDB - CRUD
• Odczyt
• metoda find umożliwia tworzenie zapytań
• bez żadnych parametrów - > cała kolekcja; parametr 1 – warunek, parametr 2 - zawężenie
• find zwraca kursor, który służy do iteracji po wynikach zapytania
• Do wyniku można dodawać modyfikatory (sortowanie, zliczenie)
• Wstawianie
• insert na odpowiedniej kolekcji.
• Obiekt w formacie JSON o dowolnej strukturze.
• Każdy dokument w kolekcji musi mieć unikalne _id; Mongo automatycznie doda klucz
• Próba dodania obiektu z id, które już w bazie istnieje zakończy się niepowodzeniem
MongoDB - CRUD
• Aktualizacja
• Update (kryterium, akcja, opcje)
• MongoDB domyślnie aktualizuje tylko jeden dokument
• Usuwanie
• Remove(kryterium)
• bez parametrów usuwa zawartość całej kolekcji
MongDB - grupowanie
• Pipelines
• Map/Reduce
• Single Purpose Aggregtion
Pipelines
• Dokumenty przechodzą stopniowo przez kolejne stadia obróbki
• $project - wybranie tylko określonych pól z dokumentów
• $match - filtruje dokumenty wedle określonego kryterium
• $group- dokonuje grupowania elementów, jest to faktyczne miejsce agregowania wyników
• $sort - sortowanie dokumentów według zdefiniowanych pól
• $skip - pomija n dokumentów z listy
• $limit - określa maksymalną liczbę dokumentów, które mają zostać przetworzone
• $unwind - używane gdy chcemy zastąpić dokument zawierający tablicę wartości, zbiorem dokumentów, które w
polu reprezentującym rozwijaną tablicę będą posiadały kolejne elementy wcześniejszej tablicy
db.students.aggregate({
$unwind: "$scores" db.students.aggregate({
}, { $project: {
$group: { name: 1,
_id: "$name", _id: 0
scores_sum: { $sum: "$scores.score"} }
} }, {
}, { $sort: {
$sort: { scores_sum: -1 } name: 1
}, { }
$limit: 10 })
})
Map/Reduce
• Map - funkcja stosowana jest do wszystkich dokumentów spełniających
warunki wyszukiwania. Jej głównym zadanie jest wyemitowanie par
(klucz, wartość)
• pary (klucz, wartość) eksportujemy przy użyciu funkcji emit(key,value)
• funkcja map nie przyjmuje żadnych parametrów
• funkcja map jest wywoływana na instancji dokumentu, więc mamy
możliwość dostęp do self
• Reduce - w przypadku, gdy w fazie mapowania zostaną wyemitowane
pary o tym samym kluczu, wartości elementów o wspólnym kluczu
poddawane są fazie redukowania - ma ona na celu skondensowanie
kilku wartości do jednej
Map/Reduce
• Operacje realizowane są podczas dwóch kroków:
• Krok "map" - węzeł nadzorczy (master node) pobiera dane z wejścia i dzieli
je na mniejsze podproblemy, po czym przesyła je do węzłów roboczych
(worker nodes). Każdy z węzłów roboczych może albo dokonać kolejnego
podziału na podproblemy, albo przetworzyć problem i zwrócić odpowiedź
do głównego programu.
• Krok "reduce" - główny program bierze odpowiedzi na wszystkie
podproblemy i łączy je w jeden wynik - odpowiedź na główny problem.
• Główną zaletą MapReduce jest umożliwienie łatwego rozproszenia
operacji. Zakładając, że każda z operacji "map" jest niezależna od
pozostałych, może być ona realizowana na osobnym serwerze.
Map/Reduce
var map = function () { db.students1.mapReduce( map, reduce,
for (i = 0; i < 4; i++){ { out: { reduce: "result" }});
emit(this.scores[i].type, this.scores[i].scor
e) db.students2.mapReduce( map, reduce,
} { out: { reduce: "result" }});
};
db.students.mapReduce(map, reduce,
{out: "sc_sum"})
Map/Reduce na wielu kolekcjach