Baz danych to podstawa nowoczesnych witryn. Zrozumienie zasady ich działania daje nowe spojrzenie na sieć. A w dodatku jest proste.
Poznałeś już {link_wew 6707}HTML-a{/link_wew} i {link_wew 6803}CSS-a{/link_wew}. Potrafisz stworzyć własny skrypt dynamicznie generujący stronę. Czas przejść do jednej z najciekawszych i najważniejszych dziedzin współczesnej informatyki – baz danych. Przedstawiamy krótki wstęp do tego tematu.
Formalnie bazą danych nazywamy reprezentację fragmentu świata. W praktyce – dla twórców stron – oznacza to zbiór informacji o wybranych obiektach (ludzie, instytucje, witryny internetowe, wpisy na blogu) zapisany w usystematyzowany sposób i umożliwiający efektywne wyszukiwanie oraz aktualizowanie informacji.
Jak przedstawić bazę?
Prostą bazę danych łatwo wyobrazić sobie jako zbiór tabelę, która posiada określone kolumny (np. imię, nazwisko, telefon i adres) i wiersze wypełnione tymi danymi dla poszczególnych obiektów. W tym przypadku będą to osoby.
W rzeczywistości bazą nazywa się również oprogramowanie zarządzające informacjami (MySQL, MS SQL, Oracle). Język służący do operowania zgromadzonym zbiorem (w stosowanych najczęściej bazach relacyjnych) to zwykle odmiana SQL-a.
W takiej bazie opisywanym obiektem jest człowiek, którego charakteryzują cztery atrybuty (cechy): imię, nazwisko, telefon i adres. Wyobrażenie obiektu nazywa się encją.
Dlaczego nie statyczne pliki?
Jednym z celów przechowywania informacji w bazach jest łatwa manipulacja nimi. Zapewnia to oprogramowanie, które pozwala na łatwe wstawianie nowych rekordów czy filtrowanie istniejących. Możemy na przykład poprosić bazę aby pokazała nam wszystkich o nazwisku Nowak. A co, gdybyśmy chcieli wyświetlić mieszkańców Warszawy?
Widać, że będą to Jan Kowalski i Anna Nowak, ale pola z adresem są zapisane bardzo niestarannie, przez co odczytanie prawidłowego adresu przez program wymaga sporo pracy. Zamiast tego powinniśmy utworzyć nową tabelę, zawierającą zapisane w sposób formalny adresy i połączyć obydwie tabele za pomocą identyfikatora. Stosując pliki tekstowe wymagałoby to olbrzymich nakładów. Oprogramowanie bazodanowe samo zadba o odpowiednie ułożenie informacji.
Wiążemy tabele
Każdy unikalny (niepowtarzalny) rekord w tej tabeli posiada swój identyfikator, zwany kluczem głównym. Nazwaliśmy go po prostu „Identyfikator”. Jeśli dwie osoby mają taki sam adres (Jan Kowalski mieszka z Katarzyną Nowak), to nie przechowuje się kopii adresu. Na marginesie warto zauważyć, że niektóre pola mogą pozostać puste, jak np. numer mieszkania (niektórzy mieszkają w domach jednorodzinnych), inne zaś są wymagane (identyfikator). Ustala to twórca bazy podczas jej projektowania.
Jak rozmawiać z bazą?
Powiedzmy, że chcemy poznać imiona i nazwiska osób mieszkających w Warszawie. Wyszukiwanie odbywa się w następujący sposób:
1. Z tabeli Adresy wybieramy takie rekordy, w których wartość pola Miasto to „Warszawa” (pierwszy i trzeci wiersz),
2. Zapamiętujemy identyfikatory tych rekordów (2 i 3),
3. Przechodzimy do tabeli Osoby i wyszukujemy takie, których pole Id_adresu jest równe zapamiętanym identyfikatorom (pierwszy, trzeci i czwarty wiersz)
4. Wyświetlamy ich imiona i nazwiska
W klasycznych, imperatywnych językach programowania (C, Java, PHP) program byłby właśnie sekwencją takich kroków. W językach deklaratywnych, stosowanych w bazach danych, opisuje się jednak samo rozwiązanie: wybierz takie rekordy z tabeli Osoby, których pole ID_adresu jest takie jak Identyfikator dowolnego rekordu z tabeli Adresy w którym pole Miasto ma wartość „Warszawa”.
Gratulacje, właśnie skonstruowaliśmy nasze pierwsze zapytanie do bazy, w taki sam sposób jak robi się to przy pomocy sformalizowanego języka programowania! W dodatku jest ono całkiem skomplikowane. Po zadaniu pytania nie trzeba robić nic więcej. Baza sama wykona odpowiednie operacje.
Na co należy zwrócić uwagę? Domyślnie zwracane dane nie są szeregowane w żaden logiczny sposób; jeden Identyfikator z tabeli Adresy może być przyporządkowany do wielu osób z tabeli Osoby, może też nie być przyporządkowany do nikogo. ID_adresu pojawiające się w tabeli Osoby jest tzw. kluczem obcym, czyli kluczem głównym (Identyfikator) pochodzącym z innej tabeli.
Strukturalny język zapytań
W języku SQL (Structured Query Language, strukturalny język zapytań) możemy stworzyć bazy, modyfikować je i pobierać dane. Podstawowa składnia służąca do pobierania danych to:
{html}SELECT (kolumny) FROM (tabela) WHERE (warunek){/html}
Na przykład jeśli chcielibyśmy wyświetlić imiona i telefony wszystkich Nowaków napiszemy:
{html}SELECT Imię, Telefon FROM Osoby WHERE Nazwisko=”Nowak”{/html}
Poprzedni przykład wyglądałby następująco:
{html}SELECT * FROM Osoby WHERE Id_adresu=ANY( SELECT Identyfikator FROM Adresy WHERE Miasto=”Warszawa” ){/html}
Przeanalizujmy zapytanie od wewnątrz:
SELECT Identyfikator FROM Adresy WHERE Miasto=”Warszawa” zwraca 2 i 3, więc możemy podstawić wynik do zapytania zewnętrznego:
{html}SELECT * FROM Osoby WHERE Id_adresu=ANY( 2 , 3 ){/html}
ANY wskazuje w tym przypadku na dowolną z wartości zwróconych przez zapytanie zagnieżdżonego.
Składnia SQL-a jest bardzo łatwa do opanowania i nie wymaga umiejętności programowania w innych językach. Poszczególne bazy danych (MySQL, MS SQL czy Oracle) różnią się jednak szczegółami, a ich omówienie wielokrotnie przekracza długość tego artykułu. Bardzo dobry kurs odmiany języka stosowanej w popularnym wśród twórców stron MySQL-u znajduje się pod adresem http://dev.mysql.com/doc/refman/5.0/en/tutorial.html, a ogólny opis języka na stronie http://www.w3schools.com/sql/sql_intro.asp.
Po co baza web developerowi?
Przyjrzyjmy się dowolnemu forum internetowemu. Każdy wpis zawiera treść, datę dodania, autora i dział do którego jest przypisany. Te dane również można wyobrazić sobie jako tabelę, więc szybko dochodzimy do wniosku, że każde forum jest w rzeczywistości bazą danych. To samo dotyczy blogów i stron opartych o CMS-y.
Encje w nich stosowane to zwykle wpis (z atrybutami: treść tytuł, data, identyfikator), użytkownik (nick, hasło, uprawnienia) czy komentarz (treść, data, id_komentowanego_wpisu) itd.
Od razu widać, że baza danych przyda się do przechowywania informacji o użytkownikach strony (możemy rozszerzyć informacje o login, hasło i e-mail).
Co z wyszukiwarkami? Zawierają one listę stron, którym przypisują wartość, inne strony, do których się odnoszą, listę słów kluczowych… To również baza danych. Informacje o użytkownikach Naszej-klasy? Statusy na Twitterze?
Jeśli uświadomimy sobie, że te wszystkie witryny nie mogłyby działać bez baz danych, to przychodzi na myśl tylko jedno pytanie. Jak to możliwe, że Internet przez tyle lat opierał się na statycznych stronach?