You are on page 1of 24

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

PHP, MySQL i Apache


dla kadego. Wydanie III
Autor: Julie C. Meloni
Tumaczenie: Jarosaw Dobrzaski na podstawie PHP,
MySQL i Apache dla kadego. Wydanie II w tumaczeniu
Adama Byrtka i Jarosawa Dobrzaskiego
ISBN: 83-246-0773-0
Tytu oryginau: Sams Teach Yourself PHP, MySQL
and Apache All in One (3rd Edition)
Format: B5, stron: 600
Witryny WWW korzystajce z baz danych i wywietlajce dynamicznie generowan
tre staj si coraz bardziej popularne. Technologie skryptowe dziaajce po stronie
serwera i mechanizmy bazodanowe przestay by cech charakterystyczn portali
i sklepw dzi wykorzystywane s rwnie w firmowych i prywatnych stronach
WWW, galeriach fotografii oraz blogach. Na rynku istnieje wiele technologii
stosowanych do budowania dynamicznych witryn WWW, lecz najwikszym
uznaniem cieszy si duet PHP i MySQL uruchamiany na serwerze WWW Apache.
Ksika PHP, MySQL i Apache dla kadego. Wydanie III to wprowadzenie do
tworzenia witryn WWW z wykorzystaniem tej wanie technologii i najnowszych wersji
wchodzcych w jej skad narzdzi PHP 5 i MySQL 5. Przedstawiono w niej proces
instalacji serwera Apache, bazy danych MySQL, interpretera PHP na serwerze i stacji
roboczej oraz zasady programowania w PHP i pobierania danych z tabel. Znajdziesz tu
informacje o operacjach na plikach, generowaniu grafiki, zarzdzaniu sesjami, tworzeniu
zapyta do bazy MySQL i optymalizowaniu wydajnoci aplikacji. Dziki zawartym
w ksice i doskonale omwionym gotowym projektom poznasz technologie PHP
i MySQL w praktyce.
Instalacja i konfiguracja PHP, MySQL i Apache w Windows i Linux
Struktura jzyka PHP
Programowanie obiektowe
Przetwarzanie danych z formularzy HTML
Operacje na plikach i katalogach
Projektowanie baz danych i tabel
Poczenie skryptw PHP z baz danych MySQL
Uwierzytelnianie uytkownikw
Korzystanie z plikw XML
Zabezpieczanie aplikacji sieciowych
Poznaj najnowsze wersje najpopularniejszych narzdzi
do tworzenia dynamicznych witryn WWW

O autorach ..................................................................................... 17
Wprowadzenie ................................................................................ 19

Cz I

Podstawy ..................................................................... 23

Rozdzia 1. Szybka instalacja ........................................................................... 25


Instalacja w systemie Linux/Unix ................................................................................... 25
Instalacja MySQL ..................................................................................................... 26
Instalacja Apache ...................................................................................................... 26
Instalacja PHP ........................................................................................................... 28
Instalacja w systemie Windows ....................................................................................... 29
Instalacja MySQL ..................................................................................................... 29
Instalacja Apache ...................................................................................................... 30
Instalacja PHP ........................................................................................................... 32
Rozwizywanie problemw ............................................................................................ 34

Rozdzia 2. Instalacja i konfiguracja MySQL ...................................................... 35


Wersja aktualna i przysze wersje MySQL .................................................................... 35
Jak zdoby MySQL? ....................................................................................................... 36
Instalacja MySQL w systemie Linux/Unix ..................................................................... 36
Instalacja MySQL w systemie Windows ......................................................................... 37
Rozwizywanie problemw instalacji ............................................................................. 44
Podstawy bezpieczestwa ................................................................................................ 44
Uruchamianie MySQL .............................................................................................. 45
Zabezpieczanie poczenia MySQL .......................................................................... 45
Wprowadzenie do systemu uprawnie MySQL .............................................................. 46
Dwustopniowa autoryzacja ....................................................................................... 47
Korzystanie z systemu uprawnie ................................................................................... 48
Dodawanie uytkownikw ........................................................................................ 48
Usuwanie uprawnie ................................................................................................. 50
Podsumowanie ................................................................................................................. 50
Pytania i odpowiedzi ....................................................................................................... 51
Warsztaty ......................................................................................................................... 51
Test ............................................................................................................................ 52
Odpowiedzi ............................................................................................................... 52
wiczenia .................................................................................................................. 52

PHP, MySQL i Apache dla kadego

Rozdzia 3. Instalacja i konfiguracja Apache ..................................................... 53


Wersja aktualna i przysze wersje Apache ...................................................................... 53
Wybr sposobu instalacji ................................................................................................. 54
Kompilacja kodu rdowego ................................................................................... 54
Instalacja dystrybucji binarnej .................................................................................. 54
Instalacja Apache w systemie Linux/Unix ...................................................................... 55
Pobieranie kodu rdowego ..................................................................................... 55
Rozpakowanie kodu rdowego .............................................................................. 55
Przygotowania do kompilacji Apache ....................................................................... 56
Budowanie i instalacja Apache ................................................................................. 56
Instalacja Apache w systemie Windows ........................................................................... 57
Format pliku konfiguracyjnego Apache .......................................................................... 60
Dyrektywy ................................................................................................................. 60
Pojemniki .................................................................................................................. 61
Instrukcje warunkowe ............................................................................................... 62
Dyrektywa ServerRoot .............................................................................................. 63
Pliki konfiguracyjne dla katalogw ........................................................................... 64
Pliki dziennika Apache .................................................................................................... 65
access_log .................................................................................................................. 65
error_log .................................................................................................................... 65
Pozostae pliki ........................................................................................................... 66
Polecenia zwizane z Apache .......................................................................................... 66
Serwer Apache .......................................................................................................... 66
Skrypt kontrolny Apache .......................................................................................... 67
Pierwsze uruchomienie Apache ....................................................................................... 68
Sprawdzanie pliku konfiguracyjnego ........................................................................ 68
Uruchamianie Apache ............................................................................................... 69
Rozwizywanie problemw ............................................................................................ 70
Inny serwer WWW .................................................................................................... 70
Brak uprawnie do portu ........................................................................................... 70
Dostp zabroniony ..................................................................................................... 70
Ze parametry grupy .................................................................................................. 70
Podsumowanie ................................................................................................................. 71
Pytania i odpowiedzi ....................................................................................................... 71
Warsztaty ......................................................................................................................... 71
Test ............................................................................................................................ 72
Odpowiedzi ............................................................................................................... 72
wiczenia .................................................................................................................. 72

Rozdzia 4. Instalacja i konfiguracja PHP .......................................................... 73


Wersja aktualna i przysze wersje PHP ........................................................................... 73
Kompilacja PHP w systemie Linux/Unix ......................................................................... 74
Dodatkowe opcje konfiguracyjne w systemie Linux/Unix ....................................... 76
Integracja PHP z Apache w systemie Linux/Unix .................................................... 76
Instalacja PHP w systemie Windows .............................................................................. 77
Integracja PHP z Apache w systemie Windows ....................................................... 77
Plik php.ini ....................................................................................................................... 78
Testowanie ....................................................................................................................... 79
Gdzie znale pomoc ....................................................................................................... 80
Podstawy skryptw PHP ................................................................................................. 81
Pocztek i koniec bloku instrukcji PHP .................................................................... 81
Instrukcja echo i funkcja print() ................................................................................ 83
czenie HTML i PHP .............................................................................................. 84
Komentarze w kodzie PHP ....................................................................................... 85

Spis treci

5
Podsumowanie ................................................................................................................. 86
Pytania i odpowiedzi ....................................................................................................... 86
Warsztaty ......................................................................................................................... 87
Test ............................................................................................................................ 87
Odpowiedzi ............................................................................................................... 87
wiczenia .................................................................................................................. 87

Cz II

Struktura jzyka PHP ................................................... 89

Rozdzia 5. Podstawowe elementy jzyka PHP .................................................. 91


Zmienne ........................................................................................................................... 92
Zmienne globalne i superglobalne ............................................................................ 93
Typy danych .................................................................................................................... 94
Zmiana typu za pomoc settype() ............................................................................. 96
Zmiana typu poprzez rzutowanie .............................................................................. 97
Po co sprawdza typ? ................................................................................................ 99
Operatory i wyraenia ..................................................................................................... 99
Operator przypisania ............................................................................................... 100
Operatory arytmetyczne .......................................................................................... 101
Operator konkatenacji ............................................................................................. 101
Zoony operator przypisania .................................................................................. 102
Inkrementacja i dekrementacja wartoci zmiennej cakowitej ................................ 103
Operatory porwnania ............................................................................................. 104
Tworzenie zoonych wyrae za pomoc operatorw logicznych ........................ 105
Kolejno operatorw ............................................................................................. 106
Stae ............................................................................................................................... 107
Stae predefiniowane ............................................................................................... 108
Podsumowanie ............................................................................................................... 108
Pytania i odpowiedzi ..................................................................................................... 108
Warsztaty ....................................................................................................................... 109
Test .......................................................................................................................... 109
Odpowiedzi ............................................................................................................. 110
wiczenia ................................................................................................................ 110

Rozdzia 6. Sterowanie przepywem w PHP ..................................................... 111


Zmiana przepywu ......................................................................................................... 112
Instrukcja if ............................................................................................................. 112
Uycie klauzuli else w instrukcji if ......................................................................... 113
Uycie klauzuli elseif w instrukcji if ....................................................................... 113
Instrukcja switch ..................................................................................................... 115
Operator ? ................................................................................................................ 116
Ptle ............................................................................................................................... 117
Instrukcja while ....................................................................................................... 117
Instrukcja dowhile ............................................................................................... 118
Instrukcja for ........................................................................................................... 119
Przerywanie ptli za pomoc instrukcji break ......................................................... 120
Pomijanie iteracji za pomoc instrukcji continue ................................................... 122
Zagniedone ptle .................................................................................................. 123
Bloki kodu PHP ............................................................................................................. 125
Podsumowanie ............................................................................................................... 125
Pytania i odpowiedzi ..................................................................................................... 127
Warsztaty ....................................................................................................................... 127
Test .......................................................................................................................... 127
Odpowiedzi ............................................................................................................. 127
wiczenie ................................................................................................................ 128

PHP, MySQL i Apache dla kadego

Rozdzia 7. Funkcje ....................................................................................... 129


Czym jest funkcja? ........................................................................................................ 129
Wywoywanie funkcji .................................................................................................... 130
Definiowanie funkcji ..................................................................................................... 131
Zwracanie wartoci przez funkcje uytkownika ........................................................... 134
Zasig zmiennych .......................................................................................................... 135
Wywoywanie zmiennych za pomoc instrukcji global .......................................... 136
Przechowywanie wartoci pomidzy wywoaniami funkcji
za pomoc instrukcji static .......................................................................................... 138
Wicej o argumentach ................................................................................................... 140
Przypisywanie zmiennym wartoci domylnych .................................................... 140
Przekazywanie zmiennych przez referencj ............................................................ 142
Sprawdzanie istnienia funkcji ........................................................................................ 143
Podsumowanie ............................................................................................................... 145
Pytania i odpowiedzi ..................................................................................................... 145
Warsztaty ....................................................................................................................... 146
Test .......................................................................................................................... 146
Odpowiedzi ............................................................................................................. 146
wiczenie ................................................................................................................ 147

Rozdzia 8. Tablice ......................................................................................... 149


Czym jest tablica? .......................................................................................................... 149
Tworzenie tablic ............................................................................................................ 150
Tworzenie tablic asocjacyjnych .............................................................................. 151
Tworzenie tablic wielowymiarowych ..................................................................... 151
Niektre funkcje operujce na tablicach ........................................................................... 153
Podsumowanie ............................................................................................................... 155
Pytania i odpowiedzi ..................................................................................................... 155
Warsztaty ....................................................................................................................... 155
Test .......................................................................................................................... 155
Odpowiedzi ............................................................................................................. 155
wiczenia ................................................................................................................ 156

Rozdzia 9. Obiekty ........................................................................................ 157


Tworzenie obiektu ......................................................................................................... 157
Wasnoci obiektw ................................................................................................ 159
Metody obiektw ..................................................................................................... 160
Konstruktor .............................................................................................................. 162
Dziedziczenie ................................................................................................................. 162
Podsumowanie ............................................................................................................... 164
Pytania i odpowiedzi ..................................................................................................... 164
Warsztaty ....................................................................................................................... 164
Test .......................................................................................................................... 164
Odpowiedzi ............................................................................................................. 165
wiczenia ................................................................................................................ 165

Cz III Pierwsze kroki z kodem .............................................. 167


Rozdzia 10. Cigi znakw, data i czas ............................................................. 169
Formatowanie cigw znakw ...................................................................................... 170
Funkcja printf() ....................................................................................................... 170
Zamiana argumentw .............................................................................................. 176
Przechowywanie sformatowanych cigw znakw ................................................ 178

Spis treci

7
Analizowanie cigw znakw ....................................................................................... 178
Uwaga na temat indeksowania cigw znakw ...................................................... 179
Sprawdzanie dugoci cigu za pomoc funkcji strlen() ......................................... 179
Znajdowanie podcigu za pomoc strstr() .............................................................. 179
Okrelanie pozycji podcigu za pomoc funkcji strpos() ....................................... 180
Pobieranie czci cigu za pomoc funkcji substr() ................................................ 181
Podzia cigu na sowa za pomoc funkcji strtok() ................................................. 181
Operacje na cigach znakw ......................................................................................... 183
Oczyszczanie cigu za pomoc funkcji trim(), ltrim(), rtrim() i strip_tags() .......... 183
Zmiana fragmentu cigu za pomoc funkcji substr_replace() ................................ 184
Zamiana podcigw za pomoc funkcji str_replace() ............................................. 185
Zmiana wielkoci liter ............................................................................................. 185
Zawijanie tekstu za pomoc funkcji wordwrap() i nl2br() ...................................... 187
Dzielenie cigw za pomoc funkcji explode() ...................................................... 188
Funkcje operujce na dacie i czasie ............................................................................... 189
Pobieranie biecej daty za pomoc funkcji time() ................................................ 189
Konwersja znacznika czasu za pomoc funkcji getdate() ....................................... 189
Formatowanie znacznika czasu za pomoc funkcji date() ...................................... 190
Tworzenie znacznika czasu za pomoc funkcji mktime() ....................................... 193
Weryfikacja daty za pomoc funkcji checkdate() ................................................... 194
Inne funkcje operujce na cigach znakw, datach i czasie .......................................... 194
Podsumowanie ............................................................................................................... 194
Warsztaty ....................................................................................................................... 195
Pytania i odpowiedzi ............................................................................................... 195
Test .......................................................................................................................... 195
Odpowiedzi ............................................................................................................. 196
wiczenia ................................................................................................................ 196

Rozdzia 11. Formularze ................................................................................... 197


Tworzenie prostego formularza ..................................................................................... 197
Przekazywanie informacji w tablicach .......................................................................... 199
czenie kodu HTML i PHP w jednym skrypcie .......................................................... 202
Zapisywanie informacji o stanie w ukrytym polu ......................................................... 204
Przekierowania .............................................................................................................. 206
Wysyanie poczty elektronicznej ................................................................................... 207
Konfiguracja systemu .............................................................................................. 207
Tworzenie formularza ............................................................................................. 208
Skrypt wysyajcy wiadomo ................................................................................ 209
Formatowanie wiadomoci za pomoc HTML ....................................................... 211
Przesyanie plikw ......................................................................................................... 213
Tworzenie formularza wysyajcego plik ............................................................... 213
Skrypt obsugujcy przesany plik .......................................................................... 214
Podsumowanie ............................................................................................................... 217
Warsztaty ....................................................................................................................... 217
Test .......................................................................................................................... 217
Odpowiedzi ............................................................................................................. 217
wiczenia ................................................................................................................ 218

Rozdzia 12. Cookies i sesje ............................................................................ 219


Wprowadzenie do cookies ............................................................................................. 219
Anatomia cookie ..................................................................................................... 220
Tworzenie cookie .......................................................................................................... 221
Usuwanie cookie ..................................................................................................... 222

PHP, MySQL i Apache dla kadego


Wprowadzenie do sesji .................................................................................................. 223
Otwieranie sesji ............................................................................................................. 223
Zmienne sesyjne ............................................................................................................ 224
Przekazywanie identyfikatora sesji w adresie ............................................................... 228
Niszczenie sesji i usuwanie zmiennych ......................................................................... 229
Zastosowania sesji ......................................................................................................... 229
Obsuga zarejestrowanych uytkownikw .............................................................. 230
Obsuga ustawie uytkownika ............................................................................... 230
Podsumowanie ............................................................................................................... 230
Pytania i odpowiedzi ..................................................................................................... 231
Warsztaty ....................................................................................................................... 231
Test .......................................................................................................................... 231
Odpowiedzi ............................................................................................................. 231
wiczenie ................................................................................................................ 232

Rozdzia 13. Pliki i katalogi .............................................................................. 233


Doczanie plikw za pomoc funkcji include() ........................................................... 233
Zwracanie wartoci z doczonego dokumentu ...................................................... 235
Instrukcja include() wewntrz struktur sterujcych ................................................ 235
Uycie include_once() ............................................................................................. 236
Dyrektywa include_path ......................................................................................... 237
Weryfikacja plikw ....................................................................................................... 238
Sprawdzanie, czy dany plik istnieje, za pomoc funkcji file_exists() .................... 238
Plik czy katalog? ..................................................................................................... 238
Sprawdzanie uprawnie pliku ................................................................................. 238
Sprawdzanie rozmiaru pliku za pomoc funkcji filesize() ...................................... 239
Pobieranie informacji o datach zwizanych z plikiem ............................................ 239
Funkcja wywietlajca informacje o pliku .............................................................. 240
Tworzenie i usuwanie plikw ........................................................................................ 242
Otwieranie plikw do zapisu, odczytu i dopisywania ................................................... 242
Odczytywanie danych z pliku ........................................................................................ 243
Odczytywanie wierszy za pomoc funkcji fgets() i feof() ...................................... 243
Odczytywanie okrelonej iloci danych za pomoc funkcji fread() ....................... 245
Odczytywanie kolejnych znakw za pomoc funkcji fgetc() ................................. 247
Zapisywanie i dopisywanie danych do pliku ................................................................. 247
Zapisywanie danych do pliku za pomoc funkcji fwrite() i fputs() ........................ 248
Blokowanie plikw za pomoc funkcji flock() ....................................................... 249
Operacje na katalogach .................................................................................................. 250
Tworzenie katalogw za pomoc funkcji mkdir() .................................................. 250
Usuwanie katalogu za pomoc rmdir() ................................................................... 250
Otwieranie katalogu za pomoc funkcji opendir() .................................................. 251
Odczytywanie zawartoci katalogu za pomoc funkcji readdir() ........................... 251
Otwieranie potokw do i z procesw za pomoc funkcji popen() ................................ 253
Uruchamianie polece za pomoc funkcji exec() .......................................................... 255
Uruchamianie polece funkcjami system() i passthru() ................................................ 256
Podsumowanie ............................................................................................................... 258
Pytania i odpowiedzi ..................................................................................................... 259
Warsztaty ....................................................................................................................... 259
Test .......................................................................................................................... 259
Odpowiedzi ............................................................................................................. 260
wiczenia ................................................................................................................ 260

Spis treci

Rozdzia 14. Obrazki ........................................................................................ 261


Proces powstawania obrazka ......................................................................................... 261
Kilka sw o kolorze ............................................................................................... 261
Konieczne zmiany w PHP ............................................................................................. 262
Pobieranie dodatkowych bibliotek .......................................................................... 262
Rysowanie nowego obrazka .......................................................................................... 263
Rysowanie ksztatw i linii ..................................................................................... 263
Wypenianie ksztatw kolorem .............................................................................. 265
Rysowanie wykresw .................................................................................................... 266
Modyfikacja istniejcych obrazkw .............................................................................. 270
Tworzenie obrazkw na podstawie danych przesanych przez uytkownika ............... 273
Podsumowanie ............................................................................................................... 276
Pytania i odpowiedzi ..................................................................................................... 277
Warsztaty ....................................................................................................................... 277
Test .......................................................................................................................... 278
Odpowiedzi ............................................................................................................. 278
wiczenie ................................................................................................................ 278

Cz IV Integracja PHP i MySQL ............................................. 279


Rozdzia 15. Tajniki procesu projektowania bazy danych ................................... 281
Rola dobrego projektu bazy danych .............................................................................. 281
Typy relacji midzy tabelami ........................................................................................ 282
Relacje jeden do jednego ......................................................................................... 283
Relacje jeden do wielu ............................................................................................ 283
Relacje wiele do wielu ............................................................................................ 284
Normalizacja .................................................................................................................. 285
Problemy z tabel prost ......................................................................................... 286
Pierwsza posta normalna ....................................................................................... 286
Druga posta normalna ............................................................................................ 287
Trzecia posta normalna .......................................................................................... 287
Postpowanie zgodnie z procesem projektowania ........................................................ 288
Podsumowanie ............................................................................................................... 289
Pytania i odpowiedzi ..................................................................................................... 290
Warsztaty ....................................................................................................................... 290
Test .......................................................................................................................... 290
Odpowiedzi ............................................................................................................. 290
wiczenie ................................................................................................................ 290

Rozdzia 16. Podstawowe polecenia SQL .......................................................... 291


Typy danych w MySQL ................................................................................................ 292
Liczbowe typy danych ............................................................................................ 292
Typy czasu i daty ..................................................................................................... 293
Typy acuchowe .................................................................................................... 294
Skadnia tworzenia tabel ................................................................................................ 295
Uywanie polecenia INSERT ........................................................................................ 296
Blisze spojrzenie na INSERT ................................................................................ 296
Stosowanie polecenia SELECT ..................................................................................... 298
Porzdkowanie wynikw zwracanych przez SELECT ........................................... 299
Ograniczanie wynikw ............................................................................................ 300
Uywanie WHERE w zapytaniach ................................................................................ 300
Stosowanie operatorw w klauzuli WHERE .......................................................... 301
Porwnywanie acuchw za pomoc LIKE .......................................................... 302

10

PHP, MySQL i Apache dla kadego


Selekcja z kilku tabel ..................................................................................................... 302
Uywanie JOIN ....................................................................................................... 304
Stosowanie podselekcji ........................................................................................... 306
Modyfikowanie rekordw za pomoc polecenia UPDATE .......................................... 307
Warunkowe instrukcje UPDATE ............................................................................ 309
Stosowanie biecych wartoci kolumn z UPDATE .............................................. 309
Uywanie polecenia REPLACE .................................................................................... 310
Stosowanie polecenia DELETE .................................................................................... 311
Warunkowa instrukcja DELETE ............................................................................ 312
Czsto stosowane funkcje MySQL operujce na cigach tekstowych .......................... 313
Funkcje dugoci i konkatenacji .............................................................................. 314
Funkcje przycinajce i dopeniajce ....................................................................... 316
Funkcje lokalizacji i pozycji ................................................................................... 317
Funkcje operujce na podcigach ........................................................................... 318
Funkcje modyfikujce cigi .................................................................................... 319
Korzystanie z funkcji daty i czasu w MySQL ............................................................... 320
Operowanie na dniach ............................................................................................. 320
Operowanie na miesicach i latach ......................................................................... 323
Operowanie na tygodniach ...................................................................................... 324
Operowanie na godzinach, minutach i sekundach .................................................. 325
Formatowanie daty i czasu w MySQL .................................................................... 326
Dziaania arytmetyczne na datach w MySQL ......................................................... 328
Funkcje specjalne i moliwoci w zakresie konwersji ............................................ 330
Podsumowanie ............................................................................................................... 332
Pytania i odpowiedzi ..................................................................................................... 333
Warsztaty ....................................................................................................................... 334
Test .......................................................................................................................... 334
Odpowiedzi ............................................................................................................. 335
wiczenie ................................................................................................................ 335

Rozdzia 17. Transakcje i procedury skadowane w MySQL ................................ 337


Czym s transakcje? ...................................................................................................... 337
Podstawowe elementy skadni ................................................................................ 338
Praktyczny przykad zastosowania transakcji ......................................................... 339
Czym s procedury skadowane? .................................................................................. 341
Podstawowa skadnia procedur skadowanych ....................................................... 341
Podsumowanie ............................................................................................................... 343
Warsztaty ....................................................................................................................... 343
Test .......................................................................................................................... 343
Odpowiedzi ............................................................................................................. 343

Rozdzia 18. Interakcja z MySQL z poziomu PHP ............................................... 345


Funkcje MySQL a funkcje MySQLi ............................................................................. 345
czenie si z MySQL poprzez PHP ............................................................................ 345
Nawizywanie poczenia ....................................................................................... 346
Wykonywanie zapyta ............................................................................................ 347
Odbieranie komunikatw o bdach ........................................................................ 348
Operowanie na danych z bazy MySQL ......................................................................... 349
Wstawianie danych z poziomu PHP ....................................................................... 349
Pobieranie danych z bazy w PHP ............................................................................ 353
Pozostae funkcje MySQL w PHP .......................................................................... 354
Podsumowanie ............................................................................................................... 355
Warsztaty ....................................................................................................................... 355
Test .......................................................................................................................... 356
Odpowiedzi ............................................................................................................. 356

Spis treci

11

Cz V

Proste projekty .......................................................... 357

Rozdzia 19. Zarzdzanie prost list mailingow ............................................. 359


Opracowywanie mechanizmu subskrypcji .................................................................... 359
Tworzenie tabeli subskrybentw ............................................................................. 360
Tworzenie formularza subskrypcji .......................................................................... 360
Budowa mechanizmu mailingu ..................................................................................... 367
Podsumowanie ............................................................................................................... 371
Pytania i odpowiedzi ..................................................................................................... 371
Warsztaty ....................................................................................................................... 372
Test .......................................................................................................................... 372
Odpowiedzi ............................................................................................................. 372

Rozdzia 20. Tworzenie internetowej ksiki adresowej ..................................... 373


Planowanie i tworzenie tabel w bazie danych ............................................................... 373
Tworzenie menu ............................................................................................................ 376
Tworzenie mechanizmu dodawania rekordw .............................................................. 376
Przegldanie rekordw .................................................................................................. 381
Tworzenie mechanizmu usuwania rekordw ................................................................ 389
Uzupenianie istniejcych rekordw ............................................................................. 391
Podsumowanie ............................................................................................................... 396
Warsztaty ....................................................................................................................... 396
Test .......................................................................................................................... 397
Odpowiedzi ............................................................................................................. 397
wiczenia ................................................................................................................ 398

Rozdzia 21. Tworzenie prostego forum dyskusyjnego ....................................... 399


Projektowanie tabel w bazie danych ............................................................................. 399
Tworzenie formularzy wprowadzania danych i skryptw ............................................ 400
Wywietlanie listy tematw ........................................................................................... 404
Wywietlanie postw w temacie ................................................................................... 407
Dodawanie postu w wybranym temacie ........................................................................ 412
Podsumowanie ............................................................................................................... 415
Pytania i odpowiedzi ..................................................................................................... 415
Warsztaty ....................................................................................................................... 416
Test .......................................................................................................................... 416
Odpowiedzi ............................................................................................................. 416
wiczenie ................................................................................................................ 416

Rozdzia 22. Tworzenie witryny sklepu internetowego ....................................... 417


Planowanie i tworzenie tabel w bazie danych ............................................................... 417
Wstawianie rekordw do tabeli sklep_kategorie .................................................... 419
Wstawianie rekordw do tabeli sklep_artykuly ...................................................... 420
Wstawianie rekordw do tabeli sklep_art_rozmiar ................................................. 420
Wstawianie rekordw do tabeli sklep_art_kolor ..................................................... 421
Wywietlanie kategorii artykuw ................................................................................. 421
Wywietlanie artykuw ................................................................................................ 424
Podsumowanie ............................................................................................................... 427
Warsztaty ....................................................................................................................... 428
Test .......................................................................................................................... 428
Odpowiedzi ............................................................................................................. 428

12

PHP, MySQL i Apache dla kadego

Rozdzia 23. Tworzenie mechanizmu koszyka z zakupami .................................. 429


Planowanie i tworzenie tabel ......................................................................................... 429
Integracja koszyka z witryn sklepow ......................................................................... 431
Dodawanie artykuw do koszyka .......................................................................... 434
Przegldanie zawartoci koszyka ............................................................................ 436
Usuwanie artykuw z koszyka ............................................................................... 438
Sposoby dokonywania patnoci i sekwencja kasowa ................................................... 439
Tworzenie formularza kasowego ............................................................................ 440
Realizowanie czynnoci kasowych ......................................................................... 440
Podsumowanie ............................................................................................................... 441
Warsztaty ....................................................................................................................... 441
Test .......................................................................................................................... 442
Odpowiedzi ............................................................................................................. 442

Rozdzia 24. Tworzenie prostego kalendarza ..................................................... 443


Tworzenie prostego kalendarza wywietlanego na ekranie .......................................... 443
Sprawdzenie danych przesanych przez uytkownika ............................................ 444
Tworzenie formularza HTML ................................................................................. 445
Tworzenie tabeli kalendarza .................................................................................... 446
Dodawanie terminw do kalendarza ....................................................................... 450
Tworzenie biblioteki kalendarza ................................................................................... 458
Podsumowanie ............................................................................................................... 463
Pytania i odpowiedzi ..................................................................................................... 464
Warsztaty ....................................................................................................................... 464
Test .......................................................................................................................... 464
Odpowiedzi ............................................................................................................. 464
wiczenie ................................................................................................................ 464

Rozdzia 25. Ograniczanie dostpu do aplikacji ................................................. 465


Istota uwierzytelniania ................................................................................................... 465
Uwierzytelnianie klienta ......................................................................................... 466
Moliwoci funkcjonalne moduu uwierzytelniajcego serwera Apache ..................... 467
Uwierzytelnianie bazujce na plikach ..................................................................... 468
Kontrola dostpu bazujca na pliku bazy danych ................................................... 470
Apache jako narzdzie kontroli dostpu ......................................................................... 471
Wprowadzanie regu dostpu .................................................................................. 471
Interpretacja regu dostpu ...................................................................................... 473
Wizane zastosowanie metod kontroli dostpu ............................................................. 474
Ograniczenie dostpu na podstawie metod HTTP ........................................................ 475
Ograniczenie dostpu na podstawie wartoci cookies ................................................... 476
Tworzenie tabeli uprawnionych uytkownikw ..................................................... 476
Tworzenie formularza logowania i skryptu ............................................................ 477
Sprawdzanie cookie uwierzytelniajcego ............................................................... 479
Podsumowanie ............................................................................................................... 481
Pytania i odpowiedzi ..................................................................................................... 481
Warsztaty ....................................................................................................................... 482
Test .......................................................................................................................... 482
Odpowiedzi ............................................................................................................. 482
wiczenie ................................................................................................................ 483

Rozdzia 26. Monitorowanie i prowadzenie dziennikw aktywnoci serwera ....... 485


Standardowe odnotowywanie dostpu do serwera ........................................................ 485
Ustalanie treci dziennikw .................................................................................... 486
Odnotowywanie dostpw w plikach ..................................................................... 489
Odnotowywanie dostpw w programie ................................................................. 490

Spis treci

13
Standardowy tryb odnotowywania bdw serwera Apache ......................................... 491
Odnotowywanie bdw w pliku ............................................................................. 491
Odnotowywanie bdw w programie .................................................................... 491
Demon syslog jako argument .................................................................................. 491
Dyrektywa LogLevel ............................................................................................... 492
Zarzdzanie dziennikami serwera Apache .................................................................... 492
Ustalanie nazw hostw ............................................................................................ 493
Rotacja dziennikw ................................................................................................. 493
czenie i podzia dziennikw ................................................................................ 494
Analiza dziennikw ................................................................................................. 494
Monitorowanie dziennikw bdw ........................................................................ 494
Odnotowywanie informacji w bazie danych ................................................................. 495
Tworzenie tabeli w bazie danych ............................................................................ 495
Tworzenie skryptu PHP odnotowujcego dane ...................................................... 495
Tworzenie przykadowych raportw ....................................................................... 496
Podsumowanie ............................................................................................................... 499
Pytania i odpowiedzi ..................................................................................................... 500
Warsztaty ....................................................................................................................... 500
Test .......................................................................................................................... 500
Odpowiedzi ............................................................................................................. 500

Rozdzia 27. Lokalizacja aplikacji ..................................................................... 501


Internacjonalizacja i lokalizacja .................................................................................... 501
Zestawy znakw ............................................................................................................ 502
Modyfikacje rodowiska ................................................................................................ 503
Zmiany w konfiguracji serwera Apache ................................................................. 503
Zmiany w konfiguracji PHP .................................................................................... 504
Zmiany w konfiguracji MySQL .............................................................................. 504
Tworzenie zlokalizowanej struktury strony .................................................................. 505
Podsumowanie ............................................................................................................... 510
Pytania i odpowiedzi ..................................................................................................... 511
Warsztaty ....................................................................................................................... 511
Test .......................................................................................................................... 511

Rozdzia 28. Korzystanie z XML ........................................................................ 513


Co to jest XML? ............................................................................................................ 513
Podstawowa struktura dokumentu XML ................................................................. 513
Dostp do dokumentw XML z poziomu PHP za pomoc funkcji modelu DOM ....... 515
Dostp do danych XML z poziomu PHP za pomoc funkcji SimpleXML ................... 517
Podsumowanie ............................................................................................................... 520
Warsztaty ....................................................................................................................... 521
Test .......................................................................................................................... 521
Odpowiedzi ............................................................................................................. 521

Cz VI Administrowanie i dostrajanie ..................................... 523


Rozdzia 29. Poprawianie wydajnoci i wirtualny hosting na serwerze Apache .... 525
Kwestie skalowalnoci .................................................................................................. 526
Ograniczenia systemu operacyjnego ....................................................................... 526
Ustawienia serwera Apache zwizane z wydajnoci ............................................. 528
Testowanie serwera pod obcieniem przy uyciu ApacheBench ................................ 529
Aktywne dostrajanie wydajnoci ................................................................................... 531
Odwzorowywanie plikw w pamici ...................................................................... 531
Rozkad obcienia ................................................................................................. 532

14

PHP, MySQL i Apache dla kadego


Buforowanie ............................................................................................................ 532
Redukcja iloci transmitowanych danych ............................................................... 532
Ustawienia sieci ....................................................................................................... 533
Zapobieganie naduyciom ............................................................................................. 533
Roboty ..................................................................................................................... 533
Implementacja wirtualnego hostingu ............................................................................. 534
Wirtualny hosting bazujcy na adresach IP ............................................................ 535
Wirtualny hosting bazujcy na nazwach ................................................................. 535
Masowy hosting wirtualny ...................................................................................... 537
Podsumowanie ............................................................................................................... 538
Pytania i odpowiedzi ..................................................................................................... 539
Warsztaty ....................................................................................................................... 540
Test .......................................................................................................................... 540
Odpowiedzi ............................................................................................................. 540

Rozdzia 30. Bezpieczny serwer WWW .............................................................. 541


Potrzeba bezpieczestwa ............................................................................................... 541
Protok SSL .................................................................................................................. 542
Rozwizanie kwestii poufnoci ............................................................................... 542
Rozwizanie kwestii nienaruszalnoci .................................................................... 544
Rozwizanie kwestii uwierzytelniania .................................................................... 544
Uzyskiwanie i instalacja narzdzi SSL .......................................................................... 547
OpenSSL ................................................................................................................. 547
Modu mod_ssl serwera Apache ............................................................................. 548
Zarzdzanie certyfikatami ............................................................................................. 549
Tworzenie pary kluczy ............................................................................................ 550
Tworzenie proby o podpisanie certyfikatu ............................................................ 551
Tworzenie certyfikatu podpisanego przez nas samych ........................................... 552
Konfiguracja SSL .......................................................................................................... 552
Uruchamianie serwera ............................................................................................. 553
Podsumowanie ............................................................................................................... 553
Pytania i odpowiedzi ..................................................................................................... 553
Warsztaty ....................................................................................................................... 554
Test .......................................................................................................................... 554
Odpowiedzi ............................................................................................................. 554

Rozdzia 31. Optymalizacja i dostrajanie MySQL ............................................... 555


Tworzenie zoptymalizowanej platformy ....................................................................... 556
Stosowanie funkcji benchmark() ............................................................................. 556
Opcje inicjalizacyjne MySQL ....................................................................................... 557
Kluczowe parametry startowe ................................................................................. 558
Optymalizacja struktury tabel ........................................................................................ 559
Optymalizacja zapyta .................................................................................................. 560
Korzystanie z polecenia FLUSH ................................................................................... 561
Korzystanie z polecenia SHOW .................................................................................... 562
Pobieranie informacji o bazach danych i tabelach .................................................. 563
Pobieranie informacji o strukturze tabel ................................................................. 564
Pobieranie statusu systemu ...................................................................................... 565
Podsumowanie ............................................................................................................... 567
Pytania i odpowiedzi ..................................................................................................... 568
Warsztaty ....................................................................................................................... 568
Test .......................................................................................................................... 568
Odpowiedzi ............................................................................................................. 569
wiczenia ................................................................................................................ 569

Spis treci

15

Rozdzia 32. Aktualizacja oprogramowania ....................................................... 571


Trzymanie rki na pulsie ............................................................................................... 571
Kiedy aktualizowa? ............................................................................................... 572
Aktualizacja MySQL ..................................................................................................... 573
Aktualizacja Apache ...................................................................................................... 573
Modyfikowanie Apache bez dokonywania aktualizacji .......................................... 574
Aktualizacja PHP ........................................................................................................... 575
Rozszerzanie PHP za pomoc PECL i PEAR ......................................................... 575
Podsumowanie ............................................................................................................... 575
Warsztaty ....................................................................................................................... 576
Test .......................................................................................................................... 576
Odpowiedzi ............................................................................................................. 576

Skorowidz .................................................................................... 577

Rozdzia 15. Tajniki procesu projektowania bazy danych

281

Rozdzia 15.

W tym rozdziale poznamy tok rozumowania prowadzcy do stworzenia relacyjnej bazy


danych. Po tym skoncentrowanym na teorii rozdziale od razu zagbimy si w nauk
podstawowych polece MySQL w ramach przygotowa do zintegrowania bazy MySQL
z naszymi aplikacjami.
Zagadnienia omwione w tym rozdziale to:
Niektre zalety dobrego projektu bazy danych
Trzy typy relacji midzy tabelami
Jak znormalizowa baz danych
Jak wdroy proces waciwego projektowania baz danych

Rola dobrego projektu bazy danych


Dobry projekt bazy danych jest kluczowym skadnikiem wydajnej aplikacji, tak jak
opywowa karoseria jest wan czci samochodu wycigowego. Jeeli samochd
nie ma opywowych ksztatw, bdzie stawia opr i wolniej jecha. Jeeli nie zoptymalizujemy relacji, nasza baza nie bdzie dziaa tak wydajnie, jak by moga. Mylenie
o relacjach i wydajnoci bazy jest elementem normalizacji.
Normalizacja to proces tworzenia takiej struktury danych, w ktrej zminimalizowano
powtarzanie i niespjnoci.

Cz IV Integracja PHP i MySQL

282

Poza wydajnoci istnieje jeszcze kwestia utrzymania nasza baza powinna by atwa
w utrzymaniu. Sprowadza si to do przechowywania jak najmniejszej iloci powtarzanych danych (albo cakowitej eliminacji powtrze). Jeeli mamy duo powtarzajcych si danych i nagle zachodzi zmiana w jednym z wystpie takich danych
(na przykad zmiana nazwiska), to trzeba zmieni wszystkie wystpienia tej danej. Aby
wyeliminowa powtarzanie i uatwi utrzymanie danych, mona stworzy tabel moliwych wartoci i odnosi si do tych wartoci poprzez klucz. W ten sposb, jeeli warto ulegnie zmianie, to zmian t wystarczy wprowadzi tylko raz w gwnej tabeli.
Odwoania wystpujce w innych tabelach pozostaj bez zmian.
Przypumy, e jestemy odpowiedzialni za utrzymanie bazy danych studentw oraz
przedmiotw, na ktre si zapisali. Jeeli 35 studentw zapisao si na ten sam przedmiot,
niech to bdzie wysza matematyka, to nazwa tego przedmiotu wystpi w tabeli
35 razy. Jeeli wykadowca stwierdzi, e trzeba zmieni nazw przedmiotu na matematyka zaawansowana, to musimy wprowadzi zmiany w 35 rekordach. Gdyby baza
zbudowana zostaa tak, e nazwy przedmiotw wystpowayby w jednej tabeli, a w rekordach studentw wystpowaby tylko identyfikator przedmiotu, to aby zmieni nazw
przedmiotu, wystarczyoby dokona modyfikacji w jednym rekordzie, a nie w 35.
Korzyci z posiadania dobrze zaplanowanej i zaprojektowanej bazy danych s niezliczone. Im wicej pracy woymy w baz na pocztku, tym mniej bdziemy mieli do
zrobienia pniej. Przeprojektowywanie bazy danych po publicznym wdroeniu aplikacji nie jest zbyt dobrym pomysem (chocia to si zdarza), a rezultaty s kosztowne.
Tak wic zanim w ogle zabierzemy si do pisania kodu aplikacji, powimy stosowny
czas na zaprojektowanie bazy danych. Reszta tego rozdziau powicona jest relacjom
i normalizacji dwm wanym elementom bazodanowej ukadanki.

Typy relacji midzy tabelami


Relacje midzy tabelami mona podzieli na:
Relacje jeden do jednego
Relacje jeden do wielu
Relacje wiele do wielu

Przypumy, e mamy tabel o nazwie pracownicy, ktra zawiera numer PESEL kadej
osoby, jej nazwisko oraz wydzia, w ktrym pracuje. Powiedzmy, e mamy te odrbn
tabel zwan wydzialy, ktra zawiera list wszystkich wydziaw skadajc si z identyfikatora wydziau i jego nazwy. Pole zawierajce identyfikator wydziau w tabeli
pracownicy odpowiada identyfikatorowi z tabeli wydzialy. Tego rodzaju relacj przedstawia rysunek 15.1. Oznaczenie KG tu przy nazwie pola oznacza klucz gwny.
W kolejnych punktach opisano dokadniej kady z typw relacji.

Rozdzia 15. Tajniki procesu projektowania bazy danych

283

Rysunek 15.1.
Tabele
pracownicy
i wydzialy
powizane poprzez
klucz IDwydzialu

Relacje jeden do jednego


W relacji jeden do jednego klucz pojawia si tylko raz w powizanej tabeli. Tabel
pracownicy i wydzialy nie czy relacja jeden do jednego, poniewa do jednego wydziau niewtpliwie naley wielu pracownikw. Relacja jeden do jednego istnieje na przykad wtedy, gdy kademu pracownikowi jest przypisany jeden komputer. Tak relacj
pokazuje rysunek 15.2.
Rysunek 15.2.
Kademu
pracownikowi
przypisany jest
jeden komputer

Tabele pracownicy i komputery w naszej bazie wygldayby tak, jak przedstawia to rysunek 15.3, ktry reprezentuje relacj jeden do jednego.
Rysunek 15.3.
Relacja jeden
do jednego
w modelu danych

Relacje jeden do wielu


W relacji jeden do wielu klucze z jednej tabeli wystpuj wielokrotnie w tabeli powizanej. Relacj jeden do wielu ilustruje przykad z rysunku 15.1, gdzie powizani s
pracownicy z wydziaami. Praktycznym przykadem takiej relacji jest struktura organizacyjna wydziaw (rysunek 15.4).

Cz IV Integracja PHP i MySQL

284
Rysunek 15.4.
Jeden wydzia
zawiera wielu
pracownikw

Relacja jeden do wielu jest relacj najczciej wystpujc. Innym praktycznym przykadem jest zastosowanie skrtw nazw krajw. Kady kraj na wiecie ma swj niepowtarzalny identyfikator (Polska ma PL, Irlandia IE itd.).
Jeeli mamy omiu klientw w Polsce i piciu w Irlandii, to w tabeli uyjemy jedynie dwch rnych skrtw. Jeden skrt (PL) reprezentuje relacj jeden do omiu,
a drugi (IE), relacj jeden do piciu.

Relacje wiele do wielu


Relacje wiele do wielu czsto s przyczyn problemw w praktycznych przykadach
znormalizowanych baz danych powszechne jest rozbijanie relacji wiele do wielu
na kilka relacji jeden do wielu. W relacjach wiele do wielu warto klucza z jednej
tabeli moe wystpowa wielokrotnie w powizanej tabeli. Na razie brzmi to jak opis
relacji jeden do wielu. Sk w tym, e dziaa to w obie strony, co oznacza, e klucz
gwny z drugiej tabeli moe rwnie wielokrotnie wystpowa w pierwszej tabeli.
Relacj tego typu sprbujemy wyjani, posugujc si wczeniejszym przykadem ze
studentami i przedmiotami. Student ma identyfikator i nazwisko. Przedmiot ma identyfikator i nazw. Student zwykle zapisuje si na wicej ni jeden przedmiot, a na dany
przedmiot jest zapisanych wicej studentw ni jeden, co wida na rysunku 15.5.
Rysunek 15.5.
Student zapisuje si
na przedmioty,
a na przedmiot
zapisani s studenci

Jak wida, tego rodzaju relacja nie jest atw metod kojarzenia tabel. Nasze tabele
wygldaj tak jak na rysunku 15.6 na pozr nie s ze sob w relacji.
Rysunek 15.6.
Tabela studentw
i tabela
przedmiotw,
niepowizane
z sob

Aby stworzy teoretyczn relacj wiele do wielu, konieczne byoby stworzenie tabeli
przejciowej, ktra stanowi pomost midzy dwiema tabelami i opisuje ich wzajemne
odwzorowania. Moe ona wyglda tak jak na rysunku 15.7.

Rozdzia 15. Tajniki procesu projektowania bazy danych

285

Rysunek 15.7.
Tabela studenci_
przedmioty_odwz
suy jako element
poredniczcy

Jeeli wykorzystamy informacje z rysunku 15.5 i wstawimy je do tabeli przejciowej,


otrzymamy tabel widoczn na rysunku 15.8.
Rysunek 15.8.
Tabela studenci_
przedmioty_odwz
wypeniona danymi

Jak wida, wielu studentw i wiele przedmiotw moe z powodzeniem wspistnie


z sob w tabeli studenci_przedmioty_odwz.
Po takim wprowadzeniu do typw relacji normalizacja powinna by bahostk.

Normalizacja
Normalizacja jest po prostu zbiorem regu, ktre ostatecznie maj uatwi nam ycie,
jeeli penimy funkcj administratora bazy. Jest to sztuka organizacji bazy danych
w taki sposb, by tabele byy powizane tam, gdzie jest to stosowne, i by bya moliwo ich atwej rozbudowy.
Zbiory regu stosowane w normalizacji s nazywane postaciami normalnymi. Jeeli nasz
projekt bazy jest zgodny z pierwszym zbiorem regu, jest uwaany za pierwsz posta
normaln bazy. Jeeli nasz projekt jest zgodny z pierwszymi trzema zbiorami regu
normalizacyjnych, to baz moemy uzna za trzeci posta normaln.
W tym rozdziale poznamy wszystkie reguy pierwszej, drugiej i trzeciej postaci normalnej,
aby mc si ich trzyma przy tworzeniu wasnych aplikacji. Zastosujemy przykadowy
zbir tabel z bazy studentw i przedmiotw i doprowadzimy go do trzeciej postaci
normalnej.

Cz IV Integracja PHP i MySQL

286

Problemy z tabel prost


Zanim przejdziemy do pierwszej postaci normalnej, musimy wyj od czego, co mona
podda normalizacji. W przypadku baz danych jest to tabela prosta. Tabela prosta jest
jak arkusz kalkulacyjny ma nieokrelon liczb kolumn. Nie istniej relacje midzy
odrbnymi tabelami wszystkie potrzebne dane zostay zgromadzone w jednej duej
tabeli. Takie rozwizanie jest nieefektywne i zajmuje wicej miejsca na dysku ni baza
znormalizowana.
Przyjmijmy, e w bazie studentw i przedmiotw wystpuj nastpujce pola:
NazwiskoStudenta imi i nazwisko studenta.
IDprzedmiotu1 identyfikator pierwszego przedmiotu wybranego

przez studenta.
OpisPrzedmiotu1 opis pierwszego przedmiotu wybranego przez studenta.
WykladowcaPrzedmiotu1 wykadowca pierwszego przedmiotu wybranego

przez studenta.
IDprzedmiotu2 identyfikator drugiego przedmiotu wybranego przez studenta.
OpisPrzedmiotu2 opis drugiego przedmiotu wybranego przez studenta.
WykladowcaPrzedmiotu2 wykadowca drugiego przedmiotu wybranego

przez studenta.
Kolumny IDPrzedmiotu, OpisPrzedmiotu i WykladowcaPrzedmiotu powtarzaj si

wielokrotnie, a ujte zostan wszystkie przedmioty wybrane przez studenta


w trakcie jego studiw.
Wiedzc to, co ju wiemy, powinnimy by w stanie zidentyfikowa pierwszy obszar
problemw: kolumny IDPrzedmiotu, OpisPrzedmiotu i WykladowcaPrzedmiotu to powtarzajce si grupy.
Eliminacja powtrze to pierwszy krok normalizacji, wic za chwil doprowadzimy
nasz tabel do pierwszej postaci normalnej. Gdyby tabela pozostaa w swojej paskiej postaci, otrzymalibymy wiele pustej przestrzeni i wiele przestrzeni zajtej niepotrzebnie nie jest to efektywna struktura tabel.

Pierwsza posta normalna


Reguy pierwszej postaci normalnej s nastpujce:
Wyeliminowa powtarzajce si informacje.
Stworzy odrbne tabele dla powizanych z sob danych.

Zastanwmy si nad struktur tabeli prostej z wieloma powtrzonymi grupami kolumn


z bazy danych studentw i przedmiotw; moe w niej zidentyfikowa dwa odrbne tematy: studenci i zajcia? Doprowadzenie naszej bazy do pierwszej postaci normalnej
wymagaoby stworzenia dwch tabel: jednej dla studentw, a drugiej dla przedmiotw,
co wida na rysunku 15.9.

Rozdzia 15. Tajniki procesu projektowania bazy danych

287

Rysunek 15.9.
Podzia
tabeli prostej
na dwie tabele

Dwie otrzymane tabele reprezentuj teraz relacj jeden do wielu jednego studenta z wieloma przedmiotami. Studenci mog wybiera tyle przedmiotw, ile chc, i nie s ograniczeni liczb grup kolumn IDPrzedmiotu, OpisPrzedmiotu i WykladowcaPrzedmiotu
wystpujcych w tabeli prostej.
Nastpny krok to doprowadzenie tabel do drugiej postaci normalnej.

Druga posta normalna


Zasada drugiej postaci normalnej brzmi tak:
aden atrybut niebdcy kluczem nie zaley od czci klucza gwnego.

Mwic prociej oznacza to, e jeeli pola naszej tabeli nie s w caoci powizane
z kluczem gwnym, to mamy jeszcze co do zrobienia. W przykadzie ze studentami
i przedmiotami musimy zebra przedmioty w oddzielnej tabeli i zmodyfikowa tabel
studenci_przedmioty.
Kolumny IDPrzedmiotu, OpisPrzedmiotu i WykladowcaPrzedmiotu mog sta si tabel
zwan przedmioty z kolumn IDprzedmiotu w roli klucza gwnego. Tabela studenci_
przedmioty powinna wwczas zawiera tylko dwa pola: IDStudenta i IDPrzedmiotu.
Now struktur przedstawiono na rysunku 15.10.
Rysunek 15.10.
Doprowadzenie
tabel do drugiej
postaci normalnej

Struktura ta powinna wyglda znajomo, jako relacja wiele do wielu z zastosowaniem


poredniczcej tabeli odwzorowujcej. Trzecia posta normalna to ostatnia posta, jaka
nas interesuje. Jak si zaraz okae, zasada ni rzdzca jest rwnie prosta, jak w przypadku pierwszych dwch postaci.

Trzecia posta normalna


Zasada trzeciej postaci normalnej brzmi:
aden atrybut nie zaley od innych atrybutw, ktre nie s kluczami.

Cz IV Integracja PHP i MySQL

288

Regua ta oznacza po prostu, e musimy przyjrze si naszym tabelom i sprawdzi,


czy istniej jeszcze jakie pola, ktre mona rozbi i ktre nie bd zalene od klucza.
Szukajmy powtarzajcych si danych, a szybko znajdziemy odpowied wykadowcy. Jeden wykadowca z pewnoci bdzie wykada wicej ni jeden przedmiot.
Jednake WykladowcaPrzedmiotu nie jest kluczem adnego typu. Jeeli wic rozbijemy
te dane i stworzymy odrbn tabel tylko po to, by zwikszy efektywno i uatwi
utrzymanie bazy, to otrzymamy trzeci posta normaln (rysunek 15.11).

Rysunek 15.11. Doprowadzanie tabel do trzeciej postaci normalnej

Trzecia posta normalna zwykle wystarczy, by usun powtrzenia i zapewni elastyczno oraz atwo rozbudowy. W nastpnym podrozdziale otrzymamy kilka wskazwek
co do procesu mylowego prowadzcego do zaprojektowania struktury bazy oraz jego
powizania z procesem tworzenia caej aplikacji.

Postpowanie zgodnie
z procesem projektowania
Najwikszym problemem przy projektowaniu aplikacji jest brak jej wczeniejszego
przemylenia. W odniesieniu do aplikacji bazodanowych proces projektowania musi
uwzgldnia wnikliw analiz bazy danych co powinna przechowywa, jakie relacje
wystpuj midzy danymi i, co najwaniejsze, czy jest skalowalna.
Oglne kroki procesu projektowania to:
Definiowanie celw.
Projektowanie struktur danych (tabele, pola).
Rozpoznanie relacji.
Zdefiniowanie i implementacja regu obszaru zastosowania.
Stworzenie aplikacji.

Tworzenie aplikacji jest krokiem ostatnim, a nie pierwszym! Wielu programistw wymyla aplikacj, po czym pisze j, a nastpnie prbuje wpasowa w ni zbir pl bazy
danych. Takie podejcie to zaczynanie od koca, jest nieefektywne i bdzie nas kosztowa czas oraz pienidze.

Rozdzia 15. Tajniki procesu projektowania bazy danych

289

Zanim zaczniemy jakikolwiek proces projektowania aplikacji, warto usi i go przedyskutowa. Jeeli nie potrafimy opisa tworzonej aplikacji pod ktem celw, odbiorcw i rynku docelowego, to znaczy, e nie jestemy gotowi do jej budowy, nie mwic
ju o modelowaniu bazy danych.
Po opisaniu innym, co bdzie robi nasza aplikacja, i uzyskaniu ich aprobaty moemy
zacz myle o tabelach, jakie chcemy stworzy. Zacznijmy od wielkich tabel prostych, poniewa kiedy ju je narysujemy, bdziemy mogli zastosowa wanie zdobyte umiejtnoci normalizacyjne. W ten sposb znajdziemy powtrzenia i zwizualizujemy relacje.
Nastpnym krokiem jest normalizacja. Przejdmy od tabeli prostej do pierwszej postaci
normalnej, i po kolei a do trzeciej, jeeli to moliwe. Posugujmy si kartkami papieru, owkiem, fiszkami samoprzylepnymi i czymkolwiek, co pomoe zwizualizowa
tabele i relacje midzy nimi. To aden wstyd modelowa dane z pomoc fiszek, zanim bdziemy gotowi do stworzenia samych tabel. Poza tym jest to o wiele tasze ni
kupowanie oprogramowania, ktre zrobi to za nas. Programy modelujce kosztuj od
piciuset do kilku tysicy zotych!
Kiedy ju mamy wstpny model danych, spjrzmy na niego z perspektywy aplikacji.
Albo spjrzmy na niego z perspektywy osoby, ktra bdzie z aplikacji korzysta. W tym
miejscu definiujemy reguy obszaru zastosowania i sprawdzamy, czy nasz model si
sprawdza. Przykadem takiej reguy dla aplikacji rejestracji internetowej moe by kady
uytkownik musi mie jeden adres e-mail, ktry nie moe nalee do adnego innego
uytkownika. Jeeli pole AdresEmail nie byo polem z niepowtarzalnymi wartociami
w naszym modelu, znaczy to, e model nie spenia regu obszaru zastosowania.
Dopiero po zastosowaniu wszystkich regu obszaru zastosowania na naszym modelu
danych moe si rozpocz programowanie aplikacji. Moemy by spokojni o to, e
nasz model danych jest spjny i e programujc, nie zamalujemy si w kcie pokoju.
A to zdarza si do czsto.

Podsumowanie
Trzymanie si prawidowego procesu projektowania bazy danych to jedyny sposb na
stworzenie efektywnej, elastycznej i atwej do utrzymania aplikacji. Wanym aspektem
projektowania bazy danych jest wykorzystanie relacji midzy tabelami zamiast wrzucania wszystkich danych do jednej prostej tabeli. Relacje mog by jeden do jednego,
jeden do wielu i wiele do wielu.
Stosowanie relacji w celu prawidowej organizacji danych jest nazywane normalizacj.
Istnieje wiele poziomw normalizacji, ale podstawowe to pierwsza, druga i trzecia posta
normalna. Z kadym poziomem wie si regua lub reguy, ktrym trzeba sprosta.
Trzymanie si tych regu pomaga w stworzeniu dobrze zorganizowanej i elastycznej bazy
danych.

Cz IV Integracja PHP i MySQL

290

Aby przeprowadzi pomys od jego narodzin do realizacji, naley trzyma si procesu


projektowania. Proces ten sprowadza si do tego, by pomyle, zanim zaczniemy dziaa. Przedyskutujmy reguy, wymogi i cele, a dopiero potem twrzmy ostateczn wersj
znormalizowanych tabel.

Pytania i odpowiedzi
P: Czy istniej tylko trzy postaci normalne?
O: Nie. Postaci normalnych jest wicej. Dodatkowe postacie to posta normalna
Boyce-Codda, czwarta posta normalna, pita posta normalna, zwana te
postaci chronic zczenia. Do rzadko doprowadza si baz do tych postaci,
poniewa koszty pracy i utrata efektywnoci przewaaj nad ewentualnymi
korzyciami.

Warsztaty
Warsztaty maj na celu utrwalenie i sprawdzenie zdobytej wiedzy, powinny te pokaza,
jak zastosowa j w praktyce.

Test
1. Wymie trzy typy relacji midzy danymi.
2. Jak naley radzi sobie z trudnociami w reprezentacji relacji wiele do wielu

w efektywnej bazie danych?

Odpowiedzi
1. Jeden do jednego, jeden do wielu, wiele do wielu.
2. Zbudowa szereg relacji jeden do wielu poprzez stworzenie poredniczcej

tabeli odwzorowujcej.

wiczenie
Objanij kad z trzech postaci normalnych osobie, ktra pracuje z arkuszami kalkulacyjnymi i tabelami prostymi.

You might also like