Przeczytaj
Programy komputerowe przetwarzają informacje – takie stwierdzenie nikogo nie dziwi. Jednak co ono dokładnie oznacza? Czym w ogóle jest informacja? Udzielenie odpowiedzi na te pytania nie jest łatwe, ponieważ wymaga dokonania abstrakcyjnego opisu otaczającej nas rzeczywistości.
Informacją nazywamy porcję danych, których celem jest zmniejszenie stopnia niepewności (niewiedzy) ich odbiorcy. Może nią być atrybut opisujący stan obiektu, jego zachowanie albo istniejące powiązanie pomiędzy fragmentami rzeczywistości. Informację należy rozpatrywać w trzech podstawowych kontekstach:
syntaktycznym (ilość informacji zawarta w analizowanych danych);
semantycznym (znaczenie informacji – jaką nowość wnosi ona do świadomości odbiorcy);
pragmatycznym (przydatność informacji, czyli wpływ porcji danych na realizowane przez odbiorcę zadanie).
Odkąd ludzie rozpoczęli tworzenie oprogramowania, stale opracowywali coraz lepsze pojemniki na dane, czyli tak zwane struktury danych. Chcemy, aby przetwarzanie informacji było możliwie szybkie oraz skuteczne i to najlepiej we wszystkich trzech wspomnianych kontekstach.
Ewolucja przetwarzania informacji
Znane ci są już niektóre pojemniki na dane: zmienna, tablica, stos, lista, kolejka, kopiec, drzewo binarne itd. Współczesne systemy bazodanowe to – mówiąc najprościej – bardzo zaawansowane, autonomiczne pojemniki na dane.
Bazy danych przechowują ogromne ilości informacji, udostępniają wygodne interfejsy do ich modyfikowania, dbają o integralność przechowywanego zbioru, pozwalają realizować tysiące tzw. zapytań (zwracając odpowiedź w ułamku sekundy), bronią dostępu do danych i spełniają wiele innych zadań.
Oczywiście powstanie tak rozbudowanych, zaawansowanych systemów bazodanowych wymagało wiele czasu. Nastąpiło to w drodze powolnej ewolucji rozwiązań, pełnej poświęceń i wspólnej pracy wielu ludzi.
Za pierwszy system bazodanowy powszechnie uznaje się oprogramowanie opracowane w ramach programu Apollo. Wysłanie człowieka na Księżyc wymagało szybkiego przetwarzania dużej ilości danych w czasie rzeczywistym. Stawką było życie astronautów. Później okazało się, że pierwsze kroki w dziedzinie tzw. hierarchicznego modelu danych, postawione wówczas przez inżynierów IBM, były ogromnym skokiem dla informatyki.
Przegląd modeli danych
Baza danych to – najprościej mówiąc – uporządkowany zbiór informacji. Kiedy zajmujemy się tworzeniem takich wielkich zbiorów danych, to tak naprawdę modelujemy rzeczywistość. Tworzymy model, czyli abstrakcyjną, wirtualną reprezentację rzeczywistego świata.
Model danych to integralny zbiór zasad opisujących stan reprezentowanych obiektów, ich zachowania oraz istniejące powiązania logiczne pomiędzy fragmentami symulowanego świata.
Najpopularniejszym sposobem reprezentacji rzeczywistości stosowanym we współczesnych bazach danych jest tzw. model relacyjny, którego ideę opisał w 1985 roku Edgar Frank Codd w słynnej pracy pt. Model relacyjny w zarządzaniu bazami danych. Przedstawione przez autora tzw. dwanaście postulatów Codda zrewolucjonizowało sposób projektowania systemów zarządzających bazami danych.
Warto wymienić i krótko scharakteryzować wszystkie rozwijane przez lata modele danych, pamiętając jednak, że w tym cyklu e‑materiałów będziemy zajmować się przede wszystkim bazami relacyjnymi.
Typologia modeli danych jest następująca:
Model jednorodny – najprostszy, przewidujący użycie jednego pojemnika przechowującego wszystkie dane. Przykładem może być alfabetyczny spis pracowników firmy albo książka telefoniczna. Największe wady takiego sposobu modelowania to długi czas dostępu do informacji oraz często występująca redundancja (nadmiarowość) informacji.
Model hierarchiczny – oparty na strukturze odwróconego drzewa, czyli takiego w którym korzeń znajduje się na szczycie hierarchii. W bazie istnieją węzły nadrzędne i podrzędne (czyli właśnie hierarchia). Zasada drzewa głosi, iż jeden ojciec może mieć wiele dzieci, ale każde dziecko ma tylko jednego ojca. Przykładem wykorzystania tego modelu był system
IBM IMS
, zapoczątkowany w roku 1966 na potrzeby programu Apollo – było to oprogramowanie przechowujące informacje o materiałach wykorzystywanych przy rozbudowie i obsłudze rakietySaturn V
.Model obiektowy – zrealizowany zgodnie z paradygmatem programowania obiektowego. Rzeczywistość reprezentujemy za pomocą obiektów tworzonych na podstawie klas. Każdy obiekt ma atrybuty opisujące jego stan. Istnieją także metody, czyli specjalne funkcje należące do klas. Metody reprezentują zachowanie obiektu oraz określają zasady dostępu do jego wartości składowych, zapewniając dodatkową możliwość hermetyzacjihermetyzacji danych w celu ochrony ich integralności. Interakcja z obiektami jest możliwa tylko przez udostępniony w klasach interfejs. Przykłady użycia tego modelu sięgają lat 70. XX wieku - np. projekt systemu bazodanowego
EXODUS
, zrealizowany na Uniwersytecie Wisconsin–Madison, systemIRIS
stworzony w firmie Hewlett‑Packard, czyORION
zaprojektowany przez inżynierów w Microelectronics and Computer Technology Corporation.Model sieciowy – bazował na strukturze hierarchicznej (drzewiastej), lecz wprowadził pewne modyfikacje – używało się w nim tzw. typów rekordów i kolekcji, zaś reprezentacja tych typów oraz powiązań miała postać grafu zorientowanego, nazywanego siecią (stąd nazwa modelu). Ten model został zaadoptowany w 1969 r. przez grupę
CODASYL Data Base Task Group
, dzięki czemu w latach 70. XX wieku znalazł praktyczne zastosowania. Z czasem jednak model został ostatecznie zastąpiony przez architekturę relacyjną.Model relacyjny – najpopularniejszy obecnie, opracowany przez Edgara Franka Codda, sposób reprezentacji fragmentu otaczającej nas rzeczywistości. Fundamentem modelu jest matematyczne pojęcie relacji, występujące w teorii mnogości, a związane nierozerwalnie z tzw. iloczynem kartezjańskim. W relacyjnych bazach danych nie używamy klas ani obiektów, tylko encji oraz instancji. Podstawową formą przechowywania danych jest tabela (relacja) zbudowana z kolumn (atrybutów) oraz wierszy (rekordów, krotek).
Model relacyjno‑obiektowy – kompromis pomiędzy relacyjnymi, a obiektowymi bazami danych, łatwiejszy w implementacji od czystego modelu obiektowego. Idea modelu polega na tym, że operujemy na danych tak jak na obiektach, czyli z możliwością zaprogramowania własnych metod, używających technik obiektowych (na przykład dziedziczeniadziedziczenia, polimorfizmupolimorfizmu). Jednak wewnętrzny mechanizm przechowywania danych jest relacyjny. Można ująć to następująco: mechanizmy obiektowe wykorzystywane są wewnątrz relacyjnej bazy danych.
Więcej informacji na temat wymienionych modeli znajdziesz w filmie towarzyszącym tej lekcji.
Relacyjne bazy danych
Zajmijmy się pojęciami związanymi z najpopularniejszymi obecnie, relacyjnymi bazami danych. Tego typu zbiór danych uporządkowany jest w tabelach (relacjach), czyli w klasycznych, znanych każdemu strukturach złożonych z wierszy i kolumn. Posłużmy się przykładem. Informacje o książkach przechowywanych w bazie danych szkolnej biblioteki, zostały umieszczone w następującej tabeli:
idksiazki | tytul | autor_imie | autor_nazwisko |
---|---|---|---|
1 | Pan Tadeusz | Adam | Mickiewicz |
2 | Krzyżacy | Henryk | Sienkiewicz |
3 | Lalka | Bolesław | Prus |
Atrybut (kolumna) to część tabeli przechowująca dane określonego typu (rodzaju) – na przykład liczbę, napis, czas, datę albo wartość logiczną. W pokazanej tabeli jest to każda pojedyncza kolumna (np. autor_nazwisko).
Rekord to pojedynczy wiersz w tabeli, czyli zestaw wartości atrybutów w niej zapisanych. W tabeli wyżej rekordem jest numer i tytuł książki wraz z informacją o jej autorze: na przykład pierwsza książka, czyli „Pan Tadeusz” autorstwa Adama Mickiewicza (wartości wszystkich czterech atrybutów).
Zestaw atrybutów opisujący w modelu dany rekord (tutaj jest nim książka) w programowaniu oraz nomenklaturze bazodanowej często określamy mianem encji lub ewentualnie klasy. Konkretnego reprezentanta (przedstawiciela) tej klasy nazywamy zaś instancją.
Mnogość słów opisujących zagadnienia związane z bazami danych może na początku nieco deprymować. W celu usystematyzowania użytych wcześniej pojęć, które pochodzą z różnych modeli rozwijanych na przestrzeni lat, posłużymy się następującym zestawieniem:
Współczesne bazy relacyjne | Teoria relacyjna (Edgar Frank Codd) | Teoria związków encji (Peter Chen) | Programowanie obiektowe |
---|---|---|---|
tabela | relacja | encja | klasa |
rekord, wiersz | krotka (ang. tuple) | instancja | obiekt |
atrybut, kolumna | atrybut | atrybut | atrybut, właściwość, cecha |
System zarządzania bazą danych
Zajmowanie się bazami danych nie polega jednak wyłącznie na utworzeniu uporządkowanego zbioru informacji, który w określony sposób modeluje rzeczywistość. Wiele pracy włożono również w zaprojektowanie narzędzi administracyjnych służących do zarządzania zgromadzonymi danymi.
DBMS (ang. Database Management System) lub w wersji polskiej: SZBD (System Zarządzania Bazą Danych) to oprogramowanie, które odpowiada za:
zarządzanie użytkownikami systemu bazodanowego, w tym obsługę wbudowanych mechanizmów autoryzacji i walidacji uprawnień,
ochronę integralności (spójności) zbioru danych – zapewnienie poprawności, dokładności i aktualności zbioru informacji,
możliwości wykonywania na zgromadzonych danych kwerend (zapytań w języku SQL) – tzw. standard CRUD (od ang. Create, Read, Update, Delete),
zapewnienie bezpieczeństwa i trwałości danych, w tym mechanizmów tworzenia oraz odzyskiwania kopii zbioru informacji.
Kilka współczesnych przykładów oprogramowania DBMS: MySQL
, MariaDB
, FireBird
, PostgreSQL
, Microsoft SQL Server
, SQLite
, Oracle Database, Microsoft Access
.
Język SQL
SQL (akronim pojęcia Structured Query Language) to strukturalny język zapytań umożliwiający programiście komunikację z bazą danych.
Fundamenty języka zostały opracowane przez firmę IBM. W e‑materiałach wiele uwagi poświęcimy właśnie wypracowaniu sprawności w posługiwaniu się językiem SQL.
Zapytanie kierowane do bazy, nazywane też kwerendą (ang. query), to instrukcja zapisana w języku SQL, w wyniku której dokonywana jest pewna operacja na zbiorze danych. Zapytania mogą np. wyszukiwać informacje, aktualizować lub usuwać zgromadzone wartości, tworzyć tabele lub określać konfigurację struktury tabeli.
Słownik
(inaczej: enkapsulacja lub kapsułkowanie danych) mechanizm określania dostępu do atrybutów oraz metod obiektów danej klasy w celu ochrony przechowywanych wartości przed ich niepożądaną modyfikacją
w programowaniu obiektowym, mechanizm współdzielenia atrybutów oraz zachowań pomiędzy klasą bazową, a jej pochodną; dzięki dziedziczeniu niektórych rozwiązań (atrybutów i metod) napisany kod można używać w wielu aplikacjach
(inaczej: wielopostaciowość) mechanizm umożliwiający posługiwanie się tą samą metodą w kilku różnych kontekstach, zależnie od zaistniałych okoliczności; działanie metody zależy na przykład od typu dostarczonych jej danych wejściowych