|
Systemy baz danych. Kompletny podręcznik. Wydanie II Autorzy: Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom Data wydania: 2011/10 Stron: 1048 Tytuł oryginału: Database Systems: The Complete Book (2nd Edition) Tłumaczenie: Tomasz Walczak ISBN: 978-83-[zasłonięte]-3303-6 Format: 172x245 Oprawa: twarda Numer z katalogu: 6656
Wydawnictwo Helion
Pierwsze tak szczegółowe, kompleksowe wprowadzenie!
Trzej znani naukowcy z dziedziny IT nauczą Cię:
profesjonalnego projektowania i korzystania z baz danych tworzenia i wdrażania złożonych aplikacji bazodanowych sprawnej implementacji systemów zarządzania bazami danych
Z kluczowej roli, jaką bazy danych odgrywają w codziennym życiu milionów ludzi, zdajemy sobie sprawę za każdym razem, gdy wpisujemy hasło w wyszukiwarce Google, robimy zakupy w internetowej księgarni czy logujemy się do swojego konta w banku. Szybkie, bezpieczne i niezawodne przetwarzanie oraz przechowywanie ogromnych ilości informacji stało się dziś strategicznym czynnikiem funkcjonowania większości firm, organizacji i instytucji państwowych. Ten ogromny potencjał współczesnych baz danych jest dziś sumą wiedzy i technologii rozwijanych przez kilka ostatnich dziesięcioleci. Owocem tych prac jest przede wszystkim wyspecjalizowane oprogramowanie - systemy zarządzania bazami danych DBMS, czyli rozbudowane narzędzia do wydajnego tworzenia dużych zbiorów informacji i zarządzania nimi. Niestety, mają one jedną zasadniczą wadę - należą do najbardziej złożonych rodzajów oprogramowania!
W związku z tym trzech znanych naukowców w dziedzinie IT z Uniwersytetu Stanforda. Hector Garcia-Molina, Jeffrey D. Ullman i Jennifer Widom - postanowiło stworzyć pierwszy tak kompletny podręcznik, wprowadzający do systemów baz danych. Zawiera on opis najnowszych standardów bazy danych SQL 1999, SQL/PSM, SQL/CLI, JDBC, ODL oraz XML - i to w znacznie szerszym zakresie niż w większości publikacji. Podręcznik został przygotowany w taki sposób, aby po jego przeczytaniu użytkowanie czy projektowanie baz danych, pisanie programów w różnych językach związanych z systemami DBMS oraz ich sprawna implementacja nie stanowiły dla Czytelnika najmniejszego problemu! W tej książce znajdziesz obszerne omówienie między innymi:
modelowania relacyjnego i wysokopoziomowego oraz języka UML i ODL zależności funkcyjnych i wielowartościowych oraz algorytmów umożliwiających manipulowanie zależnościami różnych aspektów programowania w języku SQL architektury trójwarstwowej, kostek danych, modelu relacji zagnieżdżonych i obiektowo-relacyjnych funkcji SQL-a XML-a i systemów opartych na tym języku zagadnień dotyczących sprawnego implementowania baz danych struktur używanych w indeksach, w tym drzew zbalansowanych, struktur haszujących i struktur dla indeksów wielowymiarowych wykonywania i optymalizowania zapytań, rejestrowania zdarzeń, kontrolowania współbieżności równoległych i rozproszonych baz danych, platformy Map Reduce, bazy danych P2P kluczowych technik, takich jak shingling, MinHash i LSH, służących do wyszukiwania podobnych elementów w dużych bazach danych algorytmów przeszukiwania sieci WWW, w tym algorytmu PageRank i jego odmian modelu strumieniowania danych i rozszerzenia języka SQL
Kompleksowe podejście do systemów baz danych ? z punktu widzenia projektanta, użytkownika i programisty.
Spis treści:
Wstęp (25) O autorach (29) 1. Świat systemów baz danych (31)
1.1. Ewolucja systemów baz danych (31) 1.1.1. Wczesne systemy zarządzania bazami danych (32) 1.1.2. Relacyjne systemy baz danych (32) 1.1.3. Coraz mniejsze systemy (33) 1.1.4. Coraz większe systemy (33) 1.1.5. Integrowanie informacji (34) 1.2. Elementy systemu zarządzania bazami danych (34) 1.2.1. Polecenia w języku definicji danych (34) 1.2.2. Omówienie przetwarzania zapytań (35) 1.2.3. Zarządzanie pamięcią i buforem (36) 1.2.4. Przetwarzanie transakcji (37) 1.2.5. Procesor zapytań (38) 1.3. Zarys dziedziny systemów baz danych (38) 1.4. Literatura do rozdziału 1. (40)
I: Modelowanie relacyjnych baz danych (41) 2. Relacyjny model danych (43)
2.1. Przegląd modeli danych (43) 2.1.1. Czym jest model danych? (43) 2.1.2. Ważne modele danych (44) 2.1.3. Krótki opis modelu relacyjnego (44) 2.1.4. Krótki opis modelu semistrukturalnego (45) 2.1.5. Inne modele danych (46) 2.1.6. Porównanie podejść do modelowania (46) 2.2. Podstawy modelu relacyjnego (47) 2.2.1. Atrybuty (47) 2.2.2. Schematy (47) 2.2.3. Krotki (48) 2.2.4. Dziedziny (48) 2.2.5. Równoważne reprezentacje relacji (49) 2.2.6. Egzemplarze relacji (49) 2.2.7. Klucze relacji (49) 2.2.8. Przykładowy schemat bazy danych (50) 2.2.9. Ćwiczenia do podrozdziału 2.2 (52) 2.3. Definiowanie schematu relacji w języku SQL (53) 2.3.1. Relacje w SQL-u (53) 2.3.2. Typy danych (54) 2.3.3. Proste deklaracje tabel (55) 2.3.4. Modyfikowanie schematów relacji (56) 2.3.5. Wartości domyślne (57) 2.3.6. Deklarowanie kluczy (57) 2.3.7. Ćwiczenia do podrozdziału 2.3 (59) 2.4. Algebraiczny język zapytań (60) 2.4.1. Dlaczego potrzebujemy specjalnego języka zapytań? (61) 2.4.2. Czym jest algebra? (61) 2.4.3. Przegląd algebry relacji (61) 2.4.4. Operacje specyficzne dla zbiorów wykonywane na relacjach (62) 2.4.5. Projekcja (63) 2.4.6. Selekcja (64) 2.4.7. Iloczyn kartezjański (65) 2.4.8. Złączenia naturalne (65) 2.4.9. Złączenia warunkowe (68) 2.4.10. Łączenie operacji w celu tworzenia zapytań (69) 2.4.11. Nadawanie i zmienianie nazw (70) 2.4.12. Zależności między operacjami (71) 2.4.13. Notacja liniowa wyrażeń algebraicznych (72) 2.4.14. Ćwiczenia do podrozdziału 2.4 (73) 2.5. Więzy relacji (79) 2.5.1. Algebra relacji jako język więzów (79) 2.5.2. Więzy integralności referencyjnej (80) 2.5.3. Więzy klucza (81) 2.5.4. Inne przykłady dotyczące więzów (82) 2.5.5. Ćwiczenia do podrozdziału 2.5 (82) 2.6. Podsumowanie rozdziału 2. (83) 2.7. Literatura do rozdziału 2. (84)
3. Teoria projektowania relacyjnych baz danych (85)
3.1. Zależności funkcyjne (85) 3.1.1. Definicja zależności funkcyjnej (86) 3.1.2. Klucze relacji (87) 3.1.3. Nadklucze (88) 3.1.4. Ćwiczenia do podrozdziału 3.1 (89) 3.2. Reguły dotyczące zależności funkcyjnych (89) 3.2.1. Wnioskowanie na temat zależności funkcyjnych (90) 3.2.2. Reguła podziału i łączenia (90) 3.2.3. Trywialne zależności funkcyjne (91) 3.2.4. Obliczanie domknięcia atrybutów (92) 3.2.5. Dlaczego algorytm obliczania domknięć działa? (94) 3.2.6. Reguła przechodniości (96) 3.2.7. Domykanie zbiorów zależności funkcyjnych (97) 3.2.8. Projekcje zależności funkcyjnych (98) 3.2.9. Ćwiczenia do podrozdziału 3.2 (99) 3.3. Projektowanie schematów relacyjnych baz danych (101) 3.3.1. Anomalie (101) 3.3.2. Dekompozycja relacji (102) 3.3.3. Postać normalna Boyce'a-Codda (103) 3.3.4. Dekompozycja do BCNF (104) 3.3.5. Ćwiczenia do podrozdziału 3.3 (107) 3.4. Dekompozycja - dobre, złe i okropne skutki (108) 3.4.1. Odzyskiwanie informacji po dekompozycji (108) 3.4.2. Test dla złączeń bezstratnych oparty na algorytmie chase (111) 3.4.3. Dlaczego algorytm chase działa? (113) 3.4.4. Zachowywanie zależności (114) 3.4.5. Ćwiczenia do podrozdziału 3.4 (115) 3.5. Trzecia postać normalna (116) 3.5.1. Definicja trzeciej postaci normalnej (116) 3.5.2. Algorytm syntezy do schematów o trzeciej postaci normalnej (117) 3.5.3. Dlaczego algorytm syntezy do 3NF działa? (118) 3.5.4. Ćwiczenia do podrozdziału 3.5 (118) 3.6. Zależności wielowartościowe (119) 3.6.1. Niezależność atrybutów i wynikająca z tego nadmiarowość (119) 3.6.2. Definicja zależności wielowartościowej (120) 3.6.3. Wnioskowanie na temat ZW (121) 3.6.4. Czwarta postać normalna (123) 3.6.5. Dekompozycja do czwartej postaci normalnej (124) 3.6.6. Związki między postaciami normalnymi (125) 3.6.7. Ćwiczenia do podrozdziału 3.6 (126) 3.7. Algorytm wyprowadzania ZW (127) 3.7.1. Domknięcie i algorytm chase (127) 3.7.2. Rozszerzanie algorytmu chase na ZW (128) 3.7.3. Dlaczego algorytm chase działa dla ZW? (130) 3.7.4. Projekcje ZW (131) 3.7.5. Ćwiczenia do podrozdziału 3.7 (132) 3.8. Podsumowanie rozdziału 3. (132) 3.9. Literatura do rozdziału 3. (134)
4. Wysokopoziomowe modele baz danych (135)
4.1. Model związków encji (136) 4.1.1. Zbiory encji (136) 4.1.2. Atrybuty (136) 4.1.3. Związki (137) 4.1.4. Diagramy ER (137) 4.1.5. Egzemplarze diagramów ER (138) 4.1.6. Krotność w związkach binarnych w modelu ER (139) 4.1.7. Związki wieloargumentowe (139) 4.1.8. Role w związkach (140) 4.1.9. Atrybuty związków (142) 4.1.10. Przekształcanie związków wieloargumentowych na binarne (143) 4.1.11. Podklasy w modelu ER (144) 4.1.12. Ćwiczenia do podrozdziału 4.1 (146) 4.2. Zasady projektowania (148) 4.2.1. Wierność (148) 4.2.2. Unikanie nadmiarowości (149) 4.2.3. Prostota ma znaczenie (149) 4.2.4. Wybór odpowiednich związków (149) 4.2.5. Wybór elementów odpowiedniego rodzaju (151) 4.2.6. Ćwiczenia do podrozdziału 4.2 (153) 4.3. Więzy w modelu ER (155) 4.3.1. Klucze w modelu ER (155) 4.3.2. Reprezentowanie kluczy w modelu ER (155) 4.3.3. Integralność referencyjna (156) 4.3.4. Więzy stopni (157) 4.3.5. Ćwiczenia do podrozdziału 4.3 (157) 4.4. Słabe zbiory encji (158) 4.4.1. Przyczyny tworzenia słabych zbiorów encji (158) 4.4.2. Wymogi związane ze słabymi zbiorami encji (160) 4.4.3. Notacja do opisu słabych zbiorów encji (161) 4.4.4. Ćwiczenia do podrozdziału 4.4 (161) 4.5. Z diagramów ER na projekty relacyjne (162) 4.5.1. Ze zbiorów encji na relacje (162) 4.5.2. Ze związków ER na relacje (163) 4.5.3. Łączenie relacji (165) 4.5.4. Przekształcanie słabych zbiorów encji (166) 4.5.5. Ćwiczenia do podrozdziału 4.5 (168) 4.6. Przekształcanie struktur podklas na relacje (169) 4.6.1. Przekształcanie w stylu modelu ER (170) 4.6.2. Podejście obiektowe (171) 4.6.3. Stosowanie wartości null do łączenia relacji (171) 4.6.4. Porównanie podejść (172) 4.6.5. Ćwiczenia do podrozdziału 4.6 (173) 4.7. Język UML (174) 4.7.1. Klasy w języku UML (174) 4.7.2. Klucze klas w UML-u (175) 4.7.3. Asocjacje (175) 4.7.4. Asocjacje zwrotne (177) 4.7.5. Klasy asocjacji (177) 4.7.6. Podklasy w UML-u (178) 4.7.7. Agregacje i kompozycje (179) 4.7.8. Ćwiczenia do podrozdziału 4.7 (180) 4.8. Z diagramów UML na relacje (181) 4.8.1. Podstawy przekształcania diagramów UML na relacje (181) 4.8.2. Z podklas w UML-u na relacje (181) 4.8.3. Z agregacji i kompozycji na relacje (182) 4.8.4. Odpowiednik słabych zbiorów encji w UML-u (183) 4.8.5. Ćwiczenia do podrozdziału 4.8 (184) 4.9. Język ODL (184) 4.9.1. Deklaracje klas (184) 4.9.2. Atrybuty w ODL-u (185) 4.9.3. Związki w ODL-u (186) 4.9.4. Związki zwrotne (186) 4.9.5. Krotność związków (187) 4.9.6. Typy w ODL-u (188) 4.9.7. Podklasy w ODL-u (190) 4.9.8. Deklarowanie kluczy w ODL-u (190) 4.9.9. Ćwiczenia do podrozdziału 4.9 (192) 4.10. Z projektów w ODL-u na projekty relacyjne (192) 4.10.1. Z klas w ODL-u na relacje (193) 4.10.2. Atrybuty złożone w klasach (193) 4.10.3. Przedstawianie atrybutów wartości w formie zbioru (194) 4.10.4. Reprezentowanie innych konstruktorów typów (195) 4.10.5. Przedstawianie związków w ODL-u (197) 4.10.6. Ćwiczenia do podrozdziału 4.10 (197) 4.11. Podsumowanie rozdziału 4. (198) 4.12. Literatura do rozdziału 4. (200)
II: Programowanie relacyjnych baz danych (201) 5. Algebraiczne i logiczne języki zapytań (203)
5.1. Operacje relacyjne na wielozbiorach (203) 5.1.1. Dlaczego wielozbiory? (204) 5.1.2. Suma, część wspólna i różnica dla wielozbiorów (205) 5.1.3. Projekcje wielozbiorów (206) 5.1.4. Selekcja na wielozbiorach (207) 5.1.5. Iloczyn kartezjański wielozbiorów (207) 5.1.6. Złączenia wielozbiorów (208) 5.1.7. Ćwiczenia do podrozdziału 5.1 (209) 5.2. Dodatkowe operatory algebry relacji (210) 5.2.1. Eliminowanie powtórzeń (211) 5.2.2. Operatory agregacji (211) 5.2.3. Grupowanie (212) 5.2.4. Operator grupowania (213) 5.2.5. Rozszerzanie operatora projekcji (214) 5.2.6. Operator sortowania (215) 5.2.7. Złączenia zewnętrzne (216) 5.2.8. Ćwiczenia do podrozdziału 5.2 (218) 5.3. Logika relacji (219) 5.3.1. Predykaty i atomy (219) 5.3.2. Atomy arytmetyczne (220) 5.3.3. Reguły i zapytania w Datalogu (220) 5.3.4. Znaczenie reguł Datalogu (221) 5.3.5. Predykaty ekstensjonalne i intensjonalne (223) 5.3.6. Reguły Datalogu stosowane do wielozbiorów (224) 5.3.7. Ćwiczenia do podrozdziału 5.3 (225) 5.4. Algebra relacji i Datalog (226) 5.4.1. Operacje logiczne (226) 5.4.2. Projekcja (227) 5.4.3. Selekcja (228) 5.4.4. Iloczyn kartezjański (230) 5.4.5. Złączenia (230) 5.4.6. Symulowanie w Datalogu operacji złożonych (231) 5.4.7. Porównanie Datalogu i algebry relacji (232) 5.4.8. Ćwiczenia do podrozdziału 5.4 (233) 5.5. Podsumowanie rozdziału 5. (234) 5.6. Literatura do rozdziału 5. (235)
6. SQL - język baz danych (237)
6.1. Proste zapytania w SQL-u (238) 6.1.1. Projekcje w SQL-u (240) 6.1.2. Selekcja w SQL-u (242) 6.1.3. Porównywanie łańcuchów znaków (243) 6.1.4. Dopasowywanie wzorców w SQL-u (243) 6.1.5. Data i czas (244) 6.1.6. Wartości NULL i porównania z takimi wartościami (245) 6.1.7. Wartość logiczna UNKNOWN (246) 6.1.8. Porządkowanie danych wyjściowych (248) 6.1.9. Ćwiczenia do podrozdziału 6.1 (249) 6.2. Zapytania obejmujące więcej niż jedną relację (251) 6.2.1. Iloczyn kartezjański i złączenia w SQL-u (251) 6.2.2. Jednoznaczne określanie atrybutów (252) 6.2.3. Zmienne krotkowe (253) 6.2.4. Przetwarzanie zapytań obejmujących wiele relacji (254) 6.2.5. Suma, część wspólna i różnica zapytań (256) 6.2.6. Ćwiczenia do podrozdziału 6.2 (258) 6.3. Podzapytania (259) 6.3.1. Podzapytania zwracające wartości skalarne (260) 6.3.2. Warunki dotyczące relacji (261) 6.3.3. Warunki obejmujące krotki (262) 6.3.4. Podzapytania skorelowane (263) 6.3.5. Podzapytania w klauzulach FROM (264) 6.3.6. Wyrażenia ze złączeniami w SQL-u (265) 6.3.7. Złączenia naturalne (266) 6.3.8. Złączenia zewnętrzne (267) 6.3.9. Ćwiczenia do podrozdziału 6.3 (269) 6.4. Operacje na całych relacjach (271) 6.4.1. Eliminowanie powtórzeń (271) 6.4.2. Powtórzenia w sumach, częściach wspólnych i różnicach (272) 6.4.3. Grupowanie i agregacja w SQL-u (273) 6.4.4. Operatory agregacji (273) 6.4.5. Grupowanie (274) 6.4.6. Grupowanie, agregacja i wartości null (276) 6.4.7. Klauzule HAVING (277) 6.4.8. Ćwiczenia do podrozdziału 6.4 (278) 6.5. Modyfikowanie bazy danych (279) 6.5.1. Wstawianie (279) 6.5.2. Usuwanie (281) 6.5.3. Aktualizowanie (282) 6.5.4. Ćwiczenia do podrozdziału 6.5 (283) 6.6. Transakcje w SQL-u (284) 6.6.1. Możliwość szeregowania operacji (284) 6.6.2. Atomowość (286) 6.6.3. Transakcje (286) 6.6.4. Transakcje tylko do odczytu (287) 6.6.5. Odczyt "brudnych danych" (288) 6.6.6. Inne poziomy izolacji (291) 6.6.7. Ćwiczenia do podrozdziału 6.6 (292) 6.7. Podsumowanie rozdziału 6. (293) 6.8. Literatura do rozdziału 6. (294)
7. Więzy i wyzwalacze (295)
7.1. Klucze zwykłe i klucze obce (295) 7.1.1. Deklarowanie więzów klucza obcego (296) 7.1.2. Zachowywanie integralności referencyjnej (297) 7.1.3. Odroczone sprawdzanie więzów (299) 7.1.4. Ćwiczenia do podrozdziału 7.1 (301) 7.2. Więzy atrybutów i krotek (302) 7.2.1. Więzy NOT NULL (302) 7.2.2. Więzy CHECK atrybutów (303) 7.2.3. Więzy CHECK krotek (304) 7.2.4. Porównanie więzów krotek i atrybutów (305) 7.2.5. Ćwiczenia do podrozdziału 7.2 (306) 7.3. Modyfikowanie więzów (307) 7.3.1. Przypisywanie nazw więzom (307) 7.3.2. Modyfikowanie więzów tabel (308) 7.3.3. Ćwiczenia do podrozdziału 7.3 (309) 7.4. Asercje (309) 7.4.1. Tworzenie asercji (310) 7.4.2. Stosowanie asercji (310) 7.4.3. Ćwiczenia do podrozdziału 7.4 (311) 7.5. Wyzwalacze (312) 7.5.1. Wyzwalacze w SQL-u (313) 7.5.2. Możliwości w zakresie projektowania wyzwalaczy (314) 7.5.3. Ćwiczenia do podrozdziału 7.5 (317) 7.6. Podsumowanie rozdziału 7. (319) 7.7. Literatura do rozdziału 7. (319)
8. Widoki i indeksy (321)
8.1. Widoki wirtualne (321) 8.1.1. Deklarowanie widoków (321) 8.1.2. Zapytania o widoki (323) 8.1.3. Zmienianie nazw atrybutów (323) 8.1.4. Ćwiczenia do podrozdziału 8.1 (324) 8.2. Modyfikowanie widoków (324) 8.2.1. Usuwanie widoku (324) 8.2.2. Widoki modyfikowalne (325) 8.2.3. Wyzwalacze INSTEAD OF dla widoków (327) 8.2.4. Ćwiczenia do podrozdziału 8.2 (328) 8.3. Indeksy w SQL-u (329) 8.3.1. Cel stosowania indeksów (329) 8.3.2. Deklarowanie indeksów (330) 8.3.3. Ćwiczenia do podrozdziału 8.3 (331) 8.4. Wybieranie indeksów (331) 8.4.1. Prosty model kosztów (331) 8.4.2. Wybrane przydatne indeksy (332) 8.4.3. Obliczanie najlepszych indeksów (333) 8.4.4. Automatyczne wybieranie tworzonych indeksów (336) 8.4.5. Ćwiczenia do podrozdziału 8.4 (337) 8.5. Widoki zmaterializowane (337) 8.5.1. Przechowywanie widoku zmaterializowanego (338) 8.5.2. Okresowa konserwacja widoków zmaterializowanych (339) 8.5.3. Modyfikowanie zapytań w celu zastosowania widoków zmaterializowanych (340) 8.5.4. Automatyczne tworzenie widoków zmaterializowanych (342) 8.5.5. Ćwiczenia do podrozdziału 8.5 (342) 8.6. Podsumowanie rozdziału 8. (343) 8.7. Literatura do rozdziału 8. (344)
9. SQL w środowisku serwerowym (345)
9.1. Architektura trójwarstwowa (345) 9.1.1. Warstwa serwerów WWW (346) 9.1.2. Warstwa aplikacji (347) 9.1.3. Warstwa bazy danych (347) 9.2. Środowisko SQL-a (348) 9.2.1. Środowiska (348) 9.2.2. Schematy (349) 9.2.3. Katalogi (350) 9.2.4. Klienty i serwery w środowisku SQL-a (350) 9.2.5. Połączenia (351) 9.2.6. Sesje (352) 9.2.7. Moduły (352) 9.3. Interfejs łączący SQL z językiem macierzystym (353) 9.3.1. Problem niezgodności impedancji (354) 9.3.2. Łączenie SQL-a z językiem macierzystym (355) 9.3.3. Sekcja DECLARE (355) 9.3.4. Używanie zmiennych wspólnych (356) 9.3.5. Jednowierszowe instrukcje SELECT (357) 9.3.6. Kursory (357) 9.3.7. Modyfikowanie danych za pomocą kursora (359) 9.3.8. Zabezpieczanie się przed jednoczesnymi aktualizacjami (360) 9.3.9. Dynamiczny SQL (361) 9.3.10. Ćwiczenia do podrozdziału 9.3 (362) 9.4. Procedury składowane (363) 9.4.1. Tworzenie funkcji i procedur w PSM-ie (364) 9.4.2. Wybrane proste formy instrukcji w PSM-ie (365) 9.4.3. Instrukcje rozgałęziające (366) 9.4.4. Zapytania w PSM-ie (367) 9.4.5. Pętle w PSM-ie (368) 9.4.6. Pętle FOR (370) 9.4.7. Wyjątki w PSM-ie (371) 9.4.8. Stosowanie funkcji i procedur PSM-a (373) 9.4.9. Ćwiczenia do podrozdziału 9.4 (373) 9.5. Używanie interfejsu poziomu wywołań (375) 9.5.1. Wprowadzenie do SQL/CLI (375) 9.5.2. Przetwarzanie instrukcji (377) 9.5.3. Pobieranie danych z wyników zapytania (378) 9.5.4. Przekazywanie parametrów do zapytań (380) 9.5.5. Ćwiczenia do podrozdziału 9.5 (381) 9.6. Interfejs JDBC (381) 9.6.1. Wprowadzenie do JDBC (381) 9.6.2. Tworzenie instrukcji w JDBC (382) 9.6.3. Operacje na kursorach w JDBC (384) 9.6.4. Przekazywanie parametrów (385) 9.6.5. Ćwiczenia do podrozdziału 9.6 (385) 9.7. PHP (385) 9.7.1. Podstawy PHP (386) 9.7.2. Tablice (387) 9.7.3. Biblioteka DB z repozytorium PEAR (387) 9.7.4. Tworzenie połączenia z bazą danych za pomocą biblioteki DB (388) 9.7.5. Wykonywanie instrukcji SQL-a (388) 9.7.6. Operacje oparte na kursorze w PHP (389) 9.7.7. Dynamiczny SQL w PHP (389) 9.7.8. Ćwiczenia do podrozdziału 9.7 (390) 9.8. Podsumowanie rozdziału 9. (390) 9.9. Literatura do rozdziału 9. (391)
10. Zaawansowane zagadnienia z obszaru relacyjnych baz danych (393)
10.1. Bezpieczeństwo i uwierzytelnianie użytkowników w SQL-u (393) 10.1.1. Uprawnienia (394) 10.1.2. Tworzenie uprawnień (395) 10.1.3. Proces sprawdzania uprawnień (396) 10.1.4. Przyznawanie uprawnień (397) 10.1.5. Diagramy przyznanych uprawnień (398) 10.1.6. Odbieranie uprawnień (400) 10.1.7. Ćwiczenia do podrozdziału 10.1 (403) 10.2. Rekurencja w SQL-u (404) 10.2.1. Definiowanie relacji rekurencyjnych w SQL-u (404) 10.2.2. Problematyczne wyrażenia w rekurencyjnym SQL-u (407) 10.2.3. Ćwiczenia do podrozdziału 10.2 (409) 10.3. Model obiektowo-relacyjny (410) 10.3.1. Od relacji do relacji obiektowych (411) 10.3.2. Relacje zagnieżdżone (411) 10.3.3. Referencje (413) 10.3.4. Podejście obiektowe a obiektowo-relacyjne (414) 10.3.5. Ćwiczenia do podrozdziału 10.3 (415) 10.4. Typy definiowane przez użytkownika w SQL-u (415) 10.4.1. Definiowanie typów w SQL-u (415) 10.4.2. Deklaracje metod w typach UDT (417) 10.4.3. Definicje metod (417) 10.4.4. Deklarowanie relacji za pomocą typów UDT (418) 10.4.5. Referencje (418) 10.4.6. Tworzenie identyfikatorów obiektów dla tabel (419) 10.4.7. Ćwiczenia do podrozdziału 10.4 (421) 10.5. Operacje na danych obiektowo-relacyjnych (421) 10.5.1. Podążanie za referencjami (421) 10.5.2. Dostęp do komponentów krotek o typie UDT (422) 10.5.3. Generatory i modyfikatory (423) 10.5.4. Sortowanie elementów o typie UDT (425) 10.5.5. Ćwiczenia do podrozdziału 10.5 (426) 10.6. Techniki OLAP (427) 10.6.1. OLAP i hurtownie danych (428) 10.6.2. Aplikacje OLAP (428) 10.6.3. Wielowymiarowe ujęcie danych w aplikacjach OLAP (429) 10.6.4. Schemat gwiazdy (430) 10.6.5. Podział i wycinki (432) 10.6.6. Ćwiczenia do podrozdziału 10.6 (434) 10.7. Kostki danych (435) 10.7.1. Operator kostki (CUBE) (435) 10.7.2. Operator kostki w SQL-u (437) 10.7.3. Ćwiczenia do podrozdziału 10.7 (438) 10.8. Podsumowanie rozdziału 10. (439) 10.9. Literatura do rozdziału 10. (441)
III: Modelowanie i programowanie danych semistrukturalnych (443) 11. Semistrukturalny model danych (445)
11.1. Dane semistrukturalne (445) 11.1.1. Uzasadnienie powstania modelu danych semistrukturalnych (445) 11.1.2. Reprezentowanie danych semistrukturalnych (446) 11.1.3. Integrowanie informacji za pomocą danych semistrukturalnych (447) 11.1.4. Ćwiczenia do podrozdziału 11.1 (449) 11.2. XML (449) 11.2.1. Znaczniki semantyczne (449) 11.2.2. XML ze schematem i bez niego (450) 11.2.3. Poprawny składniowo XML (450) 11.2.4. Atrybuty (452) 11.2.5. Atrybuty łączące elementy (452) 11.2.6. Przestrzenie nazw (453) 11.2.7. XML i bazy danych (454) 11.2.8. Ćwiczenia do podrozdziału 11.2 (455) 11.3. Definicje typów dokumentu (455) 11.3.1. Forma definicji DTD (456) 11.3.2. Korzystanie z definicji DTD (458) 11.3.3. Listy atrybutów (459) 11.3.4. Identyfikatory i referencje (460) 11.3.5. Ćwiczenia do podrozdziału 11.3 (461) 11.4. XML Schema (462) 11.4.1. Struktura dokumentów XML Schema (462) 11.4.2. Elementy (462) 11.4.3. Typy złożone (463) 11.4.4. Atrybuty (465) 11.4.5. Typy proste z ograniczeniami (466) 11.4.6. Klucze w XML Schema (467) 11.4.7. Klucze obce w dokumentach XML Schema (469) 11.4.8. Ćwiczenia do podrozdziału 11.4 (471) 11.5. Podsumowanie rozdziału 11. (471) 11.6. Literatura do rozdziału 11. (472)
12. Języki programowania dla formatu XML (473)
12.1. XPath (473) 12.1.1. Model danych w języku XPath (473) 12.1.2. Węzły dokumentu (474) 12.1.3. Wyrażenia XPath (475) 12.1.4. Względne wyrażenia XPath (476) 12.1.5. Atrybuty w wyrażeniach XPath (476) 12.1.6. Osie (477) 12.1.7. Kontekst wyrażeń (478) 12.1.8. Symbole wieloznaczne (478) 12.1.9. Warunki w wyrażeniach XPath (479) 12.1.10. Ćwiczenia do podrozdziału 12.1 (481) 12.2. Język XQuery (483) 12.2.1. Podstawy języka XQuery (484) 12.2.2. Wyrażenia FLWR (484) 12.2.3. Zastępowanie zmiennych ich wartościami (488) 12.2.4. Złączenia w XQuery (489) 12.2.5. Operatory porównywania w XQuery (490) 12.2.6. Eliminowanie powtórzeń (491) 12.2.7. Kwantyfikatory w XQuery (492) 12.2.8. Agregacje (492) 12.2.9. Rozgałęzianie w wyrażeniach XQuery (493) 12.2.10. Sortowanie wyników zapytania (494) 12.2.11. Ćwiczenia do podrozdziału 12.2 (495) 12.3. Język XSLT (496) 12.3.1. Podstawy języka XSLT (496) 12.3.2. Szablony (496) 12.3.3. Pobieranie wartości z danych w formacie XML (497) 12.3.4. Rekurencyjne stosowanie szablonów (498) 12.3.5. Iteracje w XSLT (500) 12.3.6. Instrukcje warunkowe w XSLT (501) 12.3.7. Ćwiczenia do podrozdziału 12.3 (502) 12.4. Podsumowanie rozdziału 12. (503) 12.5. Literatura do rozdziału 12. (504)
IV: Implementowanie systemów baz danych (505) 13. Zarządzanie pamięcią drugiego stopnia (507)
13.1. Hierarchia pamięci (507) 13.1.1. Hierarchia pamięci (507) 13.1.2. Transfer danych między poziomami (509) 13.1.3. Pamięć nietrwała i trwała (509) 13.1.4. Pamięć wirtualna (510) 13.1.5. Ćwiczenia do podrozdziału 13.1 (511) 13.2. Dyski (511) 13.2.1. Mechanika dysków (511) 13.2.2. Kontroler dysku (513) 13.2.3. Cechy operacji dostępu do dysku (513) 13.2.4. Ćwiczenia do podrozdziału 13.2 (515) 13.3. Przyspieszanie dostępu do pamięci drugiego stopnia (516) 13.3.1. Model przetwarzania oparty na wejściu-wyjściu (516) 13.3.2. Porządkowanie danych według cylindrów (517) 13.3.3. Używanie wielu dysków (517) 13.3.4. Tworzenie dysków lustrzanych (518) 13.3.5. Szeregowanie operacji dyskowych i algorytm windy (518) 13.3.6. Wstępne pobieranie i buforowanie na dużą skalę (520) 13.3.7. Ćwiczenia do podrozdziału 13.3 (521) 13.4. Problemy z dyskami (522) 13.4.1. Nieregularne błędy (522) 13.4.2. Sumy kontrolne (523) 13.4.3. Pamięć stabilna (524) 13.4.4. Możliwości obsługi błędów w pamięci stabilnej (524) 13.4.5. Przywracanie danych po awarii dysku (525) 13.4.6. Tworzenie kopii lustrzanych jako technika zapewniania nadmiarowości (525) 13.4.7. Bloki parzystości (526) 13.4.8. Usprawnienie - RAID 5 (529) 13.4.9. Obsługa awarii kilku dysków (529) 13.4.10. Ćwiczenia do podrozdziału 13.4 (532) 13.5. Porządkowanie danych na dysku (534) 13.5.1. Rekordy o stałej długości (535) 13.5.2. Umieszczanie rekordów o stałej długości w blokach (536) 13.5.3. Ćwiczenia do podrozdziału 13.5 (537) 13.6. Przedstawianie adresów bloków i rekordów (537) 13.6.1. Adresy w systemach klient-serwer (537) 13.6.2. Adresy logiczne i ustrukturyzowane (538) 13.6.3. Przemiana wskaźników (539) 13.6.4. Zapisywanie bloków z powrotem na dysku (542) 13.6.5. Rekordy i bloki przyklejone (543) 13.6.6. Ćwiczenia do podrozdziału 13.6 (544) 13.7. Dane i rekordy o zmiennej długości (545) 13.7.1. Rekordy o polach o zmiennej długości (546) 13.7.2. Rekordy z powtarzającymi się polami (546) 13.7.3. Rekordy o zmiennym formacie (548) 13.7.4. Rekordy, które nie mieszczą się w bloku (549) 13.7.5. Obiekty BLOB (549) 13.7.6. Zapisywanie kolumn (550) 13.7.7. Ćwiczenia do podrozdziału 13.7 (551) 13.8. Modyfikowanie rekordów (552) 13.8.1. Wstawianie (552) 13.8.2. Usuwanie (553) 13.8.3. Aktualizacje (554) 13.8.4. Ćwiczenia do podrozdziału 13.8 (555) 13.9. Podsumowanie rozdziału 13. (555) 13.10. Literatura do rozdziału 13. (557)
14. Struktury indeksów (559)
14.1. Podstawy struktur indeksów (560) 14.1.1. Pliki sekwencyjne (560) 14.1.2. Indeksy gęste (561) 14.1.3. Indeksy rzadkie (562) 14.1.4. Wiele poziomów indeksu (562) 14.1.5. Indeksy pomocnicze (563) 14.1.6. Zastosowania indeksów pomocniczych (564) 14.1.7. Poziom pośredni w indeksach pomocniczych (565) 14.1.8. Pobieranie dokumentów i indeksy odwrócone (567) 14.1.9. Ćwiczenia do podrozdziału 14.1 (570) 14.2. Drzewa zbalansowane (571) 14.2.1. Struktura drzew zbalansowanych (572) 14.2.2. Zastosowania drzew zbalansowanych (574) 14.2.3. Wyszukiwanie w drzewach zbalansowanych (576) 14.2.4. Zapytania zakresowe (576) 14.2.5. Wstawianie elementów do drzew zbalansowanych (577) 14.2.6. Usuwanie elementów z drzew zbalansowanych (579) 14.2.7. Wydajność drzew zbalansowanych (582) 14.2.8. Ćwiczenia do podrozdziału 14.2 (582) 14.3. Tablice z haszowaniem (584) 14.3.1. Tablice z haszowaniem w pamięci drugiego stopnia (584) 14.3.2. Wstawianie elementów do tablicy z haszowaniem (585) 14.3.3. Usuwanie elementów z tablicy z haszowaniem (586) 14.3.4. Wydajność indeksów opartych na tablicy z haszowaniem (587) 14.3.5. Tablice z haszowaniem rozszerzalnym (587) 14.3.6. Wstawianie do tablic z haszowaniem rozszerzalnym (588) 14.3.7. Tablice z haszowaniem liniowym (590) 14.3.8. Wstawianie do tablic z haszowaniem liniowym (591) 14.3.9. Ćwiczenia do podrozdziału 14.3 (593) 14.4. Indeksy wielowymiarowe (595) 14.4.1. Zastosowania indeksów wielowymiarowych (595) 14.4.2. Wykonywanie zapytań zakresowych za pomocą tradycyjnych indeksów (596) 14.4.3. Wykonywanie zapytań o najbliższego sąsiada z wykorzystaniem tradycyjnych indeksów (597) 14.4.4. Przegląd struktur wielowymiarowych indeksów (598) 14.5. Struktury haszujące na wielowymiarowe dane (598) 14.5.1. Pliki siatki (598) 14.5.2. Wyszukiwanie w pliku siatki (599) 14.5.3. Wstawianie danych do plików siatki (600) 14.5.4. Wydajność plików siatki (602) 14.5.5. Podzielone funkcje haszujące (603) 14.5.6. Porównanie plików siatki i haszowania podzielonego (604) 14.5.7. Ćwiczenia do podrozdziału 14.5 (605) 14.6. Struktury drzewiaste dla danych wielowymiarowych (606) 14.6.1. Indeksy na wielu kluczach (607) 14.6.2. Wydajność indeksów na wielu kluczach (607) 14.6.3. Drzewa kd (608) 14.6.4. Operacje na drzewach kd (610) 14.6.5. Przystosowywanie drzew kd do pamięci drugiego stopnia (611) 14.6.6. Drzewa czwórkowe (612) 14.6.7. R-drzewa (613) 14.6.8. Operacje na r-drzewach (614) 14.6.9. Ćwiczenia do podrozdziału 14.6 (616) 14.7. Indeksy bitmapowe (617) 14.7.1. Uzasadnienie stosowania indeksów bitmapowych (618) 14.7.2. Bitmapy skompresowane (620) 14.7.3. Operacje na wektorach bitowych w postaci kodów długości serii (621) 14.7.4. Zarządzanie indeksami bitmapowymi (622) 14.7.5. Ćwiczenia do podrozdziału 14.7 (623) 14.8. Podsumowanie rozdziału 14. (623) 14.9. Literatura do rozdziału 14. (625)
15. Wykonywanie zapytań (627)
15.1. Wprowadzenie do operatorów z fizycznego planu zapytania (629) 15.1.1. Skanowanie tabel (629) 15.1.2. Sortowanie w trakcie skanowania tabel (629) 15.1.3. Model obliczeń dla operatorów fizycznych (630) 15.1.4. Parametry do pomiaru kosztów (630) 15.1.5. Koszty operacji wejścia-wyjścia dla operatorów skanowania (631) 15.1.6. Iteratory do implementowania operatorów fizycznych (631) 15.2. Algorytmy jednoprzebiegowe (634) 15.2.1. Algorytmy jednoprzebiegowe dla operacji krotkowych (635) 15.2.2. Algorytmy jednoprzebiegowe dla jednoargumentowych operacji na całych relacjach (636) 15.2.3. Algorytmy jednoprzebiegowe dla operacji dwuargumentowych (638) 15.2.4. Ćwiczenia do podrozdziału 15.2 (640) 15.3. Złączenia zagnieżdżone (641) 15.3.1. Krotkowe złączenia zagnieżdżone (641) 15.3.2. Iterator dla krotkowych złączeń zagnieżdżonych (642) 15.3.3. Algorytm złączenia zagnieżdżonego opartego na blokach (643) 15.3.4. Analiza złączeń zagnieżdżonych (644) 15.3.5. Przegląd opisanych wcześniej algorytmów (644) 15.3.6. Ćwiczenia do podrozdziału 15.3 (645) 15.4. Algorytmy dwuprzebiegowe oparte na sortowaniu (645) 15.4.1. Dwuetapowe wielościeżkowe sortowanie przez scalanie (646) 15.4.2. Eliminowanie powtórzeń za pomocą sortowania (647) 15.4.3. Grupowanie i agregacja z wykorzystaniem sortowania (647) 15.4.4. Algorytm obliczania sumy oparty na sortowaniu (648) 15.4.5. Obliczanie za pomocą sortowania części wspólnej i różnicy (649) 15.4.6. Prosty algorytm złączenia oparty na sortowaniu (649) 15.4.7. Analiza prostego złączenia przez sortowanie (650) 15.4.8. Wydajniejsze złączenie przez sortowanie (651) 15.4.9. Omówienie algorytmów opartych na sortowaniu (652) 15.4.10. Ćwiczenia do podrozdziału 15.4 (652) 15.5. Dwuprzebiegowe algorytmy oparte na haszowaniu (653) 15.5.1. Podział relacji przez haszowanie (653) 15.5.2. Algorytm usuwania powtórzeń oparty na haszowaniu (654) 15.5.3. Grupowanie i agregacja oparte na haszowaniu (654) 15.5.4. Suma, część wspólna i różnica oparte na haszowaniu (655) 15.5.5. Algorytm złączenia przez haszowanie (655) 15.5.6. Zmniejszanie liczby dyskowych operacji wejścia-wyjścia (656) 15.5.7. Przegląd algorytmów opartych na haszowaniu (658) 15.5.8. Ćwiczenia do podrozdziału 15.5 (659) 15.6. Algorytmy oparte na indeksach (659) 15.6.1. Indeksy klastrujące i nieklastrujące (659) 15.6.2. Selekcja oparta na indeksie (660) 15.6.3. Złączenie za pomocą indeksu (662) 15.6.4. Złączenia z wykorzystaniem posortowanego indeksu (663) 15.6.5. Ćwiczenia do podrozdziału 15.6 (664) 15.7. Zarządzanie buforem (665) 15.7.1. Architektura menedżera buforów (665) 15.7.2. Strategie zarządzania buforami (667) 15.7.3. Związki między fizycznym operatorem selekcji a zarządzaniem buforami (668) 15.7.4. Ćwiczenia do podrozdziału 15.7 (669) 15.8. Algorytmy o więcej niż dw&oacut
| |