Tworzenie tabel oraz zakładanie indeksów na kolumnach tych tabel Formatowanie danych w celu zmaksymalizowania użyteczności bazy danych Efektywne i wszechstronne wykorzystanie polecenia SELECT Optymalizowanie wydajności baz danych i zapewnianie im bezpieczeństwa oraz integralności Zastosowanie transakcji, kursorów i procedur Publikowanie baz danych w sieci
Relacyjne bazy danych są jednymi z najważniejszych i najczęściej używanych aplikacji komputerowych. Nic więc dziwnego, iż relacyjne bazy danych używane są w aplikacjach tak małych jak prywatny spis telefonów, aż po potężne magazyny danych stosowane w bankach do zapisywania wszelkich realizowanych transakcji. SQL (Structured Query Language), jest językiem zapytań umożliwiającym programistom pobieranie i zapisywanie danych oraz zarządzanie większością relacyjnych baz danych. Mimo że istnieją pewne różnice w sposobie obsługiwania SQL-a przez różne systemy baz danych, język ten jest na tyle ustandaryzowany, iż opanowanie go dla jednej bazy danych jest wystarczające, aby móc korzystać z niego w dowolnym innym systemie obsługującym SQL. Na język SQL składa się zaledwie kilka typów wyrażeń, na tyle prostych, iż nauczenie się ich składni nie sprawia żadnego kłopotu, a w zamian umożliwia wykonywanie wielu nieskomplikowanych zapytań. Wraz z poznawaniem kolejnych cech języka można rozbudowywać swoje własne zapytania, uzyskując w ten sposób coraz lepszą dokładność odpowiedzi.
Tytuł oryginału: Special Edition Using SQL Tłumaczenie: Janusz Grabis, Bartosz Behrendt Projekt okładki: Maciej Pasek, "ARTGRAF"
ISBm 83-7197-248-2 Authorized translation from the English language edition published by Sams Publishing Copyright (c) 2000 All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.
Polish language edition published by Wydawnictwo Helion. Copyright (c)2001
Wydawnictwo HELION ul. Chopina 6, 44-100 GLIWICE tel. (32) 231-22-19, (32) 230-98-63 e-mail: helion@helion.com.pl www. helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://www.helion.com.pl/cgi-bin/zakupy/ocen.cgi?sqldk Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzna, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Printed in Poland.
Druk: Zakład Poligraficzny W. Wiliński, Gliwice, ul. Chopina 6, tel./fax 231-32-16
Książkę tę dedykuję mojej rodzinie, Colburnom i Thorkelsonom, która stanowi dla mnie życiowe wsparcie.
Podziękowania
Pisanie książki jest poważnym zadaniem i nie sposób na tak małej powierzchni podziękować wszystkim ludziom, którzy pomogli w jej powstaniu, nie wspominając już o ludziach, którzy swój wkład wnieśli pośrednio przez wsparcie i cierpliwość. Przede wszystkim, chciałbym podziękować ludziom z wydawnictwa Que, którzy byli przy mnie przez cały czas - Randiemu Haubnerowi i Seanowi Dixonowi. Chciałbym również podziękować mojemu redaktorowi technicznemu, Michealowi Ask. Największe podziękowania należą się mojej żonie za miesiące wytrwałości, które poświęciłem na studia, w efekcie czego powstała niniejsza książka. Bez jej cierpliwości i miłości nie byłym w stanie wykonać tego zadania. #6
Spis treści
O Autorze / 17 Wstęp / 19 Kompozycja książki / 20 Konwencje przyjęte w książce / 22
Część I. Projektowanie i tworzenie bazy danych / 23
Model relacyjnej bazy danych / 25 Zasady dotyczące struktury danych / 27 Zasady dotyczące przetwarzania danych / 27 Zasady dotyczące integralności danych / 28 Język SQL / 29 Przetwarzanie danych / 29 Definiowanie danych / 30 Zarządzanie bazą danych / 31 Standardy języka SQL / 31 Składnia języka SQL / 32 Nierozróżnianie wielkich i małych liter / 32 "Białe" znaki / 33 Zagnieżdżanie / 34 Używanie cudzysłowów / 34 Nawiasy / 35 Operacje relacyjne / 36 Selekcja / 36 Projekcja / 37 Złączenie / 37 Rozwój aplikacji baz danych / 38 Systemy scentralizowane / 38 Systemy klient-serwer / 38 Bazy danych na stronach WWW / 39 Wiersz poleceń / 40 W praktyce / 40
Rozdział 2. Projektowanie bazy danych / 43 Struktura bazy danych / 44 Dobre i złe bazy danych / 44 Charakterystyka dobrej bazy danych / 44 Jak poznać złą bazę danych / 45 Projektowanie / 45 Zanim przystąpisz do projektu / 46 Modelowanie danych / 47 Zależności funkcyjne i klucze kandydujące / 48 Zależności funkcyjne / 49 Definicja zależności funkcyjnej / 49 Klucze kandydujące i klucze główne / 51 Droga na skróty / 51 Modelowanie relacji / 52 Wybieranie obiektów / 52 Rozpoznawanie własności / 53 Rozpoznawanie relacji między obiektami / 54 Relacja jeden-do-jeden / 54 Relacja jeden-do-wiele / 55 Relacja wiele-do-wiele / 55 Schemat relacji / 56 Normalizacja / 57 Dekompozycja bez straty danych / 57 Pierwsza postać normalna 1PN / 58 Druga postać normalna 2PN / 59 Trzecia postać normalna 3PN / 60 Boyce-Codd'a postać normalna BCPN / 62 Wyższe postacie normalne / 63 Denormalizacja / 64 W praktyce / 64
Rozdział 3. Budowanie bazy danych / 67 Tworzenie bazy danych / 68 Dostęp do wybranej bazy danych / 68 Tworzenie tabeli / 69 Typy danych / 70 Dane łańcuchowe / 71 Dane numeryczne / 71 Określenia czasu / 72 Określanie kluczy / 72 Klucze obce / 74 Ograniczenia dla kolumn / 74 Odrzucanie wartości null / 75 Inne ograniczenia / 75 Wartości domyślne / 76 Projekt bazy danych o filmach / 77 Tabela Movies / 77 Tabela Studios / 79 Tabela People / 79 Tabela Cast_Movies / 80 Indeksy / 81 Indeksy unikalne / 82 Indeks klastrowy / 82 Powody do indeksowania kolumn / 83 Kiedy nie używać indeksów / 83 W praktyce / 84
Rozdział 4. Tworzenie, zmienianie i usuwanie rekordów / 85 Przygotowanie danych / 85 Instrukcja INSERT / 86 Wprowadzanie wartości domyślnych i wartości null / 87 Równoczesne użycie instrukcji SELECT i INSERT / 88 Kopiowanie tabel, usuwanie powtarzających się wierszy / 90 Instrukcja DELETE / 93 Instrukcja UPDATE / 93 Instrukcja TRUNCATE / 95 Instrukcja DROP / 95 DROP TABLE / 95 DROP INDEX / 96 Instrukcja ALTER / 96 ALTER TABLE / 96 W praktyce / 98
Część II. Pobieranie danych z bazy danych / 101
Rozdział 5. Instrukcja SELECT103 Budowa instrukcji SELECT103 Określanie kolumn do pobrania.104 Użycie znaku "*" do wybrania wszystkich kolumn105 Wykonywanie obliczeń na danych107 Użycie wyrażeń w instrukcji SELECT107 Nazwy kolumn w wyrażeniach.108 Operatory arytmetyczne obsługiwane przez SQL.109 Użycie słowa kluczowego AS do nadawania nazw kolumnom i wyrażeniom.110 Filtrowanie wyników zapytania za pomocą klauzuli WHERE.112 Operatory do porównywania.113 Rozróżnianie wielkości liter w porównaniach.115 Wykonywanie obliczeń w klauzuli WHERE.115 Postępowanie z wartościami null.116 Wyszukiwanie wartości null.116 Wyszukiwanie null w innych zapytaniach.117 Sortowanie wyników zapytania.119 Użycie klauzuli ORDER BY.119 Sortowanie w porządku malejącym.120 Sortowanie wyrażeń121 Sortowanie po wielu kolumnach.122 Ustalanie identyczności łańcuchów.123 Jak porównujemy łańcuchy.124 Sortowanie z pominięciem znaczenia wielkości liter125 Zestaw znaków125 W praktyce125
Rozdział 6. Zastosowanie klauzuli WHERE127 Klauzula WHERE.127 Użycie operatorów logicznych w klauzuli WHERE.128 Programowanie logiki.128 Operator AND.128 Operator OR129 Operator NOT.129 Wykorzystanie złożonych operatorów logicznych131 Kolejność wykonywania działań.132 Klauzula IN.132 Klauzula IN w podzapytaniu.133 IN kontra OR.134 NOT IN.134 Klauzula BETWEEN.135 BETWEEN i typy czasowe.137 BETWEEN i łańcuchy137 Wyszukiwanie łańcuchów przy pomocy klauzuli LIKE.138 Budowanie szablonów.139 Złożone instrukcje WHERE z operatorem LIKE140 Pomijanie znaków wieloznacznych.141 LIKE i wydajność141 Dopasowywanie jednego lub wielu znaków142 Funkcje przydatne dla klauzuli WHERE.142 Usuwanie niepotrzebnych spacji.143 Długość łańcucha143 Funkcje umożliwiające konwersję typów danych.143 Zagnieżdżanie funkcji.144 Funkcje agregujące145 W praktyce145 Rozdział 7. Przetwarzanie wyników zapytań147 Wybór wartości unikalnych: operator DISTINCT147 Wybieranie unikalnych kombinacji wartości148 DISTINCT i NULL.149 Funkcje agregujące150 Funkcje agregujące i klauzula WHERE151 Zmiana nazwy wyników funkcji agregującej152 Funkcja COUNT().152 Funkcja COUNT() i wartości null.153 Funkcja COUNT() i operator DISTINCT.153 Funkcje SUM() i AVG()153 Funkcje MIN() i MAX()154 Wykonywanie obliczeń z podziałem na kategorie155 Klauzula GROUP BY.156 Grupy i podgrupy157 Klauzule GROUP BY i ORDER BY158 Klauzula GROUP BY stosowana łącznie z WHERE160 Filtrowanie wyników zapytań z użyciem HAYING.161 Złożone wyrażenia w klauzuli HAYING162 HAYING i WHERE162 W praktyce163
Rozdział 8. Łączenie tabel165 Połączenia i normalizacja165 Co to jest złączenie?166 Zgodne kolumny.166 Warunki złączenia.168 Używanie złączeń168 Wybieranie kolumn.169 Skracanie nazw tabel.170 Złączenia i relacje170 Jak działają złączenia.171 Typy złączeń172 Połączenia naturalne172 Złączenia w oparciu o inne warunki173 Self-joins.174 Łączenie więcej niż dwóch tabel.175 Tabele łączące.177 Złączenia zewnętrzne178 Unie.179 Opcja ALL181 Łączenie UNION i ORDER BY182 INTERSECT.183 MINUS184 Składnia złączeń w SQL-92 184 Złączenia wewnętrzne.185 Złączenia zewnętrzne186 W praktyce188
Rozdział 9. Podzapytania.189 Co to jest podzapytanie?190 Zastępowanie podzapytań przez złączenia191 Typy podzapytań.191 Podzapytania niepowiązane.192 Podzapytanie powiązane.192 Podzapytania zwracające listę wartości193 Tworzenie zapytań z IN193 Zastosowanie IN w zapytaniach powiązanych195 Zastępowanie autozłączeń przez podzapytanie.195 Podzapytania i NOT IN.196 Wykorzystanie EXISTS198 Znajdowanie zbiorów pustych przy pomocy NOT EXISTS.199 Operatory porównania z ANY i ALL199 Zastosowanie ANY.200 Zastosowanie ALL201 Podzapytania zwracające pojedynczą wartość202 Podzapytania i funkcje agregujące203 Pisanie złożonych zapytań.205 Zagnieżdżanie podzapytań205 Łączenie podzapytań i złączeń206 Zastosowanie podzapytania w klauzuli HAYING.207 Wykorzystanie podzapytań w instrukcjach UPDATE i DELETE208 Podzapytania z instrukcją DELETE208 Podzapytania z instrukcją UPDATE.208 Stosowanie podzapytań z instrukcją INSERT210 W praktyce211
Część III. Zarządzanie bazą danych / 213
Rozdział 10. Widoki / 215 Tworzenie widoków / 215 Korzyści płynące ze stosowania widoków / 217 Wygoda / 217 Ukrywanie efektów normalizacji / 218 ' Ograniczanie danych dostępnych dla użytkowników / 219 Tworzenie warstwy abstrakcji / 219 Aliasy kolumn / 220 Widoki pojedynczych tabel / 221 Widoki z wyrażeniami i funkcjami / 221 Widoki z funkcjami agregującymi / 223 #10 Widoki tworzone ze złączeń / 225 Widoki z podzapytaniami / 226 Korzystanie z innych operacji złączeń w widokach / 227 Zagnieżdżanie widoków / 228 Modyfikowanie danych poprzez widoki / 229 Zadania realizowane za pomocą widoków / 232 Tabele w przykładzie / 233 Działanie systemu / 234 Widoki użyte w systemie / 235 Zapytanie wydobywające artykuły / 237 W praktyce / 238
Rozdział 11. Model bezpieczeństwa SQL / 241 Bezpieczeństwo baz danych / 241 Konto administratora bazy danych / 242 Właściciele bazy danych / 243 Tworzenie użytkowników bazy danych / 243 Modyfikowanie użytkowników / 244 Usuwanie użytkowników / 244 Elementy bazy danych / 244 Bazy danych / 245 Tabele / 247 Widoki / 247 Kolumny oraz kolumny widoku / 248 Polecenia GRANT I REVOKE / 248 Użytkownik publiczny / 249 Nadawanie użytkownikom uprawnienia GRANT / 250 Role a bezpieczeństwo bazy danych / 251 Tworzenie i usuwanie ról / 252 Przypisywanie użytkowników do ról / 252 Przypisywanie ról innym rolom / 254 Widoki a bezpieczeństwo bazy danych / 255 Dostosowywanie praw dostępu poprzez widoki / 257 W praktyce / 260
Część IV. Zagadnienia praktyczne / 261
Rozdział 12. Typy danych / 263 Dane numeryczne264 Sortowanie liczb264 Liczby i wartość null.266 Wyrażenia matematyczne267 Standardowe funkcje matematyczne.268 Formatowanie liczb.270 Dane łańcuchowe.271 Konkatenacja łańcuchów.271 Funkcje łańcuchowe272 Przeszukiwanie łańcuchów273 Podciągi.274 Użycie przeszukiwania i wyciągania podciągów274 Soundex.276 Daty i określenia czasu277 Formatowanie dat przed wyprowadzeniem.278 Formatowanie dat przed zapisem279 Spis treści 11 Dodawanie i odejmowanie dat279 Porównywanie dat.281 Zaokrąglanie dat282 Konwertowanie danych.283 Funkcja Convert().284 Konwertowanie typów danych w Oracle'u.286 W praktyce289
Rozdział 13. Wydajność i integralność bazy danych / 291 Zwiększanie wydajności bazy danych.291 Projekt bazy danych ajej wydajność.292 Narzędzia pomiaru wydajności292 AUTOTRACE (Oracle)293 SHOWPLAN (Transact-SQL).296 Indeksy297 Indeksy klastrowe298 Zapytania wykorzystujące indeksy298 Optymalizator zapytań.300 Zasada działania300 Optymalizator i indeksy302 Wiele indeksów wjednym zapytaniu303 Operacje na zbiorach danych.304 Optymalizator zapytań i widoki305 Optymalizator zapytań i podzapytania305 Operacje złączenia.306 Podpowiedzi dotyczące złączeń307 Integralność danych.307 Integralność kontra wydajność309 W praktyce310
Rozdział 14. Transakcje i kursory / 313 Transakcje / 314 Zasada działania / 314 Transakcje w Oracle / 315 AUTOCOMMIT / 316 Transakcje w języku Transact-SQL / 317 Blokowanie danych / 318 Typy blokad / 320 Transakcje i procedury składowane / 321 Dziennik transakcji / 321 Kursory / 322 Kursory wjęzyku Transact-SQL / 322 Deklarowanie kursora / 323 Otwieranie kursora / 324 Pobieranie wierszy z kursora / 324 Modyfikowanie i usuwanie danych poprzez kursory / 325 Zamykanie i usuwanie kursorów Kursory wjęzyku PL/SQL Deklarowanie kursorów / 328 Używanie kursorów w programach PL/SQL / 328 Atrybuty kursorów / 329 Iteracyjne przetwarzanie kursora / 330 W praktyce / 332 #12
Część V. Procedury składowane / 335
Rozdział 15. Procedury składowane / 337 Pisanie procedur składowanych.339 Przekazywanie parametrów do procedur składowanych340 Zmienne.342 Nadawanie wartości zmiennym.343 Definiowanie bloków kodu.345 Wyrażenia warunkowe346 Zapytania w wyrażeniach warunkowych.347 Połączenie wyrażenia warunkowego z blokiem kodu.348 Wyrażenie IF.ELSE348 Zagnieżdżanie wyrażeń warunkowych349 Pętle.350 Pętla WHILE.351 Pętle nieskończone352 Restartowanie pętli - CONTINUE354 Zagnieżdżanie pętli.355 Iteracyjne przetwarzanie kursora.355 Wyzwalacze.357 Tworzenie wyzwalaczy.358 Usuwanie wyzwalaczy358 Kod wyzwalacza.358 Wyzwalacze działające na kolumnach359 W praktyce360
Rozdział 16. Procedury składowane w języku Transact-SQL / 363 Ogólne informacje na temat programowania w Transact-SQL363 Zmienne globalne363 Przerywanie pracy procedur - RETURN366 Obsługa błędów.366 RAISERROR366 RAISERROR w Microsoft SQL Server367 RAISERROR w Sybase369 Przechwytywanie błędów370 Wyrażenie RETURN.371 Definiowanie własnych komunikatów błędów372 Obiekty tymczasowe;.372 tempdb - zasada działania.373 Tworzenie tymczasowej tabeli373 Klasy obiektów tymczasowych.374 Trwałe obiekty tymczasowe375 WAITFOR.'375 Zaawansowane techniki tworzenia wyzwalaczy.376 ROLLBACK TRIGGER.376 Tabele INSERTED i DELETED.377 W praktyce378
Rozdział 17. Procedury składowane w języku PL/SQL (Oracle) / 381 Sekcja deklaracji382 Stałe.383 Deklarowanie kursorów383 Sekcja poleceń wykonywalnych384 Wyprowadzanie danych384 Przypisania385 Wyrażenia warunkowe385 Pętle.386 Iteracyjne przetwarzanie kursora.387 Pętla FOR387 Kursory w pętlach FOR.388 Pętla WHILE.388 Kursory w pętlach WHILE389 GOTO390 Pobieranie wartości do zmiennych390 Obsługa wyjątków.391 Wyjątki definiowane przez użytkownika392 Tworzenie procedur składowanych.393 ; Tworzenie procedur.394 . Uruchamianie procedur składowanych395 Tworzenie i stosowanie funkcji.396 Umieszczanie procedur i funkcji w pakietach397 Specyfikacja pakietu.397 Testowanie programów PL/SQL.399 SHOW ERRORS.399 DBMS_OUTPUT400 Wyzwalacze.400 Wyzwalacze INSTEAD OF403 Zarządzanie wyzwalaczami.404 W praktyce405
Część VI. Przegląd baz danych / 407
Rozdział 18. Oracle / 409 SQL*PLUS / 410 Uruchamianie SQL*PLUS / 410 Korzystanie z SQL*PLUS / 411 Ładowanie skryptów SQL*PLUS / 412 Skrypt login.sql / 413 Edycja poleceń SQL / 413 Zapisywanie danych w pliku / 414 Kontrolowanie sposobu prezentowania wyników / 415 Tworzenie raportów w SQL*PLUS / 417 Tytułowanie raportów / 417 Zmiana sposobu wyświetlania danych / 418 Inne polecenia formatowania danych / 421 Widoki systemowe Oracle'a / 423 Korzystanie z widoków systemowych / 425 Sekwencje / 426 Synonimy / 428 Typy danych w Oracle'u / 429 Zasoby na temat Oracle'a w sieci WWW / 430 W praktyce / 431
Rozdział 19. Microsoft SQL Server i Sybase Adaptive Server / 433 Narzędzia administracyjne baz danych434 SQL Enterprise Manager.434 SQL Server Query Analyzer.436 SQL Central436 ISQL437 #14 Zasady nadawania nazw obiektom w Transact-SQL438 WYRAŻENIE SELECT . INTO.438 Funkcje systemowe.439 Identyfikowanie użytkowników440 Identyfikowanie bazy danych lub serwera.440 Funkcje porównywania danych.441 Funkcje walidacji danych442 Wyrażenia CASE.443 Złożone wyrażenia CASE.443 Połączenie CASE i GROUP BY.445 Użycie CASE w wyrażeniach UPDATE.446 Systemowe procedury składowane447 Procedury związane z bezpieczeństwem.447 Procedury serwerów zdalnych.451 Procedury definiujące dane.451 Typy danych w języku Transact-SQL.455 W praktyce457
Rozdział 20. Microsoft Access / 459 Pliki bazy danych / 459 ODBC / 460 Interfejs użytkownika / 460 Obiekty bazy danych / 461 Tabele / 461 Kwerendy / 462 Formularze / 463 Raporty / 464 Makra / 465 Moduły / 465 Tworzenie tabel / 466 Tworzenie tabel przy użyciu widoku arkusza danych / 466 Tworzenie tabel przy użyciu widoku projektu / 468 Kwerendy definiujące dane / 470 Typy danych / 471 Tworzenie i uruchamianie zapytań / 473 Budowanie zapytań przy użyciu widoku projektu / 473 Pisanie zapytań przy użyciu widoku SQL / 476 Tworzenie źródeł danych ODBC / 476 Zasoby dostępne w sieci WWW / 478 W praktyce / 479
Rozdział 21. MSQL i MySdL / 481 Jak zdobyć MySQL i MSQL.482 Różnice między MySQL i MSQL.482 Użytkowanie MySQL484 Klient MySQL.484 Cechy MySQL.486 Ograniczenia MySQL489 Brak podzapytań489 Brak transakcji.489 Procedury składowane, wyzwalacze i kursory490 Związki kluczy obcych490 Typy danych stosowane w MySQL.490 Spis treści 15 -.;. Składnia MySQL.492 Komentarze.494 : MSQL495 Wykonywanie zapytań496 Tworzenie obiektów bazy danych.496 Usuwanie obiektów.498 Inne zapytania MSQL.498 Porównywanie łańcuchów w MSQL i MySQL498 RLIKE.499 W praktyce501
Część VII. Udostępnianie baz danych w sieci WWW / 503
Rozdział 22. Podstawy programowania sieciowego / 505 Podstawy architektury sieci WWW.505 HTML506 Formularze HTML507 Pola formularzy - znacznik 509 Pole tekstowe509 Pole hasła510 Pola wyboru511 Przyciski opcji.511 Pole załącznika pliku.512 Pola ukryte513 Przycisk SUBMIT.513 Przycisk RESET514 Rysunki jako przyciski SUBMIT515 Listy.515 PoleTEXTAREA517 CGI518 Przetwarzanie danych z formularza.519 Wysyłanie odpowiedzi do przeglądarki.519 XML521 Publikowanie danych z użyciem XML522 XML i relacyjne bazy danych.522 W praktyce523
Rozdział 23. Serwery aplikacji WWW / 525 Przegląd serwerów aplikacji WWW525 Ogólne uwagi na temat serwerów aplikacji526 Programy niezależne527 Perl/CGI527 Zapisywanie danych z formularza w bazie danych.531 Zapytania do bazy danych z wnętrza skryptu CGI534 Programy osadzane w kodzie HTML536 ColdFusion536 Zapytania do bazy danych z wnętrza programu ColdFusion537 ASP.540 Zapytania do bazy danych z wnętrza skryptu ASP541 Serwlety Javy.543 Systemy oparte na wzorcach dokumentów.544 Zasada działania serwerów opartych na wzorcach dokumentów545 W praktyce545 #16
Rozdział 24. Przykładowa aplikacja WWW / 547 Architektura aplikacji 548 Strona z listą filmów548 Strona informacji szczegółowych553 Dodawanie nowego filmu558 Skrypt walidacji danych562 Skrypt tworzący formularz563 Modyfikacja istniejącego filmu.567 Edycja obsady filmu570 Modyfikowanie lokalizacji zdjęć.576 Usuwanie filmów.579 W praktyce580
Dodatki / 581 Dodatek A Wyjątki systemowe w języku PL/SOL583 Skorowidz / 585
#17 O Autorze
Rafe Colburn jest konsultantem w firmie Interpath Communications. Do jego obowiązków należy projektowanie aplikacji oraz baz danych związanych z dużymi projektami internetowymi. Rafe jest również autorem książki "Teach Yourself CGI Programming in a Week" i współautorem książki "Teach Yourself Netscape Web Publishing in a Week". Dom autora znajduje się w Apex, Północna Karolina. Można skontaktować się z nim za pośrednictwem poczty elektronicznej - rafe@rc3.org lub odwiedzić jego stronę - http://rc3.org. Więcej informacji na temat tej książki można znaleźć pod adresem http://rc3.org/sqlbook. #19 Wstęp
Relacyjne bazy danych są jednymi z najważniejszych i najczęściej używanych aplikacji komputerowych. Udostępniają użyteczne i elastyczne mechanizmy przechowywania wszelkiego rodzaju informacji. W rzeczywistości większość aplikacji korzysta obecnie z baz danych w sposób bezpośredni lub pośredni. Relacyjny model danych, opisany szczegółowo w pierwszym rozdziale książki, cechuje się niezwykłą skalowalnością. Nic więc dziwnego, iż relacyjne bazy danych używane są w aplikacjach tak małych jak prywatny spis telefonów, aż po potężne magazyny danych stosowane w bankach do zapisywania wszelkich realizowanych transakcji. SQL (Structured Query Language), jest językiem zapytań umożliwiającym programistom pobieranie i zapisywanie danych oraz zarządzanie większością relacyjnych baz danych. Mimo że istnieją pewne różnice w sposobie obsługiwania SQL-a przez różne systemy baz danych, język ten jest na tyle ustandaryzowany, iż opanowanie go dla jednej bazy danych jest wystarczające, aby móc korzystać z niego w dowolnym innym systemie obsługującym SQL. Na język SQL składa się zaledwie kilka typów wyrażeń, na tyle prostych, iż nauczenie się ich składni nie sprawia żadnego kłopotu, a w zamian umożliwia wykonywanie wielu nieskomplikowanych zapytań. Wraz z poznawaniem kolejnych cech języka można rozbudowywać swoje własne zapytania, uzyskując w ten sposób coraz lepszą dokładność odpowiedzi. Jedną z najciekawszych cech języka SQL jest możliwość eksperymentowania. Zapytania wydobywające dane są zupełnie odrębną rzeczą w porównaniu do zapytań modyfikujących dane. Można zatem wpisywać dowolne konstrukcje zapytań wybierających bez obawy przypadkowego uszkodzenia danych w bazie. Do eksperymentowania zachęca również prostota tworzenia zapytań (większość z nich składa się z pojedynczego wyrażenia). Wszystkie systemy baz danych zaopatrzone są w interaktywne programy umożliwiające wpisywanie zapytań z klawiatury i natychmiastowe oglądanie ich rezultatów. Daje to możliwość momentalnego wprowadzania zmian do składni zapytania, aż do momentu uzyskania zadowalającej odpowiedzi. W ten sposób można na przykład przygotować zapytania, które następnie zaimplementowane zostaną w aplikacji. #20 Kompozycja książki
Rozdział 1. książki "SQL", stanowi wprowadzenie do języka, które umożliwi dalsze pogłębianie wiedzy w tym zakresie. Rozdział opisuje działanie relacyjnych baz danych, a także przedstawia pewien rys historyczny. Opisana została również podstawowa składnia języka SQL.
Rozdział 2. "Projektowanie baz danych", poświęcony jest projektowaniu relacyjnych baz danych. Dyskutowane są w nim takie pojęcia jak: modelowanie związków encji oraz normalizacja bazy danych. Zrozumienie tych zagadnień ma kluczowe znaczenie przy konstruowaniu baz danych zapewniających najwyższy stopień integralności danych bez zbędnej utraty wydajności.
Rozdziały 3. "Tworzenie baz danych" i 4. "Wstawianie, modyfikacja i usuwanie rekordów", zagłębiają się jeszcze bardziej w język SQL. Ich celem jest omówienie procesu tworzenia tabel, podstawowego elementu służącego do przechowywania danych w relacyjnych bazach danych, a także wyrażeń SQL służących do wypełniania baz danych po ich utworzeniu. W rozdziale 3. poświęcono również miejsce na ogólne omówienie typów danych, jakie mogą być przechowywane w relacyjnej bazie danych. Tutaj wprowadzona zostaje również przykładowa baza danych, służąca do przechowywania informacji o filmach. Baza ta będzie stanowić podstawę do większości przykładów prezentowanych w dalszej części książki.
Rozdziały od 5. do 9. omawiają zagadnienie wydobywania danych. Wszystkie pięć rozdziałów poświęconych jest wyrażeniu SELECT, które w języku SQL służy do wydobywania danych z baz danych. Wykład rozpoczyna się od prostego wyjaśnienia sposobu pobierania danych z pojedynczej tabeli, a następnie przechodzi do opisu bardziej złożonych technik, takich jak korzystanie z funkcji agregujących w odniesieniu do grupy wierszy, łączenie wielu tabel w pojedynczym zapytaniu oraz używanie podzapytań w zapytaniu.
Rozdział 10. "Widoki", opisuje widoki jako środek umożliwiający zarządzanie uprawnieniami indywidualnych użytkowników do bazy danych. Rozdział 11. "Model bezpieczeństwa SQL", opisuje zasady nadawania i odbierania uprawnień użytkownikom do poszczególnych zasobów bazy danych. Rozdziały: 12. "Typy danych", 13. "Wydajność i integralność bazy danych" i 14. "Transakcje i kursory" poświęcone są rzeczywistym problemom, z jakimi programiści stykają się każdego dnia.
Rozdział 12. kontynuuje dyskusję z rozdziału 3., wyjaśniając szczegółowo, w jaki sposób w relacyjnych bazach danych korzysta się z różnych typów danych, w tym również w jaki sposób dokonuje się konwersji z jednego typu na inny. Rozdział 13. zagłębia się w zagadnienia wydajności bazy danych wyjaśniając sposób optymalizowania zapytań przez serwery baz danych przed ich faktycznym wykonaniem. Pewna część tego rozdziału opisuje zasady zachowania integralności bazy danych, czyli metody postępowania gwarantujące iż zawartość tabel jest tym, czego oczekujemy. #21 Rozdział 14. dotyczy dwóch zaawansowanych narzędzi wykorzystywanych przez programistów: kursorów i transakcji. Kursory umożliwiają przetwarzanie wyników zapytań wiersz po wierszu, natomiast transakcje służą do utrzymywania integralności bazy danych oraz zapewniają możliwość pełnego odtworzenia stanu bazy w przypadku wystąpienia krytycznych awarii.
Rozdziały: 15. "Procedury", 16. "Procedury w języku Transact-SQL" i 17. "Procedury w języku PL/SQL (Oracle)" poświęcone są zagadnieniu procedur. Procedury to nic innego jak małe programy zapisywane wewnątrz bazy danych tak, aby mogły być one wywoływane przez zewnętrzne aplikacje. Rozdział 15. stanowi ogólny opis procedur ze szczególnym naciskiem na te pisane w języku Transact-SQL. Rozdział 16. skupia się wyłącznie na procedurach w języku Transact-SQL. Rozdział 17. wyjaśnia budowę i działanie procedur w języku Oracle PL/SQL, które zupełnie odbiegają od procedur występujących w innych bazach danych.
Rozdziały od 18. do 21. poświęcone są konkretnym rozwiązaniom baz danych. Rozdział 18. "Oracle", omawia bazę danych Oracle, rozdział 19. "Microsoft SQL Server i Sybase Adaptive Server", skupia się na standardzie Transact-SQL zaimplementowanym w bazach firmy Sybase, a także w Serverze SQL firmy Microsoft. Rozdział 20. "Microsoft Access" poświęcony jest w całości bazie Microsoft Access. Rozdział 21. "MSQL i MySQL" omawia Mini-SQL i My-SQL - dwie proste bazy danych popularne w systemie Linux.
Rozdziały od 22. do 24. stanowią wprowadzenie do programowania sieciowego, a w szczególności do tworzenia aplikacji WWW współpracujących z bazami danych. Wyjaśnione zostają podstawy języka HTML, tworzenia formularzy na stronach WWW, a także różnorodne platformy służące do budowy aplikacji sieciowych.
Głównym celem tej książki jest nauczenie czytelnika standardu języka SQL, natomiast celem drugorzędnym - zapoznanie z narzędziami do budowy aplikacji sieciowych współpracujących z bazami danych. Książka ta nie wyjaśnia, w jaki sposób zbudować kompletną aplikację WWW przy użyciu jednego z serwerów aplikacji, zawiera jedynie generalne uwagi dotyczące roli, jaką bazy danych spełniają w dużych projektach aplikacji, a także wskazówki dotyczące metod budowania aplikacji zapewniających prawidłowe wykorzystanie relacyjnych baz danych. Połączenie wiedzy z zakresu języka SQL z wiedzą na temat projektowania i budowania aplikacji sieciowych stanowi narzędzie, którego celem jest umożliwienie czytelnikowi nie tylko odpytywania baz danych, ale również stosowania baz w dużych projektach aplikacji. Ostatni rozdział stanowi ogólne wprowadzenie do metod budowania aplikacji sieciowych w oparciu o bazy danych. W miarę wzrostu popularności sieci WWW, zarówno jako środka przekazu informacji dla ogromnej rzeszy użytkowników, jak również jako nowej platformy do tworzenia aplikacji, wykorzystanie baz danych przez programistów aplikacji sieciowych rośnie w tempie lawinowym. Niemal każda większa witryna WWW, istniejąca obecnie w sieci, używa w większym lub mniejszym stopniu relacyjnej bazy danych. Niektóre witryny wykorzystuj ą bazy jedynie do przechowywania danych, jak ma to miejsce w przypadku tradycyjnych aplikacji, inne witryny przechowują w bazach całą zawartość publikowaną w sieci WWW. #22 W miarę zbliżania się do siebie technologii WWW i baz danych niezbędne wydaje się wprowadzenie warstwy pośredniej między tymi dwoma zjawiskami. Niniejsza książka powinna pomóc programistom sieciowym w rozwinięciu wiedzy na temat programowania baz danych, natomiast programistom baz danych w zapoznaniu się z technikami budowy aplikacji sieciowych.
Konwencje przyjęte w książce
Jednym z elementów występujących w kolejnych rozdziałach książki jest sekcja "W praktyce". Po zakończeniu omawiania zagadnienia z danego rozdziału, prezentowane są dodatkowe informacje, które czytelnik może uznać za użyteczne przy próbie praktycznego wykorzystania materiału zawartego w rozdziale. Sekcje te zawierają informacje rozszerzające zagadnienie omawiane w samym rozdziale. W książce znaleźć można również Rady, Uwagi, Ostrzeżenia. Te elementy książki oferują różnorodne informacje poczynając od ostrzeżeń, o których warto pamiętać, po informacje pomocnicze mające na celu ułatwienie i zwiększenie efektywności programowania w języku SQL. ========== Rada Celem rad jest wskazanie trików, które pozwalają na skrócenie czasu niezbędnego do napisania wydajnego i użytecznego zapytania SQL, a także zwiększenie czytelności i przejrzystości tworzonych aplikacji bazodanowych. =========== =========== Uwaga Uwagi przekazują dodatkowe informacje związane z omawianym zagadnieniem, bez zbędnego przytłaczania czytelnika. W trakcie czytania można je pomijać, niemniej jednak są one źródłem użytecznych informacji w odniesieniu do prowadzonej dyskusji. ============ ============ Ostrzeżenie Nie należy ignorować ostrzeżeń pojawiających się w książce. Zapoznawanie się z ich treścią może zaoszczędzić wiele wysiłku i czasu pracy. ============