okladka
Niniejsza książka pomoże Czytelnikowi w:
  • Poznaniu wewnętrznych koncepcji SQL-a
  • Stworzeniu serwisowalnego kodu, którym łatwo można się opiekować
  • Zapewnieniu poprawności rezultatów wszystkich kwerend
  • Kontrolowaniu dostępu do obiektów baz danych za pomocą przywilejów i widoków
  • Ochronie danych przed niepowołanym dostępem
  • Zoptymalizowaniu wydajności kwerend korzystających z wielu tabel
  • Poznaniu złożonych operatorów i warunków
  • Nauce efektywnego kontrolowania transakcji
  • Dostosowywaniu wyglądu tabel za pomocą widoków
  • Rozwiązaniu problemu zdenormalizowanych danych

  • Słowo wstępne (15)
  • Podziękowania (16)
  • O autorze (18)
Wstęp (19)
  • Dla kogo jest ta książka? (20)
  • Czemu powinienem tę książkę kupić? (21)
    • Mile widziana wiedza wstępna (21)
  • Zawartość i układ książki (21)
    • Jak najlepiej używać tej książki? (22)
  • Konwencje użyte w tej książce (22)
  • Na podstawie czego ta książka powstała i co warto przeczytać później (23)
Sekcja A Pobieranie danych
Rozdział 1. Wprowadzenie do języka SQL (27)
  • Serwery baz danych i ich poprzednicy (27)
    • Poprzednicy serwerów baz danych (27)
    • Nieproceduralne schematy przetwarzania (30)
  • Strukturalny język zapytań (SQL) (34)
    • Język SQL w aplikacjach bazodanowych (35)
    • Rozszerzenia proceduralne języka SQL (36)
  • Instalacja Oracle i dostrajanie stacji roboczej (37)
    • Instalacja Personal Oracle (37)
    • Dostosowywanie środowiska pracy (42)
    • Kopiowanie dostarczonych skryptów (44)
    • Dostosowywanie programu Notatnik (45)
    • Tworzenie ikon SQL do skryptów SQL (47)
    • Przenoszenie elementów na pulpit (49)
  • Dostrajanie bazy danych (50)
  • Uruchamianie bazy danych i SQL*Plus (51)
  • Podsumowanie (51)
Część I Pojedyncze tabele, pojedyncze wiersze (53)
Rozdział 2. Prosta instrukcja select (55)
  • Tabele bazy danych (55)
  • Typy danych numeryczne, znakowe i łańcuchy znakowe (57)
    • Całkowitoliczbowy typ danych: number() (57)
    • Ciągi znaków o stałej długości: char() (58)
    • Napisy o zmiennej długości: varchar2() i varchar() (59)
  • Przykładowe tablice bazy danych (59)
  • Podstawowa postać instrukcji select (60)
    • Pobieranie wszystkich wierszy i kolumn tabeli (60)
    • Pobieranie wszystkich wierszy i jednej wybranej kolumny tabeli (61)
    • Pobieranie wszystkich wierszy i zestawu wybranych kolumn tabeli (61)
    • Zmiana kolejności kolumn (63)
  • Odczyt całej tabeli a odczyt kombinacji poszczególnych pól (64)
    • Słowo kluczowe all (64)
    • Klauzula distinct (64)
  • Sortowanie wyników przy użyciu frazy order by (66)
    • Wyznaczanie kolumny sortującej przez nazwę (66)
    • Wyznaczanie kolumny sortującej przez kolejność (66)
    • Wyznaczanie sposobu sortowania: asc oraz desc (67)
    • Sortowanie na podstawie kilku kolumn (68)
    • Sortowanie według kolumn nie występujących na liście selekcji (69)
  • Podsumowanie (71)
Rozdział 3. Parę słów o czytelności i formatowaniu (73)
  • Formatowanie kodu SQL (74)
    • Formatowanie skryptów SQL (74)
    • Parę wyjątkowych sytuacji, kiedy nie warto stosować formatowania (76)
  • Dokumentacja i komentarze (78)
    • Co powinna zawierać dokumentacja (79)
    • Standardowe pliki ze skryptami i szablony (79)
  • Formatowanie wyników SQL (80)
    • Dodawanie tytułów: klauzule ttitle i btitle (81)
    • Długość stron wydruku wyjściowego (82)
    • Długość wierszy wydruku (84)
    • Format i nagłówki kolumn (85)
  • Podsumowanie (91)
Część II Konwertowanie wyników (93)
Rozdział 4. Operatory konwersji i podmiana wartości (95)
  • Użycie stałych (95)
    • Stałe numeryczne (96)
    • Stałe znakowe (96)
  • Konwertowanie danych numerycznych - obliczenia (97)
    • Operatory jednoargumentowe (98)
    • Dwuargumentowe operatory arytmetyczne (98)
    • Obliczenia przy użyciu więcej niż dwóch argumentów (99)
  • Konkatenacja tekstów (102)
  • Praca z pseudokolumnami (104)
    • Numer wiersza: rownum (104)
    • Identyfikator wiersza: rowid (105)
    • Sekwencje generowane przez bazę danych: currval i nextval (107)
  • Funkcje systemowe (110)
    • Bieżąca data i czas systemowy: sysdate (110)
    • Dane o użytkowniku: uid i user (110)
  • Wyrażenie decode (111)
  • Podsumowanie (113)
Rozdział 5. Proste funkcje numeryczne (115)
  • Proste funkcje numeryczne (116)
    • Wartość bezwzględna (abs) i znak liczby (sign) (116)
    • Przybliżanie z góry i od dołu: floor i ceil (118)
    • Funkcje zaokrąglające i obcinające: round i trunc (118)
  • Funkcje matematyczne (120)
    • Funkcja modulo: mod (121)
    • Funkcje potęgowe: power, exp i sqrt (121)
    • Funkcje logarytmiczne: log i ln (126)
  • Funkcje trygonometryczne: sin, cos oraz tan (127)
  • Funkcje hiperboliczne: sinh, cosh oraz tanh (128)
  • Podsumowanie (129)
Rozdział 6. Proste funkcje tekstowe (131)
  • Wybieranie podciągów, funkcje obcinające i wypełniające (131)
    • Podciągi: substr (132)
    • Odrzucanie części napisów: funkcje rtrim i ltrim (133)
    • Uzupełnianie napisów: rpad i lpad (136)
  • Funkcje konwersji napisów (138)
    • Podmienianie znaków: translate (138)
    • Podmiana części napisów: replace (141)
    • Zmiana wielkości liter (142)
    • Identyfikowanie podobnie brzmiących napisów: soundex (144)
  • Funkcja łącząca teksty: concat (145)
  • Podsumowanie (146)
Rozdział 7. Konwersje między tekstem a liczbą (147)
  • Funkcje analizujące napisy (147)
    • Długość napisu: length (148)
    • Porównanie podciągów oraz pozycja jednego napisu w innym: instr (151)
    • Bajtowy odpowiednik funkcji instr: instrb (155)
  • Funkcje konwersji typów danych (155)
    • Konwertowanie wartości na napis: to_char (155)
    • to_number (167)
  • Funkcje przekształcające znaki na ich kody i vice versa (167)
    • ascii (168)
    • Konwersja reprezentacji bajtowej na odpowiadający jej znak: chr (168)
  • Podsumowanie (169)
Część III Wyrażenia agregujące i warunkowe (171)
Rozdział 8. Wyrażenia agregujące i funkcje grupowe (173)
  • Wszystkie wiersze a wiersze pojedyncze (173)
  • Agregowanie podzbiorów wierszy: group by (174)
    • Kolumny zwykłe a kolumny grupowe (176)
  • Grupowanie według więcej niż jednej kolumny (179)
  • Funkcje grupowe (182)
    • Zliczanie wierszy: count (182)
    • Zliczanie sumy wartości: sum (183)
    • Wyznaczanie wartości największej i najmniejszej w zbiorze: max oraz min (185)
    • Wyliczanie średniej wartości w zbiorze: avg (185)
    • Wyliczanie wariancji i odchylenia standardowego dla wszystkich wartości kolumny: variance i stddev (187)
  • Podsumowanie (188)
Rozdział 9. Wyrażenia warunkowe (189)
  • Wartości wyrażeń warunkowych (189)
    • Ograniczanie zakresu wybieranych wierszy: fraza where (190)
    • Odrzucanie grup wierszy po dokonaniu obliczeń: having (192)
  • Operatory porównania (195)
    • Nierówność (<>) (195)
    • Mniejsze i większe:<oraz>(196)
    • Większe lub równe, mniejsze lub równe oraz zakres: >=, <= i between ... and (197)
    • Równy dowolnemu ze wskazanych (in) oraz różny od wszystkich (not in) (200)
    • Operatory podobieństwa: like oraz like ... escape (202)
    • Rzadziej używane operatory porównania: any, some i all (205)
  • Użycie numeru wiersza do ograniczania ilości pobieranych wierszy (205)
  • Porównywanie napisów (207)
    • Porównywanie bez rozróżniania wielkości liter (208)
    • Testowanie napisów o zmiennej długości pod kątem istnienia dodatkowych spacji (209)
    • Porównywanie napisów o przybliżonej wymowie: soundex (211)
  • Warunki w liście przecinkowej instrukcji select (212)
  • Podsumowanie (213)
Rozdział 10. Warunki złożone i operatory logiczne (215)
  • Operatory logiczne (215)
    • Logiczne zaprzeczenie: not (216)
    • Operator logicznej koniunkcji: and (219)
    • Operator alternatywy logicznej: or (221)
  • Zagnieżdżanie wyrażeń logicznych (223)
    • Wyrażenia złożone z or wyłączającym (227)
  • Negowanie złożonych wyrażeń warunkowych (prawa de Morgana): not or i not and (228)
  • Podsumowanie (230)
Część IV Typy danych i wartość null (233)
Rozdział 11. Dane numeryczne: typ number (235)
  • Liczby całkowite: number(zakres) (236)
    • Reprezentacja danych logicznych (239)
  • Liczby dziesiętne (241)
    • Liczby stałoprzecinkowe: number(zakres,dokładność) (241)
    • Liczby zmiennoprzecinkowe: number (248)
  • Podsumowanie (253)
Rozdział 12. Daty i określenia czasu: typ date (255)
  • Reprezentacja dat i czasu: typ date (256)
    • Charakterystyka typu date (259)
  • Dodawanie i odejmowanie dat i okresów (260)
    • Dodawanie dni (260)
    • Dodawanie i odejmowanie czasu (261)
    • Dodawanie i odejmowanie miesięcy: add_months (263)
    • Dodawanie i odejmowanie lat (264)
  • Wyliczanie odstępu między datami (264)
    • Dni (265)
    • Czas (265)
    • Wyliczanie ilości miesięcy pomiędzy datami: months_between (266)
    • Lata (267)
  • Funkcje specjalne do obsługi dni: last_day i next_day (268)
  • Kalendarz juliański (269)
  • Zaokrąglanie i obcinanie dat: round i trunc (269)
    • Zaokrąglanie i obcinanie dat z dokładnością do dnia (lata, miesiące i dni) (269)
    • Zaokrąglanie i obcinanie dat do innych jednostek czasu (271)
  • Konwersje między strefami czasowymi: new_time (277)
  • Możliwości formatowania dat: to_char (280)
    • Formatowanie części związanej z samą datą (lata, miesiące i dni) (280)
    • Wyświetlanie dat przy użyciu innych jednostek czasu (281)
  • Wstawianie dat ze specjalnymi kodami formatującymi: to_date (286)
  • Podsumowanie (286)
Rozdział 13. Rozszerzone typy danych (289)
  • Adresy fizyczne w bazie danych: rowid (289)
    • Użycie rowid (290)
    • rowid a funkcje konwersji napisów: rowidtochar i chartorowid (295)
  • Bardzo długie napisy: long (295)
  • Typy danych binarnych: raw i long raw (296)
    • Funkcje konwersji danych binarnych na ciągi heksadecymalne: rawtohex i hextoraw (297)
  • Podsumowanie (297)
Rozdział 14. Konwersje typów danych, porównywanie wartości (299)
  • Niejawne konwersje typów (300)
    • Konwersja napisów na wyrażenia numeryczne (301)
    • Porównywanie liczby z napisem (301)
    • Porównywanie dat z liczbami i napisami (303)
  • Porównywanie identyfikatora wiersza rowid z napisem (304)
    • Konwersje niejawne w instrukcjach insert i update (307)
  • Wymuszanie konwersji (308)
    • Konwersje między napisem a liczbą: to_number i to_char (309)
    • Konwersja między napisem a datą: to_date i to_char (311)
    • Konwersja między napisem a identyfikatorem wiersza rowid: rowidtochar i chartorowid (312)
    • Konwersja między wartościami raw i long raw a odpowiadającymi im ciągami heksadecymalnymi: rawtohex i hextoraw (313)
    • Konwersja między datą a odpowiadającą jej liczbą kalendarza juliańskiego: to_date i to_char (313)
  • Podsumowanie (314)
Rozdział 15. Brak danych, wartość null i wartości zerowe (317)
  • Wartość null w funkcjach agregujących (318)
    • Wpływ wartości pustych na count (318)
    • Wpływ wartości pustych na avg (321)
  • Podmiana wartości null na inną: nvl (323)
  • Zastępowanie wartości wartością null: decode(nuliff) (325)
  • Trójwartościowe instrukcje warunkowe (326)
    • Wartości puste w warunkach (326)
    • Wpływ wartości null na wyrażenia logiczne (328)
  • Wartości null w funkcjach konwersji (334)
  • Wartości null i operatory (335)
  • Dzielenie przez zero (336)
  • Podsumowanie (340)
Część V Praca z wieloma tabelami (343)
Rozdział 16. Pobieranie danych z wielu tabel (345)
  • Obsługa wielu tabel w SQL (346)
    • Wybieranie danych z wielu tabel - iloczyny kartezjańskie (złączenia kartezjańskie) (346)
  • Warunki złączenia jako metoda uniknięcia iloczynów kartezjańskich (348)
  • Aliasy tabel (353)
  • Tabele w relacji nadrzędna-podrzędna (355)
  • Tabele słownikowe a tabele w relacji nadrzędna-podrzędna (358)
  • Podsumowanie (359)
Rozdział 17. Złączenia (361)
  • Złączanie pasujących wierszy: złączenie wewnętrzne (domyślne) (362)
  • Włączanie wierszy nie mających odpowiedników w drugiej tabeli: lewe/prawe złączenia zewnętrzne (367)
    • Ograniczenia operatora złączeń zewnętrznych (373)
    • Pełne złączenia zewnętrzne (373)
  • Powtarzające się wiersze w rozpatrywanych tabelach (374)
  • Wartości null w kolumnach łączących (376)
  • Podsumowanie (379)
Część VI. Dostęp do danych z wielu tabel (381)
Rozdział 18. Łączenie danych z podobnych tabel - operatory zbiorów i pseudozbiorów (383)
  • Operatory zbiorów (384)
    • Pobranie wszystkich elementów: union (385)
    • Wybieranie elementów istniejących tylko w jednej z tabel: minus (387)
    • Pobieranie jedynie wierszy mających swoje odpowiedniki: intersect (390)
  • Pobieranie wszystkich wierszy z zapytań składowych: union all (394)
  • Łączenie operatorów zbiorów i pseudozbiorów (395)
    • Wyłączający operator union (396)
  • Pełne złączenia zewnętrzne realizowane przez union all (398)
  • Typowe błędy popełniane przy używaniu operatorów zbiorów (400)
    • Różna liczba kolumn (400)
    • Niezgodne typy danych (401)
  • Sortowanie wyników działania operatorów zbiorów i pseudozbiorów (405)
    • Sortowanie według wybranych kolumn (405)
    • Sortowanie według kolumn nie wybieranych w zapytaniu (408)
    • Sortowanie według fikcyjnych kolumn (409)
  • Podsumowanie (410)
Rozdział 19. Podzapytania zwracające jedną wartość (413)
  • Dwuetapowe uruchamianie zapytań (414)
  • Własności podzapytań warunkowych (416)
  • Jednowierszowe operatory porównania (417)
  • Podzapytania równoległe (419)
  • Podsumowanie (422)
Rozdział 20. Podzapytania zwracające wiele wartości (423)
  • Podzapytania zwracające wiele wierszy (423)
    • Wielowierszowe operatory porównania (426)
  • Podzapytania zwracające wiele kolumn (431)
  • Wirtualne widoki tworzone za pomocą podzapytań (433)
  • Podsumowanie (435)
Rozdział 21. Podzapytania związane (437)
  • Uruchamianie podzapytań związanych (437)
  • Podzapytania związane a tymczasowe widoki i tabele (443)
    • Uwagi na temat wydajności (445)
  • operatory exists i not exists (445)
    • not exists a not in (447)
  • Podsumowanie (450)
Rozdział 22. Drzewa i zapytania hierarchiczne (451)
  • Tablice złączane same ze sobą: złączenia rekursywne i zapytania N-poziomowe (451)
    • Podzapytania dwupoziomowe (452)
    • Podzapytania N-poziomowe (453)
  • Hierarchiczna instrukcja select: użycie connect by prior i start with (455)
    • Poziom węzła w hierarchii: level (457)
    • Formatowanie raportów hierarchicznych przy pomocy lpad (458)
  • Drzewa w wersji okrojonej (462)
    • Odrzucanie gałęzi: użycie connect by prior...and... (462)
  • Podsumowanie (464)
Rozdział 23. Generacja wyrażeń SQL za pomocą samego SQL (465)
  • Korzyści z generowania SQL za pomocą samego SQL (466)
  • Umieszczanie fragmentów kodu SQL w stałych (467)
    • Stałe w pojedynczym cudzysłowie (467)
    • Sztuczki związane z formatowaniem - końce wiersza i tabulatory (469)
    • Tworzenie złożonych zapytań jednotabelowych (470)
  • Przekierowanie wyników do pliku (471)
  • Usprawnianie generowania SQL za pomocą SQL przy użyciu tabeli SQLCONST (473)
  • Wstawianie sekcji komentarza (475)
  • Typowe zastosowania (477)
    • Definicja tabeli i zrzucenie jej zawartości (478)
  • Podsumowanie (481)
Sekcja B Modyfikacja informacji i obiektów bazy danych
Część VII Modyfikacja informacji (485)
Rozdział 24. Modyfikacja danych z pojedynczej tabeli (487)
  • Wstawianie nowych wierszy do tabeli: polecenie insert (488)
    • Wskazywanie kolumn do wstawienia (490)
    • Wstawianie wierszy które są wybrane z drugiej tabeli za pomocą podzapytania (491)
  • Usuwanie wierszy z tabeli: polecenia delete i truncate (493)
    • Nieodwracalne usuwanie wszystkich wierszy z tabeli: polecenie truncate table (496)
  • Aktualizowanie istniejących wierszy w tabeli: polecenie update (496)
    • Kwalifikacja wierszy do aktualizacji (498)
    • Aktualizacja za pomocą podzapytania wielokolumnowego (499)
  • Podsumowanie (501)
Rozdział 25. Transakcje (503)
  • Zatwierdzanie lub anulowanie zmian wprowadzonych do bazy danych: polecenia commit i rollback (503)
    • Jawne i domniemane polecenia commit (506)
    • Efekt użycia polecenia commit w różnych sesjach (509)
  • Schemat stopniowego anulowania/zatwierdzania: polecenie savepoint (512)
  • Podsumowanie (516)
Część VIII Optymalizacja wyglądu tabel poprzez widoki (519)
Rozdział 26. Widoki dla pojedynczej tabeli (521)
  • Podstawowe widoki synonimiczne (522)
    • Widok synonimiczny tabeli (523)
    • Widok synonimiczny kolumn (525)
  • Widoki maskujące (527)
    • Widoki maskujące kolumny (527)
    • Wstawianie, aktualizowanie i usuwanie na widokach maskujących kolumny (528)
    • Widoki maskujące wiersze (532)
    • Wstawianie, aktualizowanie i usuwanie w widoku maskującym wiersze (534)
  • Widoki o specjalnych opcjach (537)
    • Tworzenie widoków bez tabel bazowych: wyrażenie force (537)
    • Ograniczanie widoków tylko do odczytu: opcja with read only (539)
    • Zezwalanie tylko na te manipulacje danymi w widoku, które spełniają warunek wskazany w klauzuli where: opcja with check option (541)
  • Wirtualne widoki poprzez podzapytania (543)
  • Komentarze dla widoków w Słowniku Danych: polecenie comment on (544)
  • Podsumowanie (546)
Rozdział 27. Widoki wielotabelowe, selektywne oraz agregujące (547)
  • Ograniczenia polecenia select przy tworzeniu widoku (548)
  • Widoki agregujące (549)
  • Widoki selektywne (550)
  • Widoki wielotabelowe (551)
  • Widoki hierarchiczne (553)
  • Pobieranie pierwszych N-wierszy posortowanych (557)
  • Widoki oparte na operatorach (pseudo-) zbiorów (559)
  • Widoki wirtualne (widoki za pośrednictwem podzapytań) (560)
  • Podsumowanie (561)
Część IX Tabele (563)
Rozdział 28. Tworzenie tabel (565)
  • Tworzenie nowej tabeli (566)
    • Wartości domyślne: default (567)
    • Sposób przechowywania tabeli: dyrektywy przestrzeni i słowo kluczowe storage (568)
  • Praca z użytkownikami/schematami bazy danych: polecenie create user (573)
    • Synonimy (577)
  • Usuwanie tabel i ich zawartości z bazy danych: drop table (582)
    • Natychmiastowe i nieodwracalne usuwanie zawartości tabeli: truncate table (582)
  • Zmiana definicji istniejącej tabeli (583)
    • Zmiana nazwy tabeli (583)
    • Dodawanie kolumn: alter table ... add (585)
    • Zmiana definicji kolumny: alter table ... modify (586)
    • Drastyczne modyfikacje kolumny lub usuwanie kolumn - odtwarzanie definicji i kopiowanie zawartości (589)
  • Jednoetapowy proces tworzenia tabel których kolumny i zawartość są wyprowadzane z innych tabel (591)
    • Opcja unrecoverable (593)
    • Przenoszenie tabeli z jednego schematu do drugiego (593)
    • Tworzenie tabel słownikowych (SQL generujący SQL) (595)
  • Opcja cache (596)
  • Podsumowanie (597)
Rozdział 29. Klucze, indeksy, ograniczenia oraz komentarze dla tabeli/kolumny (599)
  • Ograniczenia statyczne (600)
  • Ograniczenia not null (600)
    • Ograniczenia check (602)
  • Nazywanie, włączanie i wyłączanie indeksów, kluczy i ograniczeń (608)
  • Nazywanie ograniczeń (608)
  • Włączanie i wyłączanie ograniczeń (612)
  • Ograniczenia dynamiczne dla kolumn (616)
  • Wymuszanie unikalnych wartości dla kluczy: unique (616)
  • Ograniczenia unique i check z wartościami null (618)
  • Klucze podstawowe (619)
  • Unikalne i podstawowe klucze złożone (621)
  • Określanie odpowiednich wartości dla kluczy (623)
  • Użycie generowanych numerów unikalnych lub sekwencji (624)
  • Wartość klucza z podzapytania (627)
  • Sekwencja w rodzicu (628)
  • Dynamiczne ograniczenia (więzy) pomiędzy tabelami - klucze obce (629)
  • Klucze obce pomiędzy tabelami (630)
    • Wstawianie wierszy do tabeli z kluczami obcymi (633)
    • Usuwanie wierszy z tabeli podrzędnej (634)
    • Łączenie poprzez klucze obce (635)
  • Rekurencyjne klucze obce (637)
  • Wielowarstwowe tabele rodzic-dziecko (640)
  • Umożliwienie szybkiego pobierania wierszy za pomocą indeksów (644)
  • Kolumny indeksowane: polecenie create index (645)
  • Indeksy na kolumnach o wartościach null (647)
  • Indeksy złożone (647)
  • Określanie parametrów sposobu przechowywania dla indeksów, kluczy podstawowych i kluczy unikalnych (649)
    • Dyrektywa przestrzeni: pctfree (649)
    • Charakterystyka sposobu przechowywania: storage (651)
  • Komentarze dla tabel i kolumn (654)
  • Podsumowanie (656)
Rozdział 30. Relacje między tabelami oraz diagramy związków encji (657)
  • Modelowanie związków encji (658)
    • Elementy diagramu związków encji (659)
  • Typowe związki encji (661)
    • Związki jeden do wielu (661)
    • Jeden do wielu w tej samej tabeli: złączenia rekurencyjne (662)
    • Związki jeden do jeden (663)
    • Związki wielowarstwowe: jeden do wielu do wielu (664)
    • Związki wiele do wielu i tabele przecięć (666)
    • Inne kombinacje (667)
  • Podsumowanie (669)
Rozdział 31. Opcjonalność związków tabel (671)
  • Związki wymagane i opcjonalne (672)
    • Związek wymagany wiele do opcjonalny jeden (673)
    • Związek opcjonalny wiele do opcjonalny jeden (674)
    • Związek opcjonalny jeden do opcjonalny jeden (674)
    • Związek wymagany jeden do wymagany jeden (675)
    • Związek wymagany nadrzędny do opcjonalny podrzędny (681)
  • Podsumowanie (684)
Rozdział 32. Projektowanie i normalizacja relacyjnej bazy danych (685)
  • Etapy projektowania bazy danych (686)
  • Estetyka projektu bazy danych (686)
    • Oszczędność i efektywność (687)
    • Prostota i wydajność (687)
    • Inne wymiary (689)
  • Normalizacja danych (689)
    • Pierwsza postać normalna: brak powtarzających się grup (690)
    • Druga postać normalna: zależność wszystkich atrybutów od jednoznacznego identyfikatora (691)
    • Trzecia postać normalna: Żaden atrybut nie będący częścią klucza nie zależy od innego atrybutu nie będącego częścią klucza (692)
  • Denormalizacja (695)
    • Manipulacja zdenormalizowanymi tabelami za pomocą kolumn zsynchronizowanych (696)
    • Fałszywe tablice (697)
  • Przykład pełnego modelu (698)
    • Encje i związki (700)
    • Konwertowanie modeli związków encji do modeli fizycznych (703)
  • Podsumowanie (710)
Część X Bezpieczeństwo (711)
Rozdział 33. Przywileje (713)
  • Użytkownicy bazy danych (714)
  • Ochrona obiektów i danych bazy danych (716)
    • Inne przywileje do obiektów: all, alter, index, references i execute (721)
    • Przwileje które mogą być przypisywane do obiektów (722)
    • Przyznawanie dostępu do obiektów na poziomie kolumny (722)
    • Zapytania o przywileje kolumnowe do Słownika Danych (727)
  • Zmiana charakterystyki użytkownika i udostępnianie zasobów bazy danych (728)
    • Przyznawanie przywileju create table (728)
    • Domyślne przestrzenie tabel i udziały (729)
    • Ustawianie domyślnych i tymczasowych przestrzeni tabel oraz udziałów (731)
  • Przyznawanie dalszych przywilejów (732)
    • Przywileje mające wpływ na pracę użytkownika w jego własnym schemacie (733)
    • Przywileje mające wpływ na schematy wszystkich (735)
    • Przywileje administratora baz danych (738)
    • Odbieranie przywilejów (739)
  • Podsumowanie (740)
Rozdział 34. Role bazy danych (741)
  • Tworzenie ról i przypisywanie rolom przywilejów (742)
  • Przypisywanie ról użytkownikom, uaktywnianie ról oraz ustawianie ról domyślnych (744)
    • Inne opcje set role i default role (749)
    • Implementowanie bezpieczeństwa poprzez role i proces uaktywniania (749)
  • Przyznawanie przywilejów publicznych (752)
  • Role predefiniowane (755)
  • Podsumowanie (759)
Rozdział 35. Udostępnianie i kontrola dostępu do obiektów bazy danych poprzez widoki (761)
  • Kontrola dostępu do wierszy poprzez widoki (761)
    • Tworzenie widoków kontrolujących dostęp do wiersza (762)
    • Dostęp do wierszy poprzez widoki kontrolujące dostęp do wierszy (764)
  • Podsumowanie (767)
Rozdział 36. Auditing (769)
  • Pola informujące o utworzeniu i aktualizacji (770)
    • Wyzwalacze bazy danych (770)
  • Tabele przebiegu transakcji (774)
  • Użycie funkcji auditingu wbudowanych do RDBMS (780)
  • Podsumowanie (780)
Sekcja C Zagadnienia optymalizacji i jakości danych
Część XI Optymalizacja (783)
Rozdział 37. Optymalizacja wydajności wykonywania poleceń: faza rozbioru (785)
  • Przetwarzanie zapytań SQL (786)
    • Kursory (786)
    • Rozbiór (787)
    • Wykonanie (787)
    • Zamykanie kursora (788)
  • Wpływ na ponowne użycie kursorów (788)
    • Otrzymywanie identycznych poleceń (789)
    • Zmienne związane (789)
    • Użycie zmiennych związanych (790)
    • Dane statystyczne poleceń SQL ze Słownika Danych (793)
    • Zmienne związane o różnych nazwach (795)
    • Białe znaki (797)
    • Komentarze w tekście SQL (799)
  • Optymalizacja wydajności a rzeczywistość (800)
  • Podsumowanie (801)
Rozdział 38. Optymalizacja wykonywania poleceń SQL (803)
  • Narzędzia Oracle zwiększające wydajność (804)
  • Instalacja SQL Station (806)
  • Użycie Plan Analyzer (814)
    • Analiza prostego zapytania (815)
    • Analiza posortowanego zapytania (818)
  • Kryteria decydujące o użyciu indeksu lub pełnego skanowania tabeli (822)
  • Optymalizacja pracy z wieloma tabelami (823)
    • Sprzężenie sortująco-scalające (sort merge) (823)
    • Sprzężenie zagnieżdżonych pętli (nested loop) (824)
    • Sprzężenie mieszające (hash) (825)
    • Kryteria wydajności (826)
  • Podsumowanie (828)
Rozdział 39. Testowanie i porządkowanie załadowanych danych (829)
  • Jakość danych (829)
    • Praca z danymi pochodzącymi z innych systemów (831)
    • Twarde fakty z życia analityków danych: niepoprawne dane mogą doprowadzić do tego, że wypadniesz z biznesu (832)
    • Etapy porządkowania danych (834)
  • Testowanie danych pod kątem integralności (836)
    • Kody selektywne (836)
    • Zakresy kodów i sprawdzanie wiarygodności (839)
    • Sprawdzanie wartości NULL (840)
    • Sprawdzanie pod względem unikalności (842)
    • Sprawdzanie wartości klucza obcego (849)
  • Kopiowanie rekordów i włączanie ograniczeń (851)
  • Niezgodne schematy kodowania (852)
    • Aktualizacja za pomocą wyrażenia decode (852)
    • Użycie tabeli słownikowej (854)
  • Praca z powtórzonymi wierszami reprezentującymi historię danych (861)
    • Nadpisywanie danych (861)
    • Eliminowanie zbędnych wierszy (862)
  • Zmiany w strukturach organizacyjnych (865)
  • Podsumowanie (868)
Skorowidz (869)