Struktura bazy

Budowa bazy
Charakterystyczną cechą dla serwerów MySQL jest obsługa wielu baz danych oraz system uprawnień i użytkowników. Każdemu użytkownikowi można przypisać uprawnienia do jednej lub do większej ilości baz, przy czym jedna baza może mieć dowolną ilość użytkowników, którzy posiadają do niej uprawnienia.

W poszczególnych bazach znajdują się tabele. Jedna baza może przechowywać dowolną liczbę tabel. Każda tabela może posiadać dowolną liczbę pól (a bardziej obrazowo - kolumn), w których przechowywane są dane. Pole tabeli musi posiadać zdefiniowaną nazwę oraz typ pola (w zależności od rodzaju danych, które są przechowywane).

Tworzenie tabel
Przy tworzeniu struktury bazy przydatny jest skrypt o nazwie phpMyAdmin. Jest to interfejs do zarządzania bazą MySQL. Oczywiście istnieje możliwość zarządzania wszystkimi aspektami bazy za pomocą zapytań. Jednak projektowanie bazy jest czynnością jednorazową przy każdym projekcie, zatem warto skorzystać z narzędzia, za pomocą którego możemy w prosty sposób określić budowę.

Przed rozpoczęciem tworzenia tabeli warto zastanowić się ile pól będziemy potrzebowali. Jedno pole warto zarezerwować na identyfikator rekordu. Nawet, jeśli nie planujemy go wykorzystywać teraz, w przyszłości może pomóc na przykład w usuwaniu konkretnych rekordów z tabeli.

Typy pól
Ciągi znaków:
CHAR - pole o stałej długości z zakresu od 1 do 255 bajtów. Puste miejsca są uzupełniane z prawej strony spacjami
VARCHAR - pole o zmiennej długości z zakresu od 1 do 255 bajtów. Wymagane jest określenie maksymalnej ilości znaków
TINYTEXT - pole tekstowe o rozmiarze nie przekraczającym 255 bajtów
TEXT - pole tekstowe o rozmiarze nie przekraczającym 65 535 bajtów
MEDIUMTEXT - pole tekstowe o rozmiarze nie przekraczającym 16 777 215 bajtów
LONGTEXT - pole tekstowe o rozmiarze nie przekraczającym 4 294 967 295 bajtów

Liczby:
TINYINT - 1-bajtowe pole, przechowujące wartości całkowite bez znaku z przedziału od 0 do 255 lub ze znakiem z przedziału od -127 do 127
SMALLINT - 2-bajtowe pole, przechowujące wartości całkowite bez znaku z przedziału od 0 do 65~535 lub ze znakiem z przedziału od -32~768 do 32 768
MEDIUMINT - 3-bajtowe pole, przechowujące wartości całkowite bez znaku z przedziału od 0 do 16~777~215 lub ze znakiem z przedziału od -8~388~608 do 8~388~608
INT - 4-bajtowe pole, przechowujące wartości całkowite bez znaku z przedziału od 0 do 4~294~967~295 lub ze znakiem z przedziału od -2~147~483~647 do 2~147~483~647
FLOAT - 4-bajtowa liczba zmiennoprzecinkowa.
DOUBLE - 8-bajtowa liczba zmiennoprzecinkowa
DECIMAL - pole zmiennoprzecinkowe. Liczba, zamiast zostać zredukowana do postaci szesnastkowej, pamiętana jest w formacie znakowym

Czas:
DATE - data wyświetlana w formacie RRRR-MM-DD.
DATETIME - data wyświetlana w formacie RRRR-MM-DD GG:MM:SS.
TIMESTAMP - liczba sekund od 1 stycznia 1970, 0:00
TIME - czas mieszczący się w przedziale od -838:59:59 do 838:59:59

Indeksy
Indeksy pomagają przyspieszyć wyszukiwanie rekordów, lecz spowalniają ich dopisywanie i uaktualnianie (przy każdej zmianie indeks jest tworzony na nowo). Warto zakładać indeksy na pola, wg których będziemy często przeszukiwać bazę i jeśli wiemy, że odczyt danych będzie o wiele częstszy niż zapis. Tabela może posiadać jeden indeks główny (najlepiej pole identyfikatora), wieleindeksów unikalnych (jeśli wiemy, że wartości są unikalne dla każdego rekordu), indeksów zwykłych i indeksów pełnotekstowych (używanych najczęściej do wyszukiwarek).