Sieciowe serwery baz danych Sieciowe serwery baz danych ZAGADNIENIA Historia powstania MySQL Początki i rozwój serwera PostgreSQL Komercyjne systemy bazodanowe MySQL Początki MySQL sięgają roku 1995, gdy Michael Widenius (znany jako Monty) rozpoczął pracę, wraz z Dawidem Axmarkiem, nad kodem bazy MySQL, który ukończyli w 1996 r. Projekt tworzony był w TCX DataKonsult AB i jako MySQL AB został sprzedany Sun Microsystems w 2008 r. Baza danych MySQL swoją nazwę prawdopodobnie odziedziczyła po córce Wideniusa – My. Monty stworzył jeszcze jeden SZBD oparty na MySQL oraz silniku Aria. Produkt znany jest jako MariaDB. 27 stycznia 2010 roku Sun Microsystems został przejęty przez Oracle za 7,4 miliardów dolarów na podstawie porozumienia podpisanego 20 kwietnia 2009 r. Od tego czasu MySQL rozwijany jest przez Oracle. Mimo że kod MySQL dostępny jest na licencji GPL, ma również wersje komercyjne, które cechuje rozszerzona funkcjonalność. SZBD MySQL wykorzystywany jest bardzo często przez firmy hostingowe, ponieważ cechuje go duża szybkość transakcji. Nie zmniejsza to stabilności, szybkości i wysokiej funkcjonalności pozostałych systemów, takich jak PostgreSQL. Systemy bazodanowe, podobnie jak systemy operacyjne, mają swoich zwolenników i przeciwników, a spory toczone pomiędzy nimi przypominają „święte wojny” na tle religijnym. Celem tego podręcznika nie jest testowanie wydajności i funkcjonalności obu systemów, tylko przygotowanie przyszłych informatyków do stawiania pierwszych kroków w administracji i konfiguracji SZDB. PostgreSQL jest jednym z najstarszych i najlepiej przetestowanych serwerów bazodanowych. Serwer ten ma bardzo wiele rozszerzeń w formie wtyczek (plugins), które sprawiają, że może konkurować z komercyjnymi SZBD najwyższej klasy. Historia stgreSQL sięga roku 1970, kiedy to na uniwersytecie Berkeley powstał projekt Inter aktywnej Grafiki w Systemie Wyszukiwawczym (INGRES). W1980 r. poprawioną wersję skrócono do Postgres. W 1993 r. projekt oficjalnie zakończono w Berkeley. Rozwojem Postgresa zajęła się społeczność open source pod nazwą Postgres95. Ponieważ system Sten wspierał SQL, jego nazwa została zmieniona na PostgreSQL, którą nosi do dziś. PostgreSQL wykorzystują z powodzeniem firmy i instytucje przetwarzające duże ilości danych, np. Skype, United States Federal Aviation Administration (FAA). Instalację PostgreSQL można przeprowadzać na różne sposoby w zależności od przeznaczenia systemu operacyjnego. Oprócz wymienionych wyżej systemów, które omawiane są ze wzglądu na popularne oraz na łatwy i darmowy dostęp (każdy może je za darmo pobrać i testować), istnieją również systemy komercyjne, które oprócz profesjonalnych zastosowań cechuje wysoka cena. Ze względu na to, iż w przypadku chęci użycia produktów firmy Microsoft czy Oracle należy przygotować się na wydatek kilku lub kilkudziesięciu tysięcy złotych, stosowane są one w firmach, które stać również na przeprowadzanie szkoleń z obsługi tych systemów, i Nie bez znaczenia pozostaje to, że większość narzędzi prezentowanych w obrębie tego podręcznika ma interfejsy zbliżone do ww. komercyjnych rozwiązań. Dokładne poznanie sposobu administrowania, użytkowania i projektowania przy użyciu MySOL i PostgreSQL będzie bardzo pomocne w wypadku, gdy z rozwiązań darmowych zajdzie potrzeba migracji do rozwiązań komercyjnych, np. zastąpienia MySQL lub PostgreSQL bazą danych Microsoft SQL Server lub SZBD Oracle. 1 Do czego może służyć serwer - serwer bazy danych 1 Z serwerem plików „spokrewniony” jest serwer bazy danych. Wspólna funkcja to udostępnianie informacji wszystkim użytkownikom sieci. Różnica polega na tym, że w przypadku serwera plików informacje są przechowywane w postaci ogromnej ilości plików, zapisanych w uporządkowany sposób w wielopoziomowym systemie folderów. Na bazę danych można spojrzeć jak na jeden wielki plik, do którego dostęp kontroluje specjalne oprogramowanie. Oprogramowanie to odpowiada na zapytania pochodzące od użytkowników, generowane przez programy, w których użytkownicy pracują. Jako przykład można podać tu program finansowo-księgowy – wszystkie dane przechowywane są w bazie danych na serwerze bazodanowym. Użytkownicy uruchamiają na swoich komputerach programy, które sięgają po potrzebne informacje do bazy danych, wysyłając do serwera zapytania o konkretne zestawy danych, które serwer bazodanowy następnie wyszukuje i odsyła. Analogicznie w przypadku konieczności zmiany danych w bazie – nie jest wysyłany cały plik (jak ma to miejsce w serwerze plików) a jedynie odpowiednie polecenie do serwera bazy danych wraz z danymi do zapisania. W przypadku serwera bazy danych rośnie znaczenie procesora, który ma o wiele więcej pracy niż w przypadku serwera plików. Połączenie sieciowe nie jest już tak istotne, bo z reguły ilość przesyłanych danych jest mniejsza (ale nie zawsze). Funkcje serwera bazy danych i serwera plików można z powodzeniem łączyć w jednym komputerze-serwerze. Należy przestrzegać zasady, aby baza danych była przechowywana na oddzielnym dysku (logicznym, fizycznym, wolumenie). Kiedy potrzebuję serwera bazy danych ? Konieczność uruchomienia serwera bazy danych na ogół narzucona jest przez program, który chcemy wdrożyć – jak np. wspomniany wyżej program finansowo-księgowy. Konkretny program zwykle narzuca konkretne wymagania odnośnie serwera (zarówno sprzętu jak i oprogramowania). Kiedy nie potrzebuję serwera bazy danych ? Serwer bazy danych nie jest potrzeby gdy nie korzystasz z programu nie wymagającego bazy danych, która powinna znajdować się na oddzielnym serwerze. Co Ci da serwer bazy danych ? Po pierwsze możliwość korzystania z programu, na który się zdecydowałeś, kierując się jego funkcjonalnością. Natomiast gromadzenie informacji w bazie danych w porównaniu z plikami na serwerze plików zapewnia o wiele większą wydajność i bezpieczeństwo. Przykładowe rozwiązania 1 Obecnie dostępnych jest wiele rozwiązań bazodanowych, np. MS-SQL, Oracle, MySQL, PostgreSQL. Każdy z wymienionych przykładów wymaga serwera z zainstalowanym systemem operacyjnym, może to być np. MS-Windows Server (MS-SQL, Oracle), Linux (MySQL, PostgreSQL, Oracle). http://lsb.pl/czytelnia/67/do-czego-moze-sluzyc-serwer-serwer-bazy-danych 2 Serwer baz danych a baza danych Serwer baz danych jest programem, który zarządza bazami danych. Natomiast utworzenie bazy danych i wypełnienie jej informacjami jest zadaniem programisty lub administratora serwera. Czyli po zainstalowaniu serwera należy jeszcze zaprojektować i utworzyć bazę danych, dopiero potem będzie można zastosować serwer w aplikacji WWW. Baza danych utworzona w jednym serwerze (np. MySQL) nie może być bezpośrednio używana w innym środowisku (np. PostgreSQL), ale same tabele i zapisane w nich dane mogą być dość łatwo przenoszone pomiędzy serwerami. Znacznie gorzej wygląda kwestia przeniesienia utworzonych w bazie procedur lub funkcji. SZBD działające w architekturze klient-serwer Większość obecnie spotykanych systemów działa w trybie klient-serwer, gdzie baza danych jest udostępniana klientom przez SZBD będący serwerem. Serwer bazy danych może udostępniać dane klientom bezpośrednio lub przez inny serwer, np. poprzez serwer WWW lub serwer aplikacji. Systemy bazy danych w architekturze klient-serwer to m.in.: DB2 Informix Dynamic Server Firebird MariaDB Microsoft SQL Server MySQL Oracle PostgreSQL SZBD bez podziału na klienta i serwer Istnieją bazy danych, które nie muszą być współdzielone przez wielu użytkowników jednocześnie. W takim przypadku używa się SZBD nierozróżniających podziału na klienta i serwer, np. Microsoft Access – zgodny z SQL, korzystający z Microsoft Jet Kexi – zgodny z SQL, korzystający z SQLite 3 Tabele baz danych – iloczyn kartezjański Relacja – tabela Aby wyjaśnić pojęcie relacji, warto odświeżyć kilka istotnych informacji z matematyki i teorii zbiorów. Iloczyn kartezjański zawdzięcza swoją nazwę kartezjańskiemu układowi współrzędnych. Jest to prostoliniowy układ współrzędnych o parach prostopadłych osi. Nazwa pojęcia pochodzi od łacińskiego nazwiska francuskiego matematyka i filozofa Kartezjusza (René Descartes), który opisał tę ideę w 1637 r. w traktacie La Geometrie. Iloczynem kartezjańskim prostej A i B będzie zbiór punktów płaszczyzny zawartej między nimi (każdy punkt należący do tej płaszczyzny). Idąc tym tokiem myślenia, jeśli będziemy mieć dwa zbiory A i B, to iloczynem kartezjańskim tych zbiorów będzie taki zbiór C, w którym każdy element A będzie połączony z każdym elementem B. Prześledźmy tą sytuację na przykładzie. Zbiór A przechowujący cyfry Zbiór B przechowujący imiona Iloczynem kartezjańskim tych dwóch zbiorów będzie następujący zbiór C, w którym każdemu elementowi zbioru A, będzie odpowiadał element zbioru B: 4 Teraz spróbujemy zdefiniować relację. Relacją nazywamy podzbiory iloczynu kartezjańskiego. Niech podzbiorem dla naszego przykładu będą (1-Jacek, 2 – Ewa). Jeśli umieścimy te elementy w tabeli, otrzymamy: Numery 1 2 1 3 2 3 Imiona Jacek Ewa Ewa Ewa Jacek Jacek Dlatego w relacyjnych bazach danych relacją nazywać będziemy tabele bazy danych, ponieważ zawartość tabeli ulega ciągłym zmianom. Kolumny – atrybuty mogą przechowywać wartości określonych typów, jednak wartości te mogą być modyfikowane. Podobnie jest w naszym przykładzie. Relacja (tabela) przechowuje dane, które zwykle ulegają pewnym zmianom. Zawartość tabeli, jeśli nie jest modyfikowana, może być rozszerzana o kolejne wiersze (rew). Operacje, jeśli nie zachodzą w danej chwili, mogą zajść w przyszłości, dlatego zawartość relacji możemy traktować jako zmienną. Teoretyk baz danych Chris Date zaproponował określanie tabel w relacyjnych bazach danych mianem relvar. Jest to skrót od relation (relacja – tabela) oraz variable - zmienna. Ten nowy termin w języku polskim tłumaczymy jako zmienna relacyjna. Takie definiowanie tabeli w relacyjnej bazie danych ma na celu uświadomienie osobom poznającym teorie, że tabela spełnia wymogi matematyczne relacji, a jej zawartość (to co jest przechowywane wewnątrz tabeli) może ulegać zmianom w określonym czasie. W większości opracowań dotyczących baz danych pojęcie relacja odnosi się do tabeli w relacyjnej bazie danych. Problemem teorii baz danych jest stosowanie terminu relacja również do związków, które występują pomiędzy tabelami (np. relacja jeden do wielu). W efekcie przyjęcia takiej nomenklatury, gdy chcemy powiedzieć, że pomiędzy tabelą A i tabelą B 5 występuje związek „jeden do wielu”, mówimy, że pomiędzy relacją A a relacją B występuje relacja „jeden do wielu” (zupełnie tak, jakby oznaczało to istnienie trzeciej tabeli o nazwie „jeden do wielu”). Jak łatwo zauważyć, postępowanie takie doprowadza do zatarcia sensu wypowiedzi. W tym podręczniku konsekwentnie używane będą jako synonimy pojęcia relacja i tabela, a stosunki pomiędzy tabelami nazywane będą związkami, np. związkiem jeden do wielu, związkiem jeden do jednego. PRZYKŁAD Tabela 7.1. Lista reprezentantów Polski w piłce nożnej Nr Imię i Data Występy Gole Klub nazwisko urodzenia / Wiek 12 Grzegorz 5 września 3 0 Jagiellonia Sandomierski 1989 / 22 lata Białystok 1 Wojciech 18 kwietnia 11 0 Arsenał F.C. Szczęsny 1990 / 22 lata 22 Przemysław 4 stycznia 8 0 PSY Tytoń 1987 / 25 lat Eindhoven Tabela przedstawia fragment składu reprezentacji Polski w piłce nożnej. W dniu 16.07.2012 r. odpowiadała rzeczywistości, jednak po pewnym czasie jej zawartość może ulec zmianie. Wystarczy, że któryś z zawodników strzeli gola, wtedy zawartość relacji ulegnie zmianie. Podobnie dane ulegną modyfikacji po podjęciu decyzji personalnej przez selekcjonera mającego wpływ na ostateczny skład reprezentacji Polski. W 2013 roku zmieni się również zawartość kolumny Wiek (każdy z piłkarzy będzie o rok starszy). Ponieważ zachowanie zawartości relacji przypomina zawartość zmiennej znanej z języków programowania (pole przechowuje pewną wartość określonego typu i może ulec zmianie), stąd pisząc o tabeli, której zawartość ulega zmianom, użyjemy pojęcia zmienna relacyjna, natomiast gdy mamy na myśli tabelę, której zawartość jest rozpatrywani w danej określonej chwili i nie ulega zmianie, będziemy mówić o wartości relacyjnej lub w skrócie, relacji. 6