RkBlog

Hardware, programming and astronomy tutorials and reviews.

Wprowadzenie do baz danych

Aplikacje bazodanowe to specjalistyczne aplikacje, których głównym celem jest przechowywanie złożonych informacji, zarządzanie nimi oraz ich udostępnianie. Pod pojęciem "zarządzania" rozumie się ich modyfikację, kasowanie i dodawanie, natomiast "udostępnianie" oznacza możliwość ich pobierania na wszystkie możliwe sposoby we wszystkich kombinacjach, posortowane według dowolnego parametru. Bazy danych wykorzystywane są wszędzie tam, gdzie mamy do czynienia ze złożoną organizacją informacji. Również witryny WWW swą zawartość przechowują najczęściej w bazach, podczas gdy skrypty służą jedynie do ich wyświetlania i przetwarzania. Dzięki temu programista nie musi się martwić pisaniem kodu odpowiedzialnego np. za sortowanie wyników - całą robotę odwalili już za niego twórcy bazy danych.

Przegląd terminologii

Przy pracy z bazami danych będziemy stosowali pewną terminologię. Pora, by się z nią zapoznać. Program, który zarządza bazami danych jest nazywany serwerem baz danych. Dane są w nim ułożone w hierarchiczny sposób, który ilustruje poniższy schemat:
schemat_db
Widzimy tu, że serwer DB może utrzymywać kilka różnych baz danych należących do różnych aplikacji. Pojedyncza baza zawiera tabele o określonej strukturze, w których przechowywane są rekordy zawierające dane. Struktura tabeli definiuje pola oraz ich typy, w jakich rekordy mogą przechowywać informacje. Poniżej znajduje się graficzna ilustracja zawartości prostej tabeli. Oto kilka dodatkowych informacji o terminach użytych przed chwilą:
  • tabela - ang. table
  • rekord - zwany też wierszem. Ang. row
  • pole - zwana też kolumną. Ang. field
Pomiędzy tabelami w obrębie bazy mogą występować pewne zależności zwane relacjami. Dość często pojawiają się relacje tabel w bazie danych. Wyróżnia się kilka rodzajów relacji:
  • Jeden do wielu - jednemu rekordowi z tabeli A przypisanych jest kilka rekordów z tabeli B. Przykładem może być kilka artykułów przypisanych jednej kategorii.
  • Wiele do wielu - jednemu rekordowi z tabeli A przypisanych jest kilka rekordów z tabeli B oraz jednemu rekordowi z tabeli B przypisanych jest kilka rekordów z tabeli A. Przykład to książki oraz ich autorzy. Jedna książka może być napisana przez wielu ludzi, jednocześnie pojedynczy człowiek może napisać kilka książek.
  • Jeden do jednego - jednemu rekordowi z tabeli A przypisany jest dokładnie jeden rekord z tabeli B. Relacja ta jest rzadko wykorzystywana.

Relacje można odzwierciedlać w strukturze bazy, a także pobierać dane z ich wykorzystaniem (np. pobrać produkty posortowane według tytułów kategorii, które mieszczą się przecież w innej tabeli). Bazy, w których dozwolone są takie operacje, nazywamy relacyjnymi bazami danych, w przeciwieństwie do płaskich baz danych.

Wszystkie operacje na bazach danych wykonujemy, wysyłając do serwera zapytania (ang. query) sformułowane w specjalnym języku SQL (Structured Query Language). Terminem ANSI SQL określamy nazwę standardu definiującego język SQL. Różne serwery DB implementują jego założenia lepiej lub gorzej, ale w przypadku korzystania ze złożonych możliwości kompatybilność między nimi nie jest zadowalająca. Aplikacje napisane w PHP najczęściej korzystają z trzech różnych baz danych: MySQL, SQLite oraz PostgreSQL.


Przegląd serwerów DB

Oto krótki przegląd niektórych dostępnych serwerów DB:
  • MySQL - najpopularniejszy serwer DB do zastosowań WWW stworzony przez szwedzką firmę MySQL AB. Można go używać bez żadnych opłat. MySQL słynie ze swej olbrzymiej wydajności, a najnowsza wersja 5.0 obsługuje już prawie cały standard ANSI SQL.
  • PostgreSQL - główny konkurent MySQL-a dostępny na licencji open-source. Jego wydajność jest mniejsza lub większa niż MySQL w zależności od konfiguracji i wykonywanych zapytań, ale wciąż jest to jedyny darmowy serwer DB, który posiada pełną obsługę standardu ANSI SQL.
  • IBM DB2 Express-C - to bezpłatna edycja znanej bazy IBM DB2, udostępniona na systemy Linux i Windows. Jej darmowe, nielimitowane wykorzystanie możliwe jest w odmianach 32 i 64 bitowych, na serwerach z dwoma procesorami i 4 GB RAM. Dostępne są różne metody wykorzystania DB2 z poziomu PHP, w tym również pełne, bezpłatne środowisko Zend Core for IBM oraz wsparcie dla PDO w PHP5. Więcej informacji można odnaleźć na stronie IBM.
  • SQLite - ten serwer DB jest dość specyficzny, ponieważ w rzeczywistości jest to biblioteka wbudowywana w aplikacje, które go wykorzystują (np. w interpreter PHP). Stąd też do korzystania z niego nie potrzeba żadnych dodatkowych programów. SQLite jest wbudowany domyślnie w PHP5 i nowszych wersjach. Wcześniej wymienione bazy danych przechowują dane w wielu specjalnych plikach, a po uruchomieniu serwera DB część lub nawet całość danych kopiowanych jest do pamięci RAM (operacje w RAM są znacznie szybsze niż operacje I/O na dysku). Baz danych SQLite to pojedynczy binarny plik i jako baza danych nie znosi dobrze bardzo dużego obciążenia (operacje odczytu są bardzo szybkie, operacje zapisu znacznie wolniejsze niż w przypadku MySQL i Postgresa). Mimo to SQLite nie powinien sprawiać problemów stronom o niedużym ruchu (do kilku tysięcy unikalnych odsłon dziennie) zakładając że mamy pobranie napisane zapytania.
W przeszłości PHP posiadał osobne funkcje do komunikacji z każdą z tych baz, dlatego powstawało wiele napisanych w PHP bibliotek unifikujących interfejs (np. ADODB, Creole). Ponadto dodawały one kilka zwiększających wydajność opcji takich, jak cache'owanie wyników zapytań do plików. W PHP 5.1.0 pojawiła się wreszcie wbudowana biblioteka PHP Data Objects (PDO), która także udostępnia jednolite API.

Na podstawie kursu PHP na Wikibooks, licencja GNU Free Documentation License

RkBlog

Podstawy PHP, 14 July 2008, Piotr Maliński

Comment article