Bazy danych 1

advertisement
Bazy danych 1
Podstawowe pojęcia
Sprawy organizacyjne
• Materiały i listy zadań zamieszczane będą na
stronie www.math.uni.opole.pl/~ajasi
• Literatura
– L. Banachowski – Bazy danych. Tworzenie
aplikacji
– L. Banachowski, A. Chądzyńska, K. Matejewski –
Relacyjne bazy danych. Wykłady i ćwiczenia
– C.J. Date – Wprowadzenie do systemów baz
danych
– T. Conolly, C. Begg – Systemy baz danych
– R.Stones, N. Matthew – Bazy danych i
PostgreSQL
– Zasoby Internetu
Systemy przetwarzania danych
• Ręczne systemy
• Systemy oparte na przetwarzaniu
plików
• Systemy oparte na bazach danych
Systemy oparte na przetwarzaniu
plików
• Zbiór aplikacji wykonujących
polecenia użytkowników (np.
generowanie raportów).
• Każdy program definiuje i
przetwarza własne dane.
Systemy oparte na przetwarzaniu
plików
•
•
•
Każdy dział ma dostęp
do swoich plików
poprzez aplikacje
napisane specjalnie dla
niego.
Pakiet aplikacji
każdego działu
obsługuje
wprowadzanie danych,
nadzoruje pliki danych,
umożliwia
generowanie raportów
wybranych spośród
dostępnych w
systemie.
Fizyczna struktura
plików z danymi oraz
zapisanych w nich
rekordów jest
zdefiniowana w kodzie
każdej aplikacji..
Systemy oparte na przetwarzaniu
plików - ograniczenia
Rozproszenie i odseparowanie danych
Powielanie danych
Ograniczona ilość możliwych zapytań
Zależność danych od programu – fizyczna
struktura i organizacja plików danych i
rekordów jest zdefiniowana w kodzie aplikacji
• Niekompatybilne formaty plików
• Nie istnieje kontrola dostępu i przetwarzania
danych, wielodostęp, odtwarzanie danych po
awarii
•
•
•
•
Baza danych
• Baza danych to dostępny dla wielu
użytkowników zbiór powiązanych
logicznie danych trwałych wraz z
definicją ich struktury, zaprojektowany
dla zaspokojenia potrzeb przetwarzania
danych przez daną organizację.
Baza danych
• Poję
Pojęcia zwią
związane z bazą
bazą danych
– Trwał
Trwałość – dane mają być przechowywane przez pewien okres
czasu, na ogół nieokreślony z góry
– Zgodność
Zgodność z rzeczywistoś
rzeczywistością
cią (integralność
(integralność danych) – dane w bazie
danych muszą stanowić wierne odzwierciedlenie modelowanego
fragmentu rzeczywistości, w przypadku zmian we fragmencie
rzeczywistości, baza danych też musi się zmieniać
– Replikacja danych – w idealnej sytuacji jeden fakt dotyczący
modelowanego fragmentu rzeczywistości powinien być w bazie
reprezentowany tylko na jeden sposób
– Niezależ
Niezależność
ność danych – dane i procesy działające na bazie danych
powinny być ze sobą niezależne
– Ochrona danych – określone dane są używane tylko przez
uprawnionych użytkowników
System zarządzania bazą danych
• System zarzą
zarządzania bazą
bazą danych
danyc (SZBD, DBMS – Database
Management System) to system oprogramowania, który
pozwala użytkownikom definiować, tworzyć i utrzymywać bazę
danych oraz kontrolować do niej dostęp.
System zarządzania bazą danych
• DBMS peł
pełni ró
różne funkcje
– Pozwala zdefiniować bazę danych (typy danych, struktury i
więzy dla danych przechowywanych w bazie)
– Pozwala dopisywać, modyfikować, usuwać i wyszukiwać dane
z bazy
– Pozwala na kontrolowany dostęp do danych (szczegóły za
chwilę)
• Przykł
Przykłady:
– Komercyjne: Acces, Oracle, DB2, Microsoft SQL Server,
Adaptive Server Anywhere
– Niekomercyjne: MySQL, PostgreSQL, Firebird
System informatyczny
• Zbiór danych opisujący pewien wybrany fragment
rzeczywistości będziemy nazywać bazą danych.
• Struktura danych i powiązania między nimi są
opisane przez tzw. schemat bazy danych.
• Baza danych jest zarządzana przez tzw. system
zarządzania bazą danych, w skrócie SZBD. Funkcje
oferowane przez SZBD zostaną omówione w dalszej
części wykładu.
• SZBD i bazę danych będziemy dalej nazywać
systemem bazy danych.
• Z systemem bazy danych współpracują programy
użytkowników, zwane aplikacjami.Zadaniem tych
programów jest przetwarzanie danych, tj. wstawianie
nowych danych, modyfikowanie danych już
istniejących, usuwanie danych nieaktualnych,
wyszukiwanie danych.
• Wszystkie omówione wyżej komponenty (tj. baza
danych, SZBD i aplikacje) wchodzą wskład tzw.
systemu informatycznego.
Architektura systemu bazy danych
Głównym zadaniem wielopoziomowej architektury
systemu bazy danych jest oddzielenie fizycznej
reprezentacji bazy danych od różnych sposobów
widzenia danych w bazie przez użytkowników.
Architektura ANSI-SPARC
W 1975 r. American National Standards Institute Standards Planning and Requirements Committee
(ANSI-SPARC) zaproponował trzypoziomową
architekturę dla systemu baz danych. Architektura
ta wyróżnia trzy poziomy abstrakcji. Poziomy te
są nazywane czasem schematami lub widokami:
• Poziom zewnętrzny
• Poziom konceptualny (pojęciowy)
• Poziom wewnętrzny
Poziom zewnętrzny
• Opisuje, jak użytkownicy widzą bazę danych i w jaki
sposób uzyskują do niej dostęp.
• Składa się z wielu zewnętrznych sposobów widzenia
bazy danych – tzw. perspektyw.
• Perspektywa zawiera tylko te dane z bazy danych,
którymi dany użytkownik jest zainteresowany.
Pozostałe dane są dla niego niewidoczne.
• Perspektywy zwiększają poziom bezpieczeństwa
danych oraz umożliwiają dostosowanie sposobu
prezentacji danych do przyzwyczajeń użytkownika.
Poziom konceptualny (pojęciowy)
• Stanowi zbiorowy sposób widzenia bazy
danych.
• Opisuje, jakie dane są przechowywane w
bazie i jakie są ich wzajemne związki.
• Zawiera logiczną strukturę bazy danych.
Poziom wewnętrzny
• Dotyczy fizycznej reprezentacji bazy
danych w komputerze.
• Opisuje sposób przechowywania danych w
bazie – strukturę danych, organizację
plików używanych do przechowywania
danych
Architektura ANSI-SPARC
Użytkownik A1
Poziom
zewnę
ętrzny
Użytkownik A2
Zewnętrzny
model danych A
Schemat
zewnętrzny A
Odwzorowanie
zewnętrzno-pojęciowe
Poziom
poję
ęciowy
Schemat
pojęciowy
Użytkownik B1
Zewnętrzny
model danych B
Odwzorowanie
zewnętrzno-pojęciowe
Pojęciowy model danych
DBMS
Odwzorowanie
pojęciowo-wewnętrzne
Schemat
Poziom
wewnę
ętrzny wewnętrzny
Wewnętrzny model danych
(zapamiętana baza danych)
Architektura ANSI-SPARC
Niezależność danych
• Trzypoziomowa architektura służy do zapewnienia
niezależności
• Niezależność danych ma dwie formy:
– Logiczna niezależność danych. Oznacza ona niewrażliwość
schematów zewnętrznych na zmiany w schemacie
konceptualnym. Na przykład można dodać nową daną do
schematu konceptualnego bez wpływania na poziom
zewnętrzny.
– Fizyczna niezależność danych. Oznacza ona niewrażliwość
schematu konceptualnego na zmiany w schemacie
fizycznym. Na przykład można zmienić strukturę
przechowywania danych w bazie danych bez wpływania na
schemat konceptualny.
Struktura DBMS
Zestaw narzędzi DBMS
•
Interfejs
•
Jądro DBMS
•
Ją
ądro DBMS oznacza centralną
maszynę, która realizuje podstawowe
funkcje zarządzania danymi, takie jak
zdefiniowane poniżej.
Zestaw narzę
ędzi DBMS oznacza
szeroki wybór narzędzi, które obecnie
mogą stanowić część DBMS lub mogą
pochodzić od innych dostawców. Na
przykład arkusze kalkulacyjne, języki
czwartej generacji, programy
monitorujące wydajność itp.
Aby powiązać jądro z zestawem
narzędzi, musimy mieć zdefiniowany
interfejs. Jest to standardowy język,
który łączy narzędzie, takie jak język
czwartej generacji, z funkcjami jądra.
Funkcje DBMS
• Funkcje CRUD
DBMS musi umożliwić użytkownikowi tworzenie
struktur danych, zmiany danych w strukturach
oraz usuwanie danych ze struktur. Funkcje te są
określane łącznie jako operacje CRUD - Create
(utwórz), Read (czytaj), Update (aktualizuj) i
Delete (usuń).
Funkcje DBMS
• Słownik danych
DBMS musi obsługiwać repozytorium
metadanych - danych o danych. Repozytorium to
nazywa się słownikiem danych lub katalogiem
systemu. Zwykle słownik danych przechowuje
dane o strukturze danych, związkach między
danymi, więzach integralności nałożonych na
dane, nazwach i uprawnieniach użytkowników.
Funkcje DBMS
• Obsługa transakcji
DBMS powinien zapewnić, że albo wykonane
zostaną wszystkie aktualizacje związane z daną
transakcją, albo żadna z nich nie będzie
wprowadzona.
Transakcja to niepodzielny logicznie ciąg
operacji, które używają zawartości bazy danych
bądź ją aktualizują.
Funkcje DBMS
• Sterowanie współbieżnością
DBMS musi umożliwiać wielu użytkownikom
wspólne korzystanie z danych w bazie współbieżny dostęp do danych. DBMS musi
zapewniać, że w wypadku gdy dwie transakcje
mają dostęp do tych samych danych, baza danych
nie znajdzie się w stanie niespójnym.
Sterowanie współbieżnością
czas
T1
t1
T2
read(saldo)
saldo
100
t2
read(saldo)
t3
saldo=saldo-10 write(saldo)
200
t4
write(saldo)
90
t5
saldo=saldo+100 100
90
Funkcje DBMS
• Obsługa odtwarzania bazy
DBMS musi zapewnić, że baza danych może
zostać odtworzona po awarii sprzętu lub
oprogramowania powodującej uszkodzenie bazy.
Funkcje DBMS
• Obsługa autoryzacji
DBMS musi mieć narzędzia zapewniające
bezpieczeństwo bazy danych. Ogólnie mówiąc,
DBMS musi obsługiwać pojęcie uprawnionego
użytkownika bazy danych oraz umożliwiać
tworzenie użytkowników oraz powiązanie
uprawnień każdego użytkownika z dostępem do
danych w bazie i/lub narzędzi DBMS.
Funkcje DBMS
• Obsługa transmisji danych
DBMS musi być w stanie współpracować z
oprogramowaniem transmisji danych.
Szczególnie ważne jest zapewnienie połączenia
oprogramowania narzędziowego z jądrem DBMS.
Funkcje DBMS
• Obsługa integralności danych
Integralność danych jest właściwością bazy
danych zapewniającą, że pozostaje ona wiernym
odzwierciedleniem obszaru analizy. Aby to
umożliwić, DBMS musi obsługiwać więzy
integralności. DBMS musi mieć możliwość
wymuszania więzów w kontekście operacji
CRUD.
Funkcje DBMS
• Usługi wspierające niezależność danych
DBMS powinien zawierać elementy wspierające
niezależność programów od rzeczywistej
struktury bazy danych.
Funkcje DBMS
•
Programy narzędziowe do efektywnego
zarządzania bazą danych
DBMS powinien zapewnić odpowiednie
narzędzia do administrowania bazą danych.
Narzędzia te obejmują:
–
–
–
–
narzędzia importowania danych do bazy z innych źródeł
danych;
narzędzia eksportowania danych z bazy danych do innych
źródeł danych;
narzędzia monitorowania użycia i operacji na bazie danych;
narzędzia monitorowania wydajności bazy danych i
zwiększania tej wydajności.
Interfejs DBMS
•
•
•
•
•
Interfejs DBMS składa się z podjęzyka bazy danych. Jest to język programowania
przeznaczony specjalnie do inicjowania funkcji DBMS. Składa się on z trzech
części:
Ję
ęzyk definiowania danych (DDL)
Język definiowania danych jest stosowany do tworzenia i usuwania struktur
danych oraz do uzupełniania istniejących struktur. DDL aktualizuje metadane
przechowywane w słowniku danych.
Ję
ęzyk operowania danymi (DML)
Język operowania danymi jest używany do określania poleceń, które realizują
działania CRUD na bazie danych. DML jest podstawowym mechanizmem
stosowanym przy określaniu transakcji wykonywanych na bazie danych.
Ję
ęzyk kontroli danych (DCL)
Język kontroli danych jest przeznaczony do wykorzystania przez administratora
bazy. Jest on stosowany zwłaszcza do definiowania użytkowników bazy danych
oraz przyznanych im uprawnień.
Głównym przykładem takiego podjęzyka jest strukturalny język zapytań SQL. Ten
podjęzyk jest często stosowany w powiązaniu z innymi narzędziami tworzenia
aplikacji, takimi jak język czwartej generacji (4GL).
Grupy użytkowników
• Administratorzy danych (DA)
– podejmują decyzje, jakie dane powinny być
przechowywane
– odpowiedzialni za projektowanie i
kontrolowanie ustalonych standardów
– odpowiedzialni za przestrzeganie strategii i
procedur postępowania
– odpowiedzialni za prawidłowy rozwój bazy
Grupy użytkowników
• Administratorzy bazy danych (DBA)
– odpowiedzialni technicznie za realizację
decyzji administratora danych
– odpowiedzialni za fizyczną realizację bazy
danych, kontrolę bezpieczeństwa i spójności,
zapewnienie sprawnego działania aplikacji
użytkowników, wydajność systemu
Porównanie DA i DBA
Administrator danych
Administrator bazy danych
•
•
•
•
•
•
•
•
•
•
Związany z planowaniem strategii
Wyznacza długoterminowe cele
Określa wymagania dotyczące
danych
Odpowiedzialny za konceptualny i
logiczny projekt bazy danych
Tworzy i utrzymuje model danych
przedsiębiorstwa
Koordynuje wykonanie systemu
Zajmuje się zarządzaniem
Jest niezależny od DBMS
•
•
•
•
•
•
Ocenia nowy DBMS
Realizuje plany prowadzące do
osiągnięcia celów
Implementuje wymagania dotyczące
danych
Tworzy logiczny i fizyczny projekt bazy
danych
Implementuje fizyczny projekt bazy
danych
Monitoruje i steruje bazą danych
Zajmuje się sprawami technicznymi
Jest zależny od DBMS
Grupy użytkowników
• Projektanci bazy danych (logicznej i
fizycznej)
• Twórcy aplikacji bazodanowej
• Użytkownicy – korzystają z bazy danych
poprzez specjalne aplikacje bądź poprzez
korzystanie z języków wysokiego poziomu
(np. SQL)
Architektura klient - serwer
Klient
Obsługuje interfejs użytkownika
Akceptuje wprowadzane dane i sprawdza ich poprawność
składniową
Obsługuje sterowanie w aplikacji
Tworzy żądanie do bazy danych i przesyła je do serwera
Przekazuje odpowiedź z powrotem do użytkownika
Serwer
Akceptuje i przetwarza żądania do bazy danych od
klientów
Sprawdza uprawnienia
Zapewnia nienaruszalność więzów integralności
Realizuje przetwarzanie zapytań/aktualizacji i przekazuje
odpowiedzi klientom
Konserwuje katalog systemowy
Obsługuje współbiezny dostęp
Realizuje odzyskiwanie danych po awarii
Architektura klient - serwer
Architektura klient - serwer
• Zalety
– Umożliwia szerszy dostęp do istniejących baz danych
– Zwiększa wydajność systemu – jednostki robocze mogą równolegle
wykonywać aplikacje
– Pozwala na redukcje kosztów
– Redukuje koszty komunikacji – aplikacje wykonują część operacji w
komputerach klientów, a przez sieć przesyłają tylko żądanie dostępu
do bazy danych
– Rozszerza zakres niesprzeczności danych – więzy integralności są
sprawdzane tylko w jednym miejscu
– Konfiguracja tylko jednego serwera
Model danych
Model danych to spójny zestaw pojęć
służący do opisywania danych i związków
między nimi oraz do manipulowania
danymi i ich związkami, a także do
wyrażania więzów nałożonych na dane.
Model danych
Części modelu danych:
Część strukturalna – zbiór reguł określających jaka
jest struktura danych,
Część wykonawcza – zbiór reguł określających, jak
manipuluje się danymi,
Część dotycząca integralności danych – zbiór reguł
określających, które stany bazy są poprawne.
Rodzaje modeli danych
•
•
•
•
•
Hierarchiczny model danych
Sieciowy model danych
Relacyjny model danych
Model relacyjno-obiektowy
Model obiektowy
Model relacyjny
• Twórcą modelu relacyjnego jest E.F.Codd, który
w roku 1970 ogłosił pracę dotyczącą systemu
baz danych opartego na modelu danych
zbudowanym z relacji.
• Relacja R jest to dowolny podzbiór iloczynu
kartezjańskiego jednego lub więcej zbiorów:
R ⊂ D1 × D2 ×...× Dk
D1 × D2 ×...× Dk ={(a1, a2,...,ak ) : ai ∈Di ,i ∈{1,2,...,k}}
Model relacyjny
• Dane zawsze odnoszą się do pewnego obiektu i
charakteryzują jego wybrane własności.
• Własności, cechy obiektu, pozwalające częściowo
opisać ten obiekt, nazywamy atrybutami (Ai).
• Atrybuty przyjmują wartości z określonego zbioru
zwanego dziedziną (Di).
• W każdym momencie dla każdego obiektu każdy atrybut
przyjmuje wartość atomową (pojedynczą i
niepodzielną).
Model relacyjny
• Schematem R relacji nazywamy zbiór atrybutów {A1, ..., An}
• Relacją r o schemacie R = {A1, ..., An} nazywamy skończony
zbiór r = {t1, ..., tm} odwzorowań ti: R →D, gdzie D jest równe
sumie dziedzin atrybutów A1, ..., An, takich, że ti(Aj)=Dj dla
i=1,...,m, j=1,...,n.
• Każde takie odwzorowanie nazywamy krotką.
• Przykłład: R={Numer, Skąd, Dokąd, Odlot, Przylot}
ti(Aj)={(Numer,83), (Skąd, 'Budapeszt'), Dokąd, 'Warszawa').
(Odlot, '11:30'), (Przylot, '13:10}
Model relacyjny
• Relacje mogą być reprezentowane w postaci tabel
– krotkom odpowiadają wiersze (rekordy),
atrybutom kolumny (pola).
PRACOWNICY(Nazwisko, Imię, Wiek, Pensja) - schemat relacji
rekord Nazwisko
Kowalski
Nowak
Zielińska
Imię Wiek Pensja
Jan
35
360
Piotr
36
400
Anna
25
340
Integralność danych - klucz
•
Kluczem schematu R relacji nazywamy taki zbiór atrybutów K tego
schematu, że przez wartości atrybutów z tego zbioru można
jednoznacznie zidentyfikować każdą krotkę (tzn. żadne dwie różne
krotki dowolnej relacji r rozpiętej na schemacie R nie mają tych
samych wartości dla atrybutów z K – własność jednoznaczności).
Własności:
• Wartość klucza pozwala jednoznacznie identyfikować rekordy.
• Dany schemat może posiadać więcej kluczy.
• Każdy nadzbiór klucza jest kluczem.
• Klucz, którego żaden podzbiór właściwy nie jest kluczem (własność
minimalności), nazywa się kluczem wł
właściwym (kandydują
(kandydującym).
cym)
• Wśród kluczy wybiera się jeden i nazywa go się kluczem gł
głównym.
wnym
Klucz
schemat relacji DANE_OSOBOWE(nr_dowodu, nazwisko, imię, data_ur)
nr_dowodu
AB 2435209
CD 8574930
EF 3385778
GH 9938850
IJ 8787895
KL 7657770
nazwisko
Nowak
Kowalski
Nowak
Bogucki
Nowak
Smutny
imię
data_ur
Jan
05-05-53
Piotr
23-02-60
Anna
01-12-59
Andrzej
03-03-65
Anna
11-12-59
Waldemar 15-09-62
Klucz
schemat relacji
DANE_OSOBOWE(nr_dowodu, nazwisko, imię, data_ur)
nr_dowodu
AB 2435209
CD 8574930
EF 3385778
GH 9938850
IJ 8787895
KL 7657770
nazwisko
Nowak
Kowalski
Nowak
Bogucki
Nowak
Smutny
imię
data_ur
Jan
05-05-53
Piotr
23-02-60
Anna
01-12-59
Andrzej
03-03-65
Anna
11-12-59
Waldemar 15-09-62
schemat relacji
DANE_OSOBOWE(nr_dowodu, nazwisko, imię, data_ur)
nr_dowodu
AB 2435209
CD 8574930
EF 3385778
GH 9938850
IJ 8787895
KL 7657770
MN 6578001
nazwisko
Nowak
Kowalski
Nowak
Bogucki
Nowak
Smutny
Nowak
imię
data_ur
Jan
05-05-53
Piotr
23-02-60
Anna
01-12-59
Andrzej
03-03-65
Anna
11-12-59
Waldemar 15-09-62
Jan
05-05-53
WNIOSEK Klucz dobieramy poprzez
analizę świata rzeczywistego.
Zawartość tabeli jest
odzwierciedleniem modelowanego
świata tylko w pewnym okresie i może
ona podlegać istotnym zmianom.
Integralność danych – klucz obcy
• Kluczem obcym schematu S relacji nazywamy zbiór atrybutów FK
tego schematu, który jest kluczem kandydującym pewnego schematu
R relacji.
RZEMIEŚLNIK_KTO
nazwisko adres
NIP
Nowak
Warszawa
774656
Nowak
Opole
774875
Nowak
Gdynia
773829
Kowalski Kraków
786094
Kowalski Kraków
773521
relacja nadrzędna
RZEMIEŚLNIK_CO
NIP
wyrób
cena
774656 naszyjnik
70
773829 obrączki
120
774656 kolczyki
12
786094 naszyjnik
65
786094 kolczyki
15
relacja podrzędna
Integralność danych
• Wartość
ść pusta (NULL) – reprezentuje wartość atrybutu, która w
danej chwili nie jest znana lub nie może zostać ustalona.
Rodzaje relacyjnych więzów integralności:
• Integralność
ść encji
Każdy schemat relacji posiada klucz główny i żaden składnik klucza
głównego nie akceptuje wartości pustej.
• Integralność
ść referencyjna
Każda wartość klucza obcego wynosi NULL lub jest równa wartości
klucza kandydującego pewnej krotki w relacji nadrzędnej.
• Wię
ęzy ogólne
Dodatkowe warunki poprawności danych określone przez
użytkowników lub administratorów bazy danych.
Perspektywy w modelu relacyjnym
• Perspektywa to dynamicznie obliczany wynik
jednej lub wielu operacji relacyjnych tworzących
nową relację z relacji bazowych (relacji o
schematach relacji należących do schematu bazy
danych).
• Perspektywa jest relacją wirtualną (wyliczaną),
która nie musi fizycznie istnieć w bazie danych,
ale może być wyliczona w każdej chwili na
żądanie użytkownika.
Perspektywy w modelu relacyjnym
Perspektywy:
• stanowią silne i elastyczne narzędzie ochrony
danych poprzez ukrywanie części bazy danych
przez pewnymi użytkownikami,
• zapewniają użytkownikom dostęp do danych w
sposób dostosowany do ich potrzeb – dzięki temu
różni użytkownicy mogą widzieć te same dane w
różny sposób,
• mogą uprościć skomplikowane operacje na
relacjach bazowych.
Perspektywy w modelu relacyjnym
Perspektywy są dynamiczne – zmiany w relacjach bazowych
wpływające na perspektywę są natychmiast w niej
uwzględniane. I odwrotnie, gdy użytkownik dokonuje
dozwolonych zmian w perspektywie, to są one
przenoszone do relacji bazowych.
Ograniczenia modyfikowania danych poprzez perspektywy:
• Modyfikacje można wykonywać poprzez perspektywy
zdefiniowane prostym zapytaniem dotyczącym jednej
relacji bazowej. Perspektywa taka musi zawierać klucz
główny relacji.
• Modyfikacji nie wolno dokonywać poprzez perspektywy
dotyczące wielu relacji bazowych.
• Modyfikacji nie można wykonywać poprzez perspektywy
zawierające operatory grupowania lub funkcje agregujące.
Koniec
Dziękuję za uwage!!!
Download