Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00085 007768 10476509 na godz. na dobę w sumie
Perl - książka
Perl - książka
Autor: Liczba stron: 456
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-169-X Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> perl - programowanie
Porównaj ceny (książka, ebook, audiobook).

Profesjonalny przewodnik po języku Perl

Ten kompletny przewodnik po Perlu szybko i wygodnie dostarcza doświadczonym programistom odpowiednich technik i ilustrujących je praktycznych przykładów kodu. Lektura tej książki pozwoli Ci najpierw rozwinąć swoje dotychczasowe umiejętności, a następnie zgłębić tajniki podstawowych technik programowania w Perlu. Książka rozpoczyna się opisem podstawowej składni języka, przechodzi później do obiektów, struktur danych i zasad przetwarzania tekstu. Następnie wyjaśnia, jak korzystać z dostarczonych przez Perl narzędzi umożliwiających pracę z plikami, działanie programów w sieci czy współpracę z relacyjnymi bazami danych. Na koniec pokazuje, jak wykorzystać pełnię możliwości Perla podczas tworzenia aplikacji WWW - zarówno prostych skryptów CGI, jak i w pełni zaawansowanych narzędzi obsługujących witryny WWW.

Opisano między innymi:

Od wielu już lat programiści na całym świecie doceniają Perla za jego prostotę, wygodę i uniwersalną zdolność do rozwiązywania szerokiego zakresu problemów; począwszy od przetwarzania tekstu i administrowania systemem operacyjnym po komunikację z bazami danych i tworzenie stron WWW. Książka 'Perl' dostarcza programistom wiedzy niezbędnej do tworzenia wszechstronnych, przejrzystych i bardzo wydajnych programów - niezależnie jakie będą zadania tworzonych przez niego aplikacji.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI Perl KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK Autor: Reuven M. Lerner T³umaczenie: M. Michalski, S. Dzieniszewski ISBN: 83-7361-169-X Tytu³ orygina³u: Core Perl Format: B5, stron: 45 Przyk³ady na ftp: 61 kB Ten kompletny przewodnik po Perlu szybko i wygodnie dostarcza doġwiadczonym programistom odpowiednich technik i ilustruj¹cych je praktycznych przyk³adów kodu. Lektura tej ksi¹¿ki pozwoli Ci najpierw rozwin¹æ swoje dotychczasowe umiejêtnoġci, a nastêpnie zg³êbiæ tajniki podstawowych technik programowania w Perlu. Ksi¹¿ka rozpoczyna siê opisem podstawowej sk³adni jêzyka, przechodzi póĥniej do obiektów, struktur danych i zasad przetwarzania tekstu. Nastêpnie wyjaġnia, jak korzystaæ z dostarczonych przez Perl narzêdzi umo¿liwiaj¹cych pracê z plikami, dzia³anie programów w sieci czy wspó³pracê z relacyjnymi bazami danych. Na koniec pokazuje, jak wykorzystaæ pe³niê mo¿liwoġci Perla podczas tworzenia aplikacji WWW — zarówno prostych skryptów CGI, jak i w pe³ni zaawansowanych narzêdzi obs³uguj¹cych witryny WWW. CZYTELNIA CZYTELNIA Opisano miêdzy innymi: FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl • Typy danych i podstawowe funkcje Perla • Zasady pisania i korzystania z modu³ów Perla • Sposoby korzystania z plików tekstowych i plików DBM • Interfejs DBI pozwalaj¹cy na korzystanie z baz danych i integrowanie baz danych ze stronami WWW • Programy CGI, modu³y mod_perl dla serwera Apache, cookie protoko³u HTTP oraz szablony HTML/Perla • Mason: oparty na Perlu system tworzenia zaawansowanych witryn WWW • Wykrywanie i usuwanie b³êdów, optymalizacja kodu oraz sprawy zwi¹zane z bezpieczeñstwem Od wielu ju¿ lat programiġci na ca³ym ġwiecie doceniaj¹ Perla za jego prostotê, wygodê i uniwersaln¹ zdolnoġæ do rozwi¹zywania szerokiego zakresu problemów; pocz¹wszy od przetwarzania tekstu i administrowania systemem operacyjnym po komunikacjê z bazami danych i tworzenie stron WWW. Ksi¹¿ka „Perl” dostarcza programistom wiedzy niezbêdnej do tworzenia wszechstronnych, przejrzystych i bardzo wydajnych programów — niezale¿nie jakie bêd¹ zadania tworzonych przez niego aplikacji. Spis treści Przedmowa .................................................................................................................................................... 9 Rozdział 1. Czym jest Perl? .........................................................................................................................15 1.1. Czym jest Perl? ...................................................s...................................................s 15 1.2. Do czego Perl się nie nadaje? ...................................................s.............................. 17 1.3. Licencje ...................................................s...................................................s.......... 17 1.4. Wersje i standardy Perla ...................................................s...................................... 18 1.5. Wsparcie techniczne ...................................................s........................................... 18 1.6. Pobieranie i instalacja Perla...................................................s................................. 19 1.7. Pobieranie modułów z CPAN ...................................................s................................ 22 1.8. Podsumowanie ...................................................s...................................................s 25 Rozdział 2. Pierwsze kroki ........................................................................................................................ 27 2.1. Najprostsze programy...................................................s.......................................... 28 2.2. Kompilator czy interpreter? ...................................................s.................................. 29 2.3. Wyrażenia i bloki ...................................................s................................................. 30 2.4. Zmienne...................................................s...................................................s.......... 31 2.5. Skalary ...................................................s...................................................s........... 32 2.6. Listy i tablice ...................................................s...................................................s... 41 2.7. Tablice asocjacyjne ...................................................s............................................. 48 2.8. Odwołania ...................................................s...................................................s....... 52 2.9. Zmienne leksykalne i globalne ...................................................s............................. 58 2.10. Podsumowanie ...................................................s................................................. 60 Rozdział 3. Kroki następne..........................................................................................................................61 3.1. Podstawowe funkcje wyjścia ...................................................s................................ 62 3.2. Czas ...................................................s...................................................s............... 64 3.3. Podstawowe funkcje wejścia ...................................................s................................ 65 3.4. Operacje warunkowe ...................................................s........................................... 66 3.5. Operatory porównania ...................................................s......................................... 70 3.6. Operatory logiczne ...................................................s.............................................. 72 3.7. Kolejność wykonywania operacji ...................................................s........................... 73 3.8. Pętle...................................................s...................................................s...............74 6 Perl 3.9. Sortowanie ...................................................s...................................................s...... 79 3.10. Pliki ...................................................s...................................................s..............81 3.11. Zmienne wewnętrzne...................................................s......................................... 85 3.12. Funkcje przekształcające dane ...................................................s........................... 87 3.13. Uruchamianie programów zewnętrznych ...................................................s.............. 92 3.14. Funkcja fork...................................................s...................................................s... 95 3.15. Funkcja eval ...................................................s...................................................s.. 97 3.16. Podsumowanie ...................................................s................................................. 99 Rozdział 4. Procedury .................................................................................................................................101 4.1. Informacje podstawowe ...................................................s..................................... 102 4.2. Wartości zwracane ...................................................s............................................ 102 4.3. Zmienne w procedurach ...................................................s.................................... 108 4.4. Argumenty procedur ...................................................s.......................................... 112 4.5. Odwołania do procedur...................................................s...................................... 114 4.6. Bloki BEGIN i END...................................................s............................................. 116 4.7. Sygnały ...................................................s...................................................s......... 119 4.8. Podsumowanie ...................................................s................................................. 121 Rozdział 5. Wzorce tekstowe ...................................................................................................................123 5.1. Czym są wzorce tekstowe? ...................................................s................................ 124 5.2. Metaznaki ...................................................s...................................................s..... 126 5.3. Wyszukiwanie zakotwiczone ...................................................s............................... 129 5.4. Klasy znaków...................................................s...................................................s. 130 5.5. Predefiniowane klasy znaków ...................................................s............................. 131 5.6. Nawiasy ...................................................s...................................................s........ 133 5.7. Pobieranie części łańcucha...................................................s................................ 133 5.8. Podstawianie ...................................................s...................................................s. 136 5.9. Zachłanność...................................................s...................................................s.. 137 5.10. Opcje dopasowywania i podstawiania ...................................................s............... 137 5.11. Funkcja study ...................................................s................................................. 141 5.12. Obiekty wzorców ...................................................s............................................. 141 5.13. Operator tr/// ...................................................s................................................ 142 5.14. Zastępowanie tekstów w wielu plikach...................................................s.............. 144 5.15. Funkcja grep...................................................s...................................................s 144 5.16. Podsumowanie ...................................................s............................................... 145 Rozdział 6. Moduły ......................................................................................................................................147 6.1. Pakiety...................................................s...................................................s.......... 147 6.2. Moduły...................................................s...................................................s.......... 152 6.3. Eksportowanie symboli ...................................................s...................................... 155 6.4. Kilka przykładowych modułów ...................................................s............................ 157 6.5. Dokumentowanie modułów przy użyciu formatu POD ............................................... 161 6.6. Podsumowanie ...................................................s................................................. 164 Rozdział 7. Obiekty......................................................................................................................................165 7.1. Obiekty ...................................................s...................................................s......... 166 7.2. Metody ...................................................s...................................................s......... 167 7.3. Dziedziczenie...................................................s...................................................s. 170 7.4. Tworzenie obiektów i praca z nimi ...................................................s...................... 174 7.5. Podsumowanie ...................................................s................................................. 182 Spis treści 7 Rozdział 8. Wiązanie ...................................................................................................................................183 8.1. Wiązanie ...................................................s...................................................s....... 184 8.2. Wiązanie skalarów ...................................................s............................................ 185 8.3. Wiązanie tablic asocjacyjnych ...................................................s............................ 189 8.4. Wiązanie tablic ...................................................s................................................. 198 8.5. Podsumowanie ...................................................s................................................. 201 Rozdział 9. Praca z plikami ......................................................................................................................203 9.1. Podstawy pracy z plikami ...................................................s................................... 204 9.2. Sięganie do dowolnego miejsca w pliku ...................................................s.............. 206 9.3. Uchwyty plików ...................................................s................................................. 208 9.4. Korzystanie ze znaków globalnych ...................................................s...................... 214 9.5. Identyfikatory rzeczywiste i identyfikatory efektywne ................................................ 215 9.6. Uprawnienia plikowe ...................................................s......................................... 217 9.7. Programy suid i sgid...................................................s.......................................... 219 9.8. Testowanie plików za pomocą operatorów unarnych................................................ 220 9.9. Funkcja stat ...................................................s...................................................s.. 224 9.10. Blokowanie plików ...................................................s.......................................... 225 9.11. Katalogi ...................................................s...................................................s...... 227 9.12. Zmienianie nazw oraz usuwanie plików i katalogów............................................... 230 9.13. Powiązania ...................................................s...................................................s.. 232 9.14. Podsumowanie ...................................................s............................................... 233 Rozdział 10. Programy sieciowe i komunikacja między procesami.....................................................235 10.1. Potoki ...................................................s...................................................s......... 236 10.2. Komunikacja poprzez sieć............................................s....................................... 243 10.3. Współpraca z protokołami internetowymi ...................................................s.......... 250 10.4. Podsumowanie ...................................................s............................................... 261 Rozdział 11. Relacyjne bazy danych .........................................................................................................263 11.1. Czym właściwie jest relacyjna baza danych?...................................................s...... 264 11.2. Wprowadzenie do języka SQL ...................................................s........................... 265 11.3. Zapytanie SELECT ...................................................s........................................... 269 11.4. Złączenia ...................................................s...................................................s.... 274 11.5. Aktualizowanie i usuwanie rekordów ...................................................s................. 274 11.6. Indeksy ...................................................s...................................................s....... 275 11.7. Perl i bazy danych ...................................................s........................................... 275 11.8. Proste programy korzystające z DBI ...................................................s.................. 279 11.9. Podsumowanie ...................................................s............................................... 282 Rozdział 12. Tworzenie aplikacji dla baz danych....................................................................................283 12.1. Projektowanie bazy danych ...................................................s.............................. 283 12.2. Pisanie aplikacji...................................................s.............................................. 290 12.3. Usuwanie błędów w programach korzystających z DBI ........................................... 303 12.4. Podsumowanie ...................................................s............................................... 306 Rozdział 13. Naprawianie programów i zagadnienia bezpieczeństwa................................................307 13.1. Identyfikowanie problemów ...................................................s.............................. 308 13.2. Gdy pojawi się problem ...................................................s................................... 312 13.3. Tryb analizy zagrożeń...................................................s....................................... 314 8 Perl 13.4. Wykrywanie i usuwanie błędów w kodzie ...................................................s........... 316 13.5. Szacowanie wydajności kodu ...................................................s........................... 323 13.6. Podsumowanie ...................................................s............................................... 326 Rozdział 14. Pisanie programów CGI .......................................................................................................327 14.1. Dynamiczne strony WWW...................................................s................................. 327 14.2. Interfejs CGI ...................................................s...................................................s 332 14.3. Komunikaty o błędach i wykrywanie błędów w kodzie programów CGI ..................... 336 14.4. Przekierowanie do innej strony ...................................................s......................... 338 14.5. Inne metody modułu CGI ...................................................s................................. 341 14.6. Podsumowanie ...................................................s............................................... 342 Rozdział 15. Bardziej złożone programy CGI ..........................................................................................343 15.1. Rejestracja użytkowników ...................................................s................................ 344 15.2. Cookies ...................................................s...................................................s...... 349 15.3. Tworzenie grafiki ...................................................s............................................. 354 15.4. Szablony ...................................................s...................................................s..... 358 15.5. Podsumowanie ...................................................s............................................... 361 Rozdział 16. Aplikacje WWW korzystające z baz danych......................................................................363 16.1. Aktualizowanie kursów akcji ...................................................s............................. 364 16.2. Kartki pocztowe ...................................................s.............................................. 373 16.3. Personalizacja stron WWW z pomocą bazy danych ................................................ 378 16.4. Podsumowanie ...................................................s............................................... 388 Rozdział 17. mod_perl................................................................................................................................389 17.1. Instalowanie i konfiguracja mod_perl ...................................................s................ 390 17.2. Dyrektywy konfiguracyjne ...................................................s................................. 392 17.3. Trzy proste moduły obsługujące...................................................s........................ 393 17.4. Moduł Apache::Registry ...................................................s................................... 399 17.5. Przydatne moduły...................................................s............................................ 400 17.6. Podsumowanie ...................................................s............................................... 406 Rozdział 18. Mason.....................................................................................................................................409 18.1. Pakiet Mason ...................................................s................................................. 409 18.2. Komponenty autohandler i dhandler ...................................................s................. 417 18.3. Komponent autohandler ...................................................s.................................. 417 18.4. Zarządzanie sesją użytkownika...................................................s......................... 419 18.5. Podsumowanie ...................................................s............................................... 426 Dodatek A Bibliografia ...............................................................................................................................427 A.1. Książki poświęcone Perlowi ...................................................s............................... 427 A.2. Periodyki ...................................................s...................................................s....... 429 A.3. Książki o sieci WWW ...................................................s......................................... 429 A.4. Książki o bazach danych...................................................s.................................... 430 A.5. Użyteczne witryny WWW ...................................................s..................................... 431 Skorowidz ..................................................................................................................................................433 Tworzenie aplikacji dla baz danych W tym rozdziale: n Projektowanie bazy danych n Tworzenie aplikacji dla baz danych n Wykrywanie błędów w programach $+ Poprzedni rozdział był wprowadzeniem do zagadnień związanych z bazami danych, a w szcze- gólności do języka SQL i modułu $+. W tym rozdziale wykorzystamy te narzędzia do przy- gotowania zestawu aplikacji obsługujących bazę danych. Po drodze przyjrzymy się projektowaniu bazy danych, co — podobnie jak w przypadku projektowania programu — jest kluczową, ale często niedocenianą częścią procesu pro- gramowania. W szczególności omówimy proces normalizacji, który poprawia efektywność bazy danych i czyni ją bardziej elastyczną, redukując jednocześnie możliwość pojawienia się błędów. Aplikacje, które stworzymy, będą wykorzystywać zarówno techniki opisane w poprzednim rozdziale, jak i nowe typy danych SQL oraz metody interfejsu $+. Przyjrzymy się bliżej metodzie VTCEG, która ułatwia wykrywanie błędów w zapytaniach SQL. Rozdział ten dostarcza podstawowej wiedzy na temat procesu pisania programów współ- działających z bazą danych, włączając w to projektowanie tabel i wykrywanie błędów w przy- gotowanych programach. 12.1. Projektowanie bazy danych Nasze zadanie polega na skomputeryzowaniu katalogu książek sprzedawanych w pewnej księgarni. Zbudujemy bazę danych księgarni w systemie PostgreSQL i napiszemy w Perlu aplikacje, które pozwolą nam na obsługę danych zawaritych w bazie. 284 Perl Pierwszym krokiem podczas tworzenia aplikacji bazy danych jest zawsze stworzenie tabel. Opiszę tutaj proces tworzenia prostego projektu bazy danych, omawiając pokrótce proble- my pojawiające się w większości aplikacji baz danych. 12.1.1. Tabela Books Ponieważ księgarni potrzebny jest katalog książek oferowanych do sprzedaży, trzeba za- cząć od przygotowania tabeli $QQMU, której wiersze będą przechowywać dane o poszczegól- nych książkach (identyfikator książki, kod ISBN, tytuł, autora, wydawcę, liczbę stron, datę wydania oraz cenę książki): 4 #6 6#$. $QQMU DQQMAKF5 4+#.01607.. KUDP6 :601607.. VKVNG6 :601607.. CWVJQT6 :601607.. RWDNKUJGT6 :601607.. PWOARCIGU07/ 4+  01607.. RWDAFCVG #6 01607.. WUAFQNNCTARTKEG07/ 4+  01607.. 24+/#4;- ; DQQMAKF  70+37 KUDP  Nasza tabela $QQMU wygląda podobnie jak tabele, które prezentowałem w rozdziale 11., niemniej pojawia się parę typów danych oraz ogranicizeń, których jeszcze nie omawialiśmy: n kolumna daty wydania RWDAFCVG jest typu #6 (data). Jest to typ bardzo podobny do typu 6+/ 56#/2 (znacznik czasu), ale zawiera samą datę, bez informacjii o godzinie; n kolumna ceny WUAFQNNCTARTKEG została zdefiniowana jako kolumna typu 07/ 4+  , co oznacza, że może zawierać sześciocyfrowe liczby poisiadające dwie cyfry po przecinku. Tak więc możemy sprzedawać ksiąiżki o cenie do 9999,99 dolarów; n kolumna KUDP przechowuje niepowtarzalny i niezmienny kod ISBN (ang. International Standard Book Number), który mógłby pełnić funkcję klucza głównego. Niemniej kody ISBN są dość długie, a zazwyczaj dobrze jesti, aby klucz główny był tak krótki, jak to tylko możliwe. Aby upewnić się, iże wartości w kolumnie KUDPbędą niepowtarzalne (choć nie są one kluczem głównym),i możemy dodać do definicji tabeli ograniczenie 70+37 , które automatycznie utworzy indeks dla podanej kolumny. Z technicznego punktu widzenia zaprezentowana tutaj definicja tabeli $QQMU jest w pełni poprawna. Niemniej w momencie, gdy zaczniemy korzystać z tej tabeli, ujawnią się pewne istotne problemy. Rozdział 12. n Tworzenie aplikacji dla baz danych 285 Załóżmy, że księgarnia chciałaby przygotować katalog książek wydawnictwa Prentice-Hall. Przedstawione tu zapytanie powinno pobrać nazwy wszystkich książek wydanych przez Prentice-Hall: 5 . 6VKVNG (41/$QQMU 9* 4 RWDNKUJGT 2TGPVKEG*CNN 14 4$;VKVNG  Co się jednak stanie, jeśli jedna z książek będzie miała w kolumnie RWDNKUJGT wydawcę podanego jako 2TGPVKEG *CNN zamiast 2TGPVKEG*CNN? Taka książka oczywiście nie będzie spełniać wymogów stawianych przez nasze zapytanie i w izwiązku z tym nie trafi do katalogu. Podobne problemy pojawiają się również podczas wyszukiwania książek napisanych przez określonego autora. Jeśli osoba wpisująca książkę do bazy przez pomyłkę źle wpisze na- zwisko autora, to książka ta nie pojawi się w odpowiedzi na zapytanie 5 . 6 pobierające autora (CWVJQT) o określonym nazwisku. 12.3.2. Normalizacja tabeli Books Rozwiązaniem tego problemu jest normalizacja danych, która pozwala upewnić się, że dane wpisywane będą do bazy w jeden tylko sposób. Znormalizowane bazy danych cechuje znacz- nie mniejsze ryzyko pojawienia się uszkodzonych lub niezsynchronizowanych danych. Bazy takie są również znacznie wydajniejsze niż bazy, którei nie zostały znormalizowane. Aby znormalizować tabelę $QQMU, przygotujemy dwie nowe tabele: 2WDNKUJGTU (wydawcy) i #WVJQTU (autorzy). Tabele te będą pozwalały na wpisanie każdego autora i każdego wy- dawcy do bazy danych tylko raz. Dodatkowo wykorzystamy mechanizm kluczy obcych wskazujących na te wartości (patrz: sekcja 11.3.6): 4 #6 6#$. #WVJQTU CWVJQTAKF5 4+#.01607.. CWVJQTAPCOG6 :601607.. 24+/#4;- ; CWVJQTAKF  4 #6 6#$. 2WDNKUJGTU RWDNKUJGTAKF5 4+#.01607.. RWDNKUJGTAPCOG6 :601607.. 24+/#4;- ; RWDNKUJGTAKF  70+37 RWDNKUJGTAPCOG  4 #6 6#$. $QQMU DQQMAKF5 4+#.01607.. 286 Perl KUDP6 :601607.. VKVNG6 :601607.. CWVJQTAKF+06 ) 401607..4 ( 4 0 5M#WVJQTU RWDNKUJGTAKF+06 ) 401607..4 ( 4 0 5M2WDNKUJGTU PWOARCIGU07/ 4+  01607.. RWDAFCVG #6 01607.. WUAFQNNCTARTKEG07/ 4+  01607.. 24+/#4;- ; DQQMAKF  70+37 KUDP  Warto zauważyć, że tabele te nakładają ograniczenie unikatowości na nazwę wydawnictwa, ale nie nakładają go na nazwiska autorów. Może się w końcu zdarzyć kilku autorów o na- zwisku John Smith, ale raczej nie powinno istnieć więcej niż jedno wydawnictwo o nazwie Prentice Hall. Znormalizowane tabele gwarantują, że nazwiska autorów i nazwy wydawnictw będą wy- stępowały w tej samej formie w całej bazie danych. Co więcej, zmiana nazwy wydawnic- twa wymagać będzie teraz aktualizacji tylko jednego wiersza w tabeli 2WDNKUJGTU zamiast wielu wierszy w tabeli $QQMU. Jakby tych korzyści było jeszcze mało, tabela $QQMU zmniej- szy znacznie swoje rozmiary dzięki zastąpieniu dwóch kolumn typu 6 :6 kolumnami typu +06 ) 4. Znormalizowane tabele zajmować będą mniej miejsca na dysku i w pamięci, co przyspieszy działanie bazy danych. Obecnie nasze zapytanie pobierające książki wydawnictwa Prentice-Hall wymaga wykona- nia złączenia: 5 . 6VKVNG (41/$QQMU$2WDNKUJGTU2 9* 4 2RWDNKUJGTAPCOG 2TGPVKEG*CNN #0 2RWDNKUJGTAKF$RWDNKUJGTAKF 14 4$;VKVNG  Złączenie razem trzech tablic pozwoli na zdobycie listy wszystkich książek napisanych przez określonego autora, takiego jak np. Paul Krugman:i 5 . 6$KUDP$VKVNG2RWDNKUJGTAPCOG $RWDAFCVG$WUAFQNNCTARTKEG (41/$QQMU$2WDNKUJGTU2#WVJQTU# 9* 4 #CWVJQTAPCOG 2CWN-TWIOCP #0 $CWVJQTAKF#CWVJQTAKF #0 $RWDNKUJGTAKF2RWDNKUJGTAKF 14 4$;VKVNG  12.1.3. Głębsza normalizacja Przedstawiona przed chwilą wersja tabeli $QQMU była niewątpliwie krokiem w dobrym kie- runku. Co jednak, jeśli dana książka ma więcej niż jednego autora? Dotychczasowa defini- cja tabeli nie dopuszcza takiej sytuacji. Rozdział 12. n Tworzenie aplikacji dla baz danych 287 Jednym z możliwych rozwiązań tego problemu jest dodanie do tabeli $QQMU kilku nowych kolumn. Można na przykład zmienić kolumnę CWVJQTAKF na CWVJQTAKF i dodać trzy ko- lumny dopuszczające wartość 07.. (CWVJQTAKF, CWVJQTAKF oraz CWVJQTAKF) przeznaczone dla dodatkowych autorów. To rozwiązanie jednak sztucznie ogranicza liczbę autorów, których może posiadać książka, i prowadzi do niepotrzebnego marnotrawienia przestrzeni na dysku w przypadku każdej książki, która będzie miała mniej autorów. Dodatkowo nadmiernie komplikuje wszystkie za- pytania — rozważmy na przykład listę książek napisanych przez Paula Krugmana: 5 . 6$KUDP$VKVNG2RWDNKUJGTAPCOG $RWDAFCVG$WUAFQNNCTARTKEG (41/$QQMU$2WDNKUJGTU2#WVJQTU# 9* 4 #CWVJQTAPCOG 2CWN-TWIOCP #0  $CWVJQTAKF#CWVJQTAKF 14$CWVJQTAKF#CWVJQTAKF 14$CWVJQTAKF#CWVJQTAKF 14$CWVJQTAKF#CWVJQTAKF #0 $RWDNKUJGTAKF2RWDNKUJGTAKF 14 4$;VKVNG  Lepszym rozwiązaniem jest zupełne usunięcie informacji o autorze z tabeli $QQMU. Zamiast tego przygotujemy tabelę $QQM#WVJQTU (autorzy książki) posiadającą dwie kolumny — jedną będzie klucz obcy do tabeli $QQMU, a drugą klucz obcy do tabeli #WVJQTU. A oto poprawiona definicja tabeli $QQMU wraz z tabelą $QQM#WVJQTU: 4 #6 6#$. $QQMU DQQMAKF5 4+#.01607.. KUDP6 :601607.. VKVNG6 :601607.. RWDNKUJGTAKF+06 ) 401607..4 ( 4 0 5M2WDNKUJGTU PWOARCIGU07/ 4+  01607.. RWDAFCVG #6 01607.. WUAFQNNCTARTKEG07/ 4+  01607.. 24+/#4;- ; DQQMAKF  70+37 KUDP  4 #6 6#$. $QQM#WVJQTU DQQMAKF+06 ) 401607..4 ( 4 0 5$QQMU CWVJQTAKF+06 ) 401607..4 ( 4 0 5#WVJQTU 70+37 DQQMAKFCWVJQTAKF  Zarówno identyfikator książki (DQQMAKF), jak i identyfikator autora (CWVJQTAKF) mogą pojawić się w tabeli wielokrotnie. Powinniśmy jednak zagwarantować, żeby każdy autor w odniesie- niu do konkretnej książki pojawiał się tylko raz. Robimy to, stosując ograniczenie 70+37 łącznie na dwóch kolumnach zamiast na pojedynczej koilumnie. 288 Perl Po dodaniu tabeli $QQM#WVJQTU zapytanie odszukujące wszystkie książki napisane przez Paula Krugmana wymagać będzie wykonania złączenia czterech itabel: 5 . 6$KUDP$VKVNG2RWDNKUJGTAPCOG $RWDAFCVG$WUAFQNNCTARTKEG (41/$QQMU$2WDNKUJGTU2#WVJQTU#$QQM#WVJQTU$# 9* 4 #CWVJQTAPCOG 2CWN-TWIOCP #0 #CWVJQTAKF$#CWVJQTAKF #0 $#DQQMAKF$DQQMAKF #0 $RWDNKUJGTAKF2RWDNKUJGTAKF 14 4$;VKVNG  Z kolei następne zapytanie zwraca książkę o numerze ISBN , zwracając jeden wiersz dla każdego autora książki: 5 . 6$KUDP$VKVNG2RWDNKUJGTAPCOG $RWDAFCVG$WUAFQNNCTARTKEG (41/$QQMU$2WDNKUJGTU2#WVJQTU#$QQM#WVJQTU$# 9* 4 $KUDP  #0 $DQQMAKF$#DQQMAKF #0 $#CWVJQTAKF#CWVJQTAKF #0 $RWDNKUJGTAKF2RWDNKUJGTAKF 14 4$;VKVNG  Jak widać, prawidłowo zaprojektowana baza danych pozwala na uzyskanie odpowiedzi na wiele różnych pytań — nawet jeśli nie uwzględnialiśmy iich podczas projektowania bazy. 12.1.4. Indeksy Jak pisałem w podrozdziale 11.6, należy dodawać indeks do każdej kolumny, która może pojawiać się w klauzuli 9* 4 . Klucze główne i kolumny oznaczone jako 70+37 są indek- sowane automatycznie, co oszczędza nam trochę pracy. W naszych tabelach jest jednak jeszcze kilka kolumn, na których prawdopodobnie równiież wykonywane będą zapytania. 4 #6 +0 :CWVJQTAPCOGAKPFGZ10#WVJQTU CWVJQTAPCOGM  4 #6 +0 :RWDNKUJGTAPCOGAKPFGZ102WDNKUJGTU RWDNKUJGTAPCOG  4 #6 +0 :DQQMAVKVNGAKPFGZ10$QQMU VKVNG  4 #6 +0 :DQQMARWDNKUJGTAKFAKPFGZ10$QQMU RWDNKUJMGTAKF  4 #6 +0 :DQQMARWDFCVGAKPFGZ10$QQMU RWDAFCVG  4 #6 +0 :DQQMAWUAFQNNCTARTKEGAKPFGZ10$QQMU WUAMFQNNCTARTKEG  4 #6 +0 :CWVJQTAKFAKPFGZ10$QQM#WVJQTU CWVJQTAMKF  Przygotowanie tych indeksów sprawi, że nawet jeśli księgarnia oferować będzie kilka mi- lionów książek, łatwo i szybko je odnajdziemy, poszukując książek według tytułu, autora, daty publikacji czy ceny. Rozdział 12. n Tworzenie aplikacji dla baz danych 289 12.1.5. Integralność powiązań Nasze obecne definicje tabel zabraniają wstawiania wartości 07.. do kolumn tytułów ksią- żek i kodów ISBN. Może się jednak zdarzyć, że przez przypadek do tej lub innej kolumny wstawimy pusty łańcuch. Ponieważ tworzona baza danych jest centralnym miejsceim zbierania informacji o książkach dostępnych w księgarni, przechowywane w niej dane muszą być na tyle wiarygodne, na ile to tylko możliwe. Słowo kluczowe * - bazy PostgreSQL pozwala na nałożenie na ko- lumny dodatkowych ograniczeń, w wyniku których wprowadzane dane przechodzić będą dodatkowe testy. Na przykład tabelę $QQMU można przedefiniować w następujący sposób: 4 #6 6#$. $QQMU DQQMAKF5 4+#.01607.. KUDP6 :601607.. * - KUDMP   VKVNG6 :601607.. * - VKVNG`  =# ?  RWDNKUJGTAKF+06 ) 401607..4 ( 4 0 5M2WDNKUJGTU PWOARCIGU07/ 4+  01607.. * - PWOARCIGU M  RWDAFCVG #6 01607.. WUAFQNNCTARTKEG07/ 4+  01607.. * - WUAFQNNCTARTKEG   24+/#4;- ; DQQMAKF  70+37 KUDP  Taka poprawiona definicja tabeli $QQMU uniemożliwia wpisanie do kolumny KUDP pustego łańcucha, gwarantuje, że kolumna VKVNG zawierać będzie przynajmniej jedną literę lub cyfrę (korzystając w tym celu z niewrażliwego na rozmiar liter operatora ` PostgreSQL), i wy- maga, żeby wartości w kolumnach PWOARCIGU i WUAFQNNCTARTKEG były liczbami dodatnimi. PostgreSQL będzie od tej pory odmawiać dodawania do bazy książek, które łamać będą jedno lub więcej z tak zdefiniowanych ograniczeń. Jeśli na przykład spróbujemy dodać książ- kę nieposiadającą tytułu: +05 46+061$QQMU  KUDPVKVNGRWDNKUJGTAKFPWOARCIGURWDAFCVGWUMAFQNNCTARTKEG 8#.7 5      GE   — PostgreSQL zwróci następujący komunikat o błędzie: 4414 ZGE#RRGPFTGLGEVFWGVQ * -EQPUVTCKPVDQQMUAVKMVNG Tego rodzaju ograniczenia mogą się wydawać nonsensowne lub zbyteczne, niemniej wcale tak nie jest. Bez nich moglibyśmy przypadkowo wprowadzić do bazy danych nieprawidłowe dane. Naprawianie bazy danych zawierającej niepoprawne lub niespójne dane jest skompli- kowanym i pracochłonnym zadaniem, szczególnie jeśli baza danych musi być cały czas do- stępna. Ograniczenie * - pozwala na uniknięcie takich sytuacji, wymuszając poprawność informacji zapisywanych w bazie danych. 290 Perl 12.1.6. Kategorie książek Chcielibyśmy także przypisać każdą książkę do jednej lub więcej kategorii. Najprostszy sposób polega na przygotowaniu pary tabel podobnych do tych, które przygotowaliśmy dla autorów — tabeli CVGIQTKGU z nazwami kategorii i tabeli CVGIQT[$QQMU, która powiąże te kategorie z książkami: 4 #6 6#$.  CVGIQTKGU ECVGIQT[AKF5 4+#.01607.. ECVGIQT[APCOG6 :601607.. 24+/#4;- ; ECVGIQT[AKF  70+37 ECVGIQT[APCOG  4 #6 6#$. $QQM CVGIQTKGU DQQMAKF+06 ) 401607..4 ( 4 0 52WDNKUJGMTU ECVGIQT[AKF+06 ) 401607..4 ( 4 0 5 CVGIQTKGUM 70+37 DQQMAKFECVGIQT[AKF  4 #6 +0 :ECVGIQT[AKFAKPFGZ10$QQM CVGIQTKGU ECVGIQMT[AKF  12.2. Pisanie aplikacji Gdy baza danych jest gotowa, można przygotować programy Perla, które będą z nią współ- pracować. Jeden zestaw programów pozwoli personelowi księgarni wprowadzać, aktuali- zować i usuwać informacje na temat książek, autorów i wydawców. Drugi przeznaczony będzie dla klientów księgarni, żeby z jego pomocą mogli odnaleźć w bazie danych intere- sujące ich książki. 12.2.1. Wprowadzanie informacji o autorach Kusić nas może, aby zacząć od przygotowania aplikacji pozwalającej na wprowadzanie do bazy danych informacji o książkach. Jednak musimy pamiętać, że kolumna RWDNKUJGTAKF w tabeli $QQMU jest kluczem obcym tabeli 2WDNKUJGTU, co oznacza, ze przed zapełnieniem tabeli $QQMU trzeba najpierw wypełnić tabelę 2WDNKUJGTU. Pierwszy z przedstawionych programów, insert-author.pl, łączy się z serwerem Postgre- SQL, pobiera od użytkownika nazwisko autora książki i wykonuje odpowiednie zapytanie +05 46 wstawiające autora do bazy. Jeśli coś pójdzie nie tak, zakończy pracę, sygnalizując krytyczny błąd. Rozdział 12. n Tworzenie aplikacji dla baz danych 291 Program ten wykonuje prosty test integralności danych na poziomie aplikacji, aby upewnić się, że nazwisko autora zawiera przynajmniej jeden znak. Większość aplikacji współpracu- jących z bazami danych sprawdza wprowadzane dane dwukrotnie: na poziomie definicji ta- beli (ograniczenie * -) i ponownie na poziomie aplikacji. Pierwszy test sprawdza, czy baza danych nie zawiera niespójnych lub uszkodzonych danych, a drugi pozwala na przechwy- tywanie błędów i przygotowywanie czytelnych komunikiatów o błędach dla użytkownika. WUTDKPRGTN PCYCRNKMWKPUGTVCWVJQTRN WUGUVTKEV WUGYCTPKPIU WUG $+ 2QđæEUKúDCæFCP[EJ O[WUGTPCOG TGWXGP  O[RCUUYQTF  O[FDJ $+ EQPPGEV  $+2IFDPCOGEQTGRGTNWUGTPCOGRCUUYQTFM ] #WVQ QOOKV   2TKPV TTQT  _ M^^ FKG$đæFđæEGPKCDCæ  $+GTTUVT  2QDKGTQFWľ[VMQYPKMCPCYKUMQPQYGIQCWVQTC RTKPV2QFCLPCYKUMQCWVQTC O[CWVJQTAPCOG  EJQORCWVJQTAPCOG 0CYKUMQCWVQTCOWUKCYKGTCèRT[PCLOPKGLLGFGPPCM KH CWVJQTAPCOG` Y ] RTKPV0CYKUMQCWVQTCOWUKCYKGTCè RTKPVEQPCLOPKGLLGFGPPCM-QēEúRTCEú P _ ,GħNKPCYKUMQCWVQTCLGUV1-YUVCYLG GNUG ] 7UWēPKGRQVTGDPGURCELGPCYKUMCCWVQTC CWVJQTAPCOG`U@ U I CWVJQTAPCOG`U U I 2T[IQVWLCR[VCPKG O[USN+05 46+061#WVJQTU CWVJQTAPCOG 8#.7 5 !  O[UWEEGUUFDJ FQ USNWPFGHCWVJQTAPCOG  KH UWEEGUU ] RTKPV9UVCYKđGOFQDC[CWVQTC CWVJQTAPCOG  P _ GNUG ] FKG$đæFY[YQđCPKCCR[VCPKC53. USN   $+GTTUVT  _ _  COMPKLRQđæEGPKGDCæFCP[EJ FDJ FKUEQPPGEV 292 Perl Warto przyjrzeć się odwołaniu do metody FDJ FQ w programie insert-author.pl. Metoda FQ interfejsu $+ przeznaczona jest dla tych zapytań +05 46 i 72 #6 , które nie muszą pobie- rać wyników zapytania za pośrednictwem uchwytu UVJ. Pierwszy argument metody FDJ FQ jest łańcuchem zawierającym instrukcję SQL, a drugi odwołaniem do tablicy asocja- cyjnej zawierającej definicje atrybutów (lub wartość WPFGH). Pozostałe argumenty są warto- ściami, jakie interfejs $+ powinien przypisać symbolom zastępczym w instrukcji SQL. Metoda FDJ FQ zwraca liczbę zmienionych przez nią wierszy w tabeili. 12.2.2. Wprowadzanie kategorii Program insert-category.pl wstawiający nową kategorię do tabeli CVGIQTKGU jest bardzo podobny do programu insert-author.pl. Niemniej tym razem istnieje pewna pułapka: ko- lumna ECVGIQT[APCOG została zdefiniowana jako 70+37 . Nasza aplikacja mogłaby ignoro- wać ten wymóg, próbując na ślepo wstawiać nowe nazwy kategorii do tabeli CVGIQTKGU. Gdyby baza PostgreSQL odmówiła dodania nowej kategorii, moglibyśmy przechwycić błąd i zaraportować go użytkownikowi. Tutaj jednak zastosowaliśmy bardziej wyszukane rozwiązanie, które wymaga sprawdzenia bazy danych w celu ustalenia, czy taka nazwa kategorii nie została już wcześniej wprowa- dzona. To jednak pociąga za sobą konieczność wykonania zapytania 5 . 6 (aby pobrać nazwy już istniejących kategorii), a dopiero potem zapytania +05 46 (aby wstawić nową kate- gorię). Co jednak, jeśli ktoś inny spróbuje wykonać między tymi dwoma zapytaniami po- dobne zapytanie +05 46? Rozwiązanie, tak jak to zostało wspomniane w sekcji 11.7.4 w poprzednim rozdziale, pole- ga na połączeniu zapytań 5 . 6 i +05 46 w pojedynczej transakcji. W ten sposób upew- niamy się, że nikt inny nie zmodyfikuje bazy danych między obydwoma naszymi zapyta- niami. Obsługę transakcji można włączyć, przypisując atrybutowi #WVQ QOOKV wartość (#.5 . Wygodniej jest jednak skorzystać z metody FDJ DGIKPAYQTM , która wyłączy atrybut #W VQ QOOKV na czas pojedynczej transakcji — do momentu wywołania metody FDJ EQOOKV zatwierdzającej transakcję lub metody FDJ TQNNDCEM wycofującej transakcję. Kod programu będzie więc najpierw pytał użytkownika o nazwę nowej kategorii, następnie za pomocą zapytania 5 . 6 sprawdzi, czy takiej nazwy już nie ma, a jeśli taka kategoria już istnieje — przerwie wykonywanie transakcji, przywołując metodę FDJ TQNNDCEM . Wy- cofanie transakcji nie jest w tym przypadku tak naprawdę konieczne, ponieważ nie zmody- fikowaliśmy żadnej tabeli. Ja jednak zawsze staram się postępować przezornie i przerywam zapytanie za pomocą metody FDJ TQNNDCEM . Gdy już dane przejdą wszystkie testy na poziomie aplikacji, wykonywane jest zapytanie +05 46 i wywoływana metoda FDJ EQOOKV zatwierdzająca transakcję. Warto zauważyć, że program insert-category.pl działa z włączonym atrybutem 4CKUG TTQT. Oznacza to, że nie ma potrzeby sprawdzania wartości zwracanych przez procedury RTGRCTG i GZGEWVG, ponieważ program zakończy działanie, sygnalizując krytyczny błąd, za każdym razem, gdy natknie się na błąd bazy danych. WUTDKPRGTN PCYCRNKMWKPUGTVECVGIQT[RN Rozdział 12. n Tworzenie aplikacji dla baz danych 293 WUGUVTKEV WUGYCTPKPIU WUG $+ 2QđæEUKúDCæFCP[EJ O[WUGTPCOG TGWXGP  O[RCUUYQTF  O[FDJ $+ EQPPGEV  $+2IFDPCOGEQTGRGTNWUGTPCOGRCUUYQTFM ] #WVQ QOOKV   4CKUG TTQT  M_ ^^ FKG$đæFđæEGPKCDCæ  $+GTTUVT  2QDKGTQFWľ[VMQYPKMCPCYúPQYGLMCVGIQTKK RTKPV2QFCLPCYúPQYGLMCVGIQTKK O[ECVGIQT[APCOG  EJQORECVGIQT[APCOG 0CYCMCVGIQTKKOWUKCYKGTCèRT[PCLOPKGLLGFGPPCM KH ECVGIQT[APCOG` Y ] RTKPV0CYCMCVGIQTKKOWUKCYKGTCè RTKPVEQPCLOPKGLLGFGPPCM ZKVKPI P _ ,GħNKPCYCMCVGIQTKKLGUV1-URTÎDWLLæYUVCYKè GNUG ] 7UWēPKGRQVTGDPGURCELG ECVGIQT[APCOG`U@ U I ECVGIQT[APCOG`U U I 9[đæE#WVQ QOOKVPCECULGFPGLVTCPUCMELK2QQUVCPKGQMPY[đæEQP[ FQECUWY[YQđCPKCOGVQF[FDJ EQOOKV NWDFDJ TQNNDCEM FDJ DGIKPAYQTM    [VCMCPCYCMCVGIQTKKLWľLGUVYDCKGFCP[EJ! ,GħNKVCMY[EQHCLVTCPUCMELúRQKPHQTOWLWľ[VMQYPKMCQRTMQDNGOKG KCMQēERTCEú 7VYÎTCR[VCPKG O[UGNGEVAUSN5 . 6 1706 ECVGIQT[AKF  UGNGEVAUSN(41/ CVGIQTKGUYJGTGECVGIQT[APCOG! 2T[IQVWLKPUVTWMELú O[UVJFDJ RTGRCTG UGNGEVAUSN  9[MQPCLKPUVTWMELú UVJ GZGEWVG ECVGIQT[APCOG  2QDKGTY[PKM O[ ECVGIQT[ACNTGCF[AGZKUVU UVJ HGVEJTQYACTTC[  CMQēEVQCR[VCPKG UVJ HKPKUJ KH ECVGIQT[ACNTGCF[AGZKUVU 294 Perl ] RTKPV-CVGIQTKC ECVGIQT[APCOG D[đCLWľ RTKPVFQFCPCFQDC[ P5RTÎDWLYRKUCèKPPæPCYú P 6TCPUCMELCY[EQHCPC FDJ TQNNDCEM  _ GNUG ] 2T[IQVWLCR[VCPKG+05 46 O[USN+05 46+061 CVGIQTKGU ECVGIQT[APCOG 8#M.7 5 !  2T[IQVWLKPUVTWMELú O[UWEEGUUHWNN[AKPUGTVGFFDJ FQ USNWPFGHECVGIQT[APCOG  KH UWEEGUUHWNN[AKPUGTVGF ] RTKPV QFCđGOFQDC[MCVGIQTKú ECVGIQT[APCOG  PM FDJ EQOOKV  _ GNUG ] RTKPV$đæFYUVCYKCPKC  $+GTTUVT  P FDJ TQNNDCEM  _ _ _  CMQēERQđæEGPKGDCæFCP[EJ FDJ FKUEQPPGEV Jak łatwo przewidzieć, program insert-publisher.pl będzie wyglądał bardzo podobnie do programu insert-category.pl. 12.2.3. Modyfikowanie już istniejących wartości Program insert-category.pl działa całkiem sprawnie — co jednak, jeśli ktoś wprowadzi do bazy złą nazwę kategorii? Baza danych księgarni potrzebuje jakiegoś sposobu modyfiko- wania już istniejących nazw kategorii (to samo dotyczy wstawionych nazw autorów i wy- dawców, ale tutaj omawiać będziemy tylko przypadek kiategorii). Program update-category.pl będzie wymagał podania przez użytkownika dwóch wartości: starej nazwy kategorii QNFAECVGIQT[APCOG i nowej kategorii PGYAECVGIQT[APCOG. Może się jednak zdarzyć, że użytkownik popełni błąd przy wpisywaniu starej nazwy kategorii, po- dając nazwę, której nie ma w bazie danych, i wówczas klauzula 9* 4 zapytania SQL nie będzie pasowała do żadnego wiersza tabeli CVGIQTKGU. Moduł 6GTO QORNGVG dostępny w sieci 2#0 (patrz: podrozdział 1.6) pozwala na ograni- czenie liczby przyjmowanych od użytkownika danych wejściowych. Moduł 6GTO QORNGVG automatycznie eksportuje do przestrzeni nazw kodu przyiwołującego procedurę QORNGVG. Rozdział 12. n Tworzenie aplikacji dla baz danych 295 Procedura QORNGVG wymaga przesłania jej dwóch argumentów. Pierwszy z nich to tekst komunikatu proszącego o wprowadzenie danych, który zostanie wyświetlony użytkowni- kowi, a drugi jest listą lub też odwołaniem do tablicy, które zawierać będą dopuszczalne odpowiedzi użytkownika. Użytkownik może w każdej chwili wcisnąć klawisze CTL+D, by wyświetlić listę dopuszczalnych odpowiedzi. Jeśli użytkownik wprowadzi wystarczającą liczbę znaków, aby było możliwe jednoznaczne zidentyfikowanie danego elementu listy, wciśnięcie klawisza TAB pozwoli uzupełnić resztę. Program update-category.pl pobierze listę bieżących kategorii (która przesłana zostanie procedurze QORNGVG), korzystając z zapytania 5 . 6, a następnie będzie modyfikować bazę za pomocą zapytania 72 #6 . Oba zapytania zostaną połączone w jedną transakcję za po- mocą metody FDJ DGIKPAYQTM, podobnie jak to było w programie insert-category.pl. Lista kategorii pobierana jest z tabeli CVGIQTKGU. Zamiast jednak umieszczać nazwy kate- gorii w tablicy, uczynimy je kluczami tablicy asocjacyjnej ECVGIQTKGU. Sprawdzenie, czy dany klucz istnieje w tablicy asocjacyjnej, zajmuje bowiem znacznie mniej czasu niż od- szukanie elementu w tablicy, tak więc program będzie idzięki temu działał szybciej. A oto jedna z możliwych implementacji programu update-category.pl: WUTDKPRGTN PCYCRNKMWWRFCVGECVGIQT[RN WUGUVTKEV WUGYCTPKPIU WUG $+ WUG6GTO QORNGVG 2QđæEUKúDCæFCP[EJ O[WUGTPCOG TGWXGP  O[RCUUYQTF  O[FDJ $+ EQPPGEV  $+2IFDPCOGEQTGRGTNWUGTPCOGRCUUYQTFM ] #WVQ QOOKV   4CKUG TTQT  M_ ^^ FKG$đæFđæEGPKCDCæ  $+GTTUVT  O[ECVGIQTKGU   4QRQEPKLVTCPUCMELúMVÎTCDúFKGVTYCđCFQECUW Y[YQđCPKCOGVQF[FDJ EQOOKV NWDFDJ TQNNDCEM FDJ DGIKPAYQTM  2QDKGTPCY[MCVGIQTKKKWE[ēLGMNWECOKECVGIQTKGU O[USN5 . 6ECVGIQT[APCOGHTQO CVGIQTKGU O[UVJFDJ RTGRCTG USN  UVJ GZGEWVG YJKNG O[TQYTGHUVJ HGVEJTQYACTTC[TGH ]  QFCLPQY[MNWEFQECVGIQTKGUYCTVQħEKæ ECVGIQTKGU]TQYTGH=?_ _  CMQēEKPUVTWMELú UVJ HKPKUJ  296 Perl O[QNFAECVGIQT[APCOG 2QDKGTKUVPKGLæEæMCVGIQTKúWľ[YCLæE6GTO QORNGVG)F[RTGTYKGO[ VúRúVNúOKGPPCQNFAECVGIQT[APCOGDúFKGCYKGTCèPCYú KUVPKGLæEGLMCVGIQTKK WPVKN FGHKPGFECVGIQTKGU]QNFAECVGIQT[APCOG_ ] QNFAECVGIQT[APCOG  QORNGVG 9RTQYCFļPCYúKUVPKGLæEGLMCVGIQTKKMG[UECVGIQTKGU  _  2QDKGTPQYæPCYúMCVGIQTKK RTKPV OKGē QNFAECVGIQT[APCOG PC O[PGYAECVGIQT[APCOG  EJQORPGYAECVGIQT[APCOG 0CYCMCVGIQTKKOWUKCYKGTCèRT[PCLOPKGLLGFGPPCM KH PGYAECVGIQT[APCOG` Y ] RTKPV$đæF0CYCMCVGIQTKKOWUKCYKGTCèEQPCLOPKGLLGFGMPPCM P _ ,GħNKPCY[MCVGIQTKKUæ1-URTCYFļE[PKGOCLWľLGL YDCKGFCP[EJ GNUG ] 7UWēPCY[PKGRQVTGDPGURCELG PGYAECVGIQT[APCOG`U@ U I PGYAECVGIQT[APCOG`U U I ,GħNKPGYAECVGIQT[APCOGLGUVYVCDGNKECVGIQTKGUOWUMKO[ RTGTYCèCD[PCY[UKúPKGRQYVCTCđ[ KH FGHKPGFECVGIQTKGU]PGYAECVGIQT[APCOG_ ]  CU[IPCNKWLDđæFWľ[VMQYPKMQYKKY[EQHCLVTCPUCMELú RTKPV$đæF-CVGIQTKC PGYAECVGIQT[APCOG LWľKUVPKGLGMYDCKGFCP[EJ P FDJ TQNNDCEM  FDJ FKUEQPPGEV  GZKV _ 7VYÎTCR[VCPKG O[USN72 #6  CVGIQTKGU USN5 6ECVGIQT[APCOG! USN9* 4 ECVGIQT[APCOG! 2T[IQVWLKPUVTWMELú O[PWODGTAQHACHHGEVGFATQYU FDJ FQ USNWPFGHPGYAECVGIQT[APCOGQNFAECVGIQMT[APCOG  KH PWODGTAQHACHHGEVGFATQYU ] 4CRQTVWLY[PKMWľ[VMQYPKMQYKKCVYKGTFļVTCPUCMELú RTKPV OKGPKđGOPCYú QNFAECVGIQT[APCOG PC PGYAECVGMIQT[APCOG  P FDJ EQOOKV  _ Rozdział 12. n Tworzenie aplikacji dla baz danych 297 GNUG ] 4CRQTVWLDđæFWľ[VMQYPKMQYKKY[EQHCLVTCPUCMELú RTKPV OKCPCPCY[PKGQUVCđCY[MQPCPC P FDJ TQNNDCEM  _ _  CMQēERQđæEGPKGDCæFCP[EJ FDJ FKUEQPPGEV  12.2.4. Dodawanie nowych książek Po dodaniu kilku pozycji do tabel #WVJQTU, 2WDNKUJGTU i CVGIQTKGU można przystąpić do wprowadzania do bazy danych księgarni nowych książek. Dodanie nowej książki oznacza konieczność wstawienia jednego wiersza do tabeli $QQMU i jednego lub więcej wierszy do tabeli $QQM#WVJQTU. Kolejny program, insert-book.pl, wykorzystuje większość technik, które opisywałem wcze- śniej w tym rozdziale: wykonuje zapytanie pobierające z bazy danych listę już wprowadzo- nych wydawców i autorów, wykorzystuje moduł 6GTO QORNGVG, dzięki któremu użytkownik podaje odpowiednią nazwę wydawnictwa i nazwisko autora, i wreszcie wstawia wiersze do tabel $QQMU i $QQM#WVJQTU. Co więcej, przeprowadza to wszystko w ramach jednej transak- cji, dzięki czemu opisana sekwencja transakcji zostaje wykonana łącznie i niepowodzenie jednej oznaczać będzie niepowodzenie wszystkich. Warto również zauważyć, że korzystamy tutaj z właściwego tylko bazie PostgreSQL atry- butu RIAQKFAUVCVWU, który zwraca identyfikator (OID) ostatnio wstawionego iobiektu. Identyfikatory obiektów są elementem specyficznym dla PostgreSQL. Można postrzegać je jako niewidoczny, globalny klucz główny każdego wiersza w bazie danych. Identyfikator OID ostatnio wprowadzonego wiersza pozwala na pobranie klucza głównego dla ostatnio wykonanej operacji +05 46. Na koniec warto przyjrzeć się, w jaki sposób wiersze wstawiane są do tabeli $QQM#WVJQTU za pomocą pojedynczego odwołania do metody RTGRCTG i kilkakrotnego przywoływania metody GZGEWVG. W ten sposób odciążamy program Perla i przyśpieszamy znacznie wyko- nywanie zapytania, jeśli baza, z której korzystamy, przechowuje zapytania w pamięci pod- ręcznej. Program insert-book.pl jest jak dotąd najdłuższym programem związanym z bazami da- nych, które były omawiane w tej książce. Ponieważ jednak wszystkie jego elementy poja- wiały się już w poprzednio prezentowanych programach, zrozumienie go nie powinno być zbyt trudne. WUTDKPRGTN PCYCRNKMWKPUGTVDQQMRN WUGUVTKEV WUGYCTPKPIU WUG $+ 298 Perl WUG6GTO QORNGVG RTKPV9KVCO[YRTQITCOKG 9UVCYMUKæľMú P P 2QđæEUKúDCæFCP[EJ O[WUGTPCOG TGWXGP  O[RCUUYQTF  O[FDJ $+ EQPPGEV  $+2IFDPCOGEQTGRGTNWUGTPCOGRCUUYQTFM ]  #WVQ QOOKV   4CKUG TTQT  M_ ^^ FKG$đæFđæEGPKCDCæ  $+GTTUVT   FGHKPKWLRCTúEúUVQWľ[YCP[EJOKGPP[EJ O[ USNUVJ    CEPKLPQYæVTCPUCMELúMVÎTæCMQēE[Y[YQđCPKGFDJ EQOOKV NWDFDJ TQNNDCEM  FDJ DGIKPAYQTM   2QDKGTCWVQTÎYKWE[ēKEJMNWECOKVCDNKE[CUQELCE[LPGL O[CWVJQTU  USN5 . 6CWVJQTAPCOGCWVJQTAKF USN(41/#WVJQTU 2T[IQVWLKPUVTWMELú UVJFDJ RTGRCTG USN  9[MQPCLKPUVTWMELú UVJ GZGEWVG YJKNG O[TQYTGHUVJ HGVEJTQYACTTC[TGH ] O[ CWVJQTAPCOGCWVJQTAKF  ]TQYTGH_ CWVJQTU]CWVJQTAPCOG_CWVJQTAKF _  2QDKGTY[FCYEÎYKWE[ēKEJMNWECOKVCDNKE[CUQELCE[LPGL O[RWDNKUJGTU  USN5 . 6RWDNKUJGTAPCOGRWDNKUJGTAKF USN(41/2WDNKUJGTU 2T[IQVWLKPUVTWMELú UVJFDJ RTGRCTG USN  9[MQPCLKPUVTWMELú UVJ GZGEWVG YJKNG O[TQYTGHUVJ HGVEJTQYACTTC[TGH ] O[ RWDNKUJGTAPCOGRWDNKUJGTAKF  ]TQYTGH_ RWDNKUJGTU]RWDNKUJGTAPCOG_RWDNKUJGTAKF _ Rozdział 12. n Tworzenie aplikacji dla baz danych 299  2QDKGTKPHQTOCELúQFWľ[VMQYPKMC O[KUDPIGVAKPHQ +5$0  O[VKVNGIGVAKPHQ V[VWđ  2QDKGTYKGNWCWVQTÎY O[ CWVJQTU YJKNG O[CWVJQTIGVAKPHQ CWVQTCMG[UCWVJQTU ] NCUVWPNGUUCWVJQT RWUJ CWVJQTUCWVJQT _ O[RWDNKUJGTIGVAKPHQ Y[FCYEúMG[URWDNKUJGTU  O[RCIGUIGVAKPHQ NKEDúUVTQP  O[RWDAFCVGIGVAKPHQ FCVúY[FCPKC ;;;;//   O[WUAFQNNCTARTKEGIGVAKPHQ EGPúYFQNCTCEJ   9UVCYFQDC[PQYæMUKæľMú USN+05 46+061$QQMU USN KUDPVKVNGRWDNKUJGTAKFPWOARCIGU USNRWDAFCVGWUAFQNNCTARTKEG  USN8#.7 5 !!!!!!  UVJFDJ RTGRCTG USN  UVJ GZGEWVG KUDPVKVNGRWDNKUJGTU]RWDNKUJGT_RCIGU RWDAFCVGWUAFQNNCTARTKEG  O[PGYADQQMAQKFUVJ ]RIAQKFAUVCVWU_ UVJ HKPKUJ   7ľ[LKFGPV[HKMCVQTC1+ PQYGLMUKæľMKFQRQDTCPKCDQQMAKF USN5 . 6DQQMAKF USN(41/$QQMU USN9* 4 QKF! 2T[IQVWLKPUVTWMELú UVJFDJ RTGRCTG USN  9[MQPCLKPUVTWMELú UVJ GZGEWVG PGYADQQMAQKF  2QDKGTDQQMAKFYKGTUCQKFGPV[HKMCVQTG1+ O[ PGYADQQMAKF UVJ HGVEJTQYACTTC[ UVJ HKPKUJ   9UVCYRQYKæCPKGMUKæľMKCWVQTGO USN+05 46+061$QQM#WVJQTU DQQMAKFCWVJQTAKF 8#.7 5 !!  UVJFDJ RTGRCTG USN  300 Perl HQTGCEJO[CWVJQT CWVJQTU ] UVJ GZGEWVG PGYADQQMAKFCWVJQTU]CWVJQT_  RTKPV)QVQYG P _ +PUVTWMELCCMQēEQPC UVJ HKPKUJ  ,GħNKYU[UVMQRQUđQFQDTGCVYKGTFCO[VTCPUCMELú FDJ EQOOKV   CO[MCO[RQđæEGPKGDCæFCP[EJ FDJ FKUEQPPGEV   2TQEGFWTCRQDKGTCLæECKPHQTOCELGQFWľ[VMQYPKMC UWDIGVAKPHQ ] O[SWGUVKQPUJKHV O[ EQORNGVKQPU A O[EQORNGVKQPUAJCUJOCR] A _ EQORNGVKQPU O[KPRWV 7ľ[YCO[6GTO QORNGVGLGħNKVTGDCWWRGđPKèFCPG KH EQORNGVKQPU ] KPRWV  QORNGVG 2QFCLSWGUVKQPMUKæľMKMG[UEQORNGMVKQPUAJCUJ  _ ,GħNKPKGOCVCMKGLRQVTGD[TQRQE[PCO[UVCPFCTFQYQ GNUG ] RTKPV2QFCLSWGUVKQPMUKæľMK KPRWV 2QDKGTFCPGQFWľ[VMQYPKMMC EJQORKPRWV7UWēMQēECPCMPQYGIQYKMGTUC KPRWV`U@ U I7UWēURCELGRQEæVMW KPRWV`U U I7UWēURCELGMQēEC _ TGVWTPKPRWV _ Mimo iż program insert-book.pl nie obsługuje kategorii, nietrudno domyślić się, jak powi- nien wyglądać odpowiedni kod, który należałoby w tymi celu dodać do programu. 12.2.5. Pobieranie informacji o książkach Teraz, gdy baza danych księgarni jest gotowa, pora przygotować prostą aplikację wykonu- jącą zapytania, które umożliwią użytkownikom zdobycie informacji na temat konkretnych książek. Napiszemy przykładowy program, który będzie zwracał książki o tytułach zawie- rających tekst wprowadzony przez użytkownika. Rozdział 12. n Tworzenie aplikacji dla baz danych 301 Warto zauważyć, że najpierw wczytujemy wszystkie informacje o książce do tablicy aso- cjacyjnej DQQM, a dopiero później je wyświetlamy. Dzieje się tak, ponieważ baza Postgre- SQL zwróci po jednym wierszu dla każdego autora książki. Gdybyśmy po prostu wyświe- tlili wyniki, tak jak są one zwracane przez bazę danych, książki mające dwóch autorów byłyby wyświetlane dwukrotnie, a książki mające pięciu autorów — aż pięć razy! Unik- niemy takich powtórzeń, wczytując wszystkie zwrócone książki do tablicy asocjacyjnej ta- blic asocjacyjnych, którą następnie posortujemy i wyświietlimy to, co nam pozostanie. Porządek, w jakim będą zwracane wyniki, może wydawać się nieistotny, skoro i tak zostaną one uporządkowane w pętli HQTGCEJ. Nie jest to jednak do końca prawda: autorzy są doda- wani do tablicy asocjacyjnej DQQM w takim samym porządku, w jakim są pobierani. Dlatego właśnie klauzula 14 4$; upewnia się, że zwracane wiersze będą uporządkowane według nazwisk autorów. Aby uniknąć pomyłek, które mogą być spowodowane różnicami w wielkości liter, wyko- rzystywana jest funkcja .19 4 języka SQL, która powoduje zamianę wszystkich wielkich znaków ciągów, które są jej argumentami, na małe: WUTDKPRGTN PCYCRNKMWSWGT[VKVNGRN WUGUVTKEV WUGYCTPKPIU WUG $+ RTKPVSS]9KVCO[YRTQITCOKG CR[VCPKC P P_ 2QđæEUKúDCæFCP[EJ O[WUGTPCOG TGWXGP  O[RCUUYQTF  O[FDJ $+ EQPPGEV  $+2IFDPCOGEQTGRGTNWUGTPCOGRCUUYQTF ] #WVQ QOOKV   4CKUG TTQT  M_ ^^ FKG$đæFđæEGPKCDCæ  $+GTTUVT  2QDKGTV[VWđQFWľ[VMQYPKMC RTKPV2QFCLRQUWMKYCP[PCRKU O[VCTIGV  EJQORVCTIGV 9GļYEWF[UđÎYOGVCPCMK53. VCTIGV`U^^ ^I VCTIGV`U^A^ A^I 2TGMUVCđèđCēEWEJYY[TCľGPKGTGIWNCTPG53. VCTIGVVCTIGV 7VYÎTCR[VCPKG O[USN5 . 6$KUDP$VKVNG2RWDNKUJGTAPCOG$PWOARCIGMU USN$RWDAFCVG$WUAFQNNCTARTKEG#CWVJQTAPCOGM USN(41/$QQMU$2WDNKUJGTU2#WVJQTU#$QQM#WVJQMTU$# USN9* 4 .19 4 $VKVNG .+- .19 4 !  USN#0 $#CWVJQTAKF#CWVJQTAKF USN#0 $DQQMAKF$#DQQMAKF USN#0 $RWDNKUJGTAKF2RWDNKUJGTAKF USN14 4$;#CWVJQTAPCOG 302 Perl 2T[IQVWLKPUVTWMELú O[UVJFDJ RTGRCTG USN  9[MQPCLKPUVTWMELú O[UWEEGUUUVJ GZGEWVG VCTIGV  KH UWEEGUU ] O[DQQM  YJKNG O[TQYTGHUVJ HGVEJTQYACTTC[TGH ] O[ KUDPVKVNGRWDNKUJGTRCIGU FCVGRTKEGCWVJQT  TQYTGH  CEJQYCLKPHQTOCELúQMUKæľEGYDQQM DQQM]KUDP_ ]VKVNG_VKVNG DQQM]KUDP_ ]RWDNKUJGT_RWDNKUJGT DQQM]KUDP_ ]RCIGU_RCIGU DQQM]KUDP_ ]FCVG_FCVG DQQM]KUDP_ ]RTKEG_RTKEG  CLOKLUKúCWVQTCOK KH DQQM]KUDP_ ]CWVJQT_ ] DQQM]KUDP_ ]CWVJQT_CWVJQT _ GNUG ] DQQM]KUDP_ ]CWVJQT_CWVJQT _ _ 2TGLT[LMUKæľMKYRúVNKKY[ħYKGVNKPHQTOCELGQPKEJ HQTGCEJO[KUDP  UQTV]DQQM]C_ ]VKVNG_EORDQQM]D_ ]VKVNG__MG[UDQQM ] RTKPV P RTKPVDQQM]KUDP_ ]VKVNG_ P RTKPVZNGPIVJ DQQM]KUDP_ ]VKVNG_  P RTKPV#WVQTDQQM]KUDP_ ]CWVJQT_ P RTKPV+5$0KUDP V9[FCYECDQQM]KUDP_ ]RWDNKUJGT_ P RTKPV CVCY[FCPKCDQQM]KUDP_ ]FCVG_ V RTKPV GPC DQQM]KUDP_ ]RTKEG_ P RTKPV.KEDCUVTQPDQQM]KUDP_ ]RCIGU_ P _ KH UVJ TQYU ] RTKPV$TCMMUKæľGMRCUWLæE[EJFQYQTEC P _ _ GNUG ] RTKPV$đæFRT[IQVQYCPKCCR[VCPKC $+GTTUVT _ UVJ HKPKUJ  FDJ FKUEQPPGEV  Rozdział 12. n Tworzenie aplikacji dla baz danych 303 12.3. Usuwanie błędów w programach korzystających z DBI Perl jest językiem programowania, w którym błędy wykrywa się bardzo łatwo. Wielu pro- gramistów zamiast korzystać z wbudowanego debuggera (patrz: sekcja 13.4.2), po prostu wstawia do kodu kilka instrukcji RTKPV. Tego rodzaju techniki nie zawsze jednak wystar- czają, gdy korzystamy z interfejsu $+. Jeśli na przykład program zakończy pracę w wyniku błędu bazy danych po próbie wykona- nia instrukc
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Perl
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: