Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00098 010485 10716046 na godz. na dobę w sumie
Praktyki mistrza SQL. Programowanie zaawansowane - ebook/pdf
Praktyki mistrza SQL. Programowanie zaawansowane - ebook/pdf
Autor: Liczba stron: 752
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-2531-9 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> sql - programowanie
Porównaj ceny (książka, ebook (-20%), audiobook).
SQL jest narzędziem stworzonym specjalnie na potrzeby baz danych. Nauka tego języka wymaga dogłębnego zrozumienia mechanizmów relacyjnych baz danych. Co więcej, w przypadku dużych zbiorów danych lub zbiorów danych wymagających szczególnego traktowania pozornie nieznaczne usterki kodu SQL mogą prowadzić do istotnych problemów w użytkowaniu aplikacji.

Niniejsza książka jest przeznaczona dla aktywnych programistów SQL. Przedstawia zaawansowane techniki i idiomy programistyczne z obszaru tego języka. Pokazano w niej również, w jaki sposób można rozwiązywać problemy, które często pojawiają się w bazach danych. Prezentowane tu rozwiązania można implementować we właściwie wszystkich systemach bazodanowych korzystających z SQL. To klasyczny podręcznik, systematycznie uaktualniany, który doczekał się prawdziwego uznania wśród specjalistów.

W książce omówiono między innymi:

Skoro znasz SQL, to stań się jego ekspertem!


Joe Celko — uznany ekspert w dziedzinie baz danych. Z jego konsultacji korzystały m.in. służby medyczne, NASA, siły zbrojne USA. Autor wysoko cenionych książek dotyczących SQL. Napisał również ponad 1200 artykułów w prasie informatycznej i akademickiej. Większość tych tekstów dotyczyła danych i baz.
Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Joe Celko s SQL for Smartie: Advanced SQL Programming, 5th Edition Tłumaczenie: Tomasz Walczak ISBN: 978-83-283-2530-2 Copyright © 2015, 2011, 2005, 2000, 1995 Elsevier Inc. All rights reserved. No part of this publication may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or any information storage and retrieval system, without permission in writing from the publisher. This book and the individual contributions contained in it are protected under copyright by the Publisher (other than as may be noted herein). This edition of Joe Celko s SQL for Smartie: Advanced SQL Programming, 5th Edition by Joe Celko is published by arrangement with ELSEVIER INC., a Delaware corporation having its principal place of business at 360 Park Avenue South, New York, NY 10010, USA. Translation copyright © 2016 Helion SA Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. 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. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/pmsqlp.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/pmsqlp Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:262)ci Wprowadzenie do wydania pi(cid:241)tego ...............................................................13 Cz(cid:246)(cid:264)(cid:232) I. Mechanizmy zwi(cid:241)zane z deklarowaniem danych ............... 15 1. Bazy danych a systemy plików ......................................................................17 1.1. Instrukcja Schema ............................................................................................................................. 19 1.2. Tabele jako encje ............................................................................................................................... 24 1.3. Tabele jako relacje ............................................................................................................................. 24 1.4. Wiersze a rekordy .............................................................................................................................. 26 1.5. Kolumny a pola ................................................................................................................................. 27 2. Transakcje i kontrola wspó(cid:228)bie(cid:276)no(cid:264)ci ............................................................31 2.1. Sesje ..................................................................................................................................................... 32 2.2. Transakcje i model ACID ................................................................................................................ 32 2.3. Kontrola współbieżności .................................................................................................................. 34 2.4. Poziomy izolacji ................................................................................................................................. 36 2.5. Pesymistyczna kontrola współbieżności ........................................................................................ 38 2.6. Optymistyczna kontrola współbieżności za pomocą izolacji snapshotów ............................... 39 2.7. Logiczna kontrola współbieżności .................................................................................................. 42 2.8. Twierdzenie CAP .............................................................................................................................. 42 2.9. Model BASE ....................................................................................................................................... 43 2.10. Spójność po stronie serwera .......................................................................................................... 45 2.11. Obsługa błędów ............................................................................................................................... 46 2.12. Pasywne i aktywne zakleszczenie .................................................................................................. 46 Poleć książkęKup książkę 6 Spis treści 3. Tabele .........................................................................................................49 3.1. Instrukcja CREATE TABLE ............................................................................................................ 50 3.2. Definicje kolumn ............................................................................................................................... 52 3.3. Kolumny obliczane ........................................................................................................................... 63 3.4. Ograniczenia [NOT] DEFERRABLE ............................................................................................. 64 3.5. Instrukcje CREATE DOMAIN i CREATE SEQUENCE ............................................................ 65 3.6. Konstrukcje związane z zestawem znaków ................................................................................... 72 4. Klucze, lokalizatory i generowane warto(cid:264)ci ....................................................75 4.1. Typy kluczy ........................................................................................................................................ 76 4.2. Praktyczne wskazówki związane z denormalizacją ...................................................................... 79 5. Normalizacja ................................................................................................85 5.1. Zależności funkcyjne i wielowartościowe ...................................................................................... 88 5.2. Pierwsza postać normalna (1NF) .................................................................................................... 88 5.3. Druga postać normalna (2NF) ........................................................................................................ 93 5.4. Trzecia postać normalna (3NF) ...................................................................................................... 94 5.5. Postać normalna z kluczem podstawowym (EKNF) ................................................................... 95 5.6. Postać normalna Boyce’a-Codda (BCNF) ..................................................................................... 96 5.7. Czwarta postać normalna (4NF) ..................................................................................................... 98 5.8. Piąta postać normalna (5NF) .......................................................................................................... 99 5.9. Postać normalna z kluczem dziedziny (DKNF) ......................................................................... 101 5.10. Praktyczne wskazówki z zakresu normalizacji ......................................................................... 108 5.11. Nadmiarowość, gdy nie jest używana postać normalna .......................................................... 109 6. Widoki, tabele pochodne i inne tabele wirtualne ..........................................115 6.1. Widoki w kwerendach .................................................................................................................... 116 6.2. Widoki modyfikowalne i tylko do odczytu ................................................................................. 117 6.3. Typy widoków ................................................................................................................................. 118 6.4. Obsługa widoków w silnikach bazodanowych ........................................................................... 124 6.5. Klauzula WITH CHECK OPTION .............................................................................................. 128 6.6. Usuwanie widoków ......................................................................................................................... 133 6.7. Tabele ze zmaterializowanymi wynikami kwerend ................................................................... 134 7. Tabele pomocnicze .....................................................................................137 7.1. Tabela Series ..................................................................................................................................... 138 7.2. Pomocnicze tabele wyszukiwania ................................................................................................. 143 7.3. Zaawansowane tabele pomocnicze z funkcjami ......................................................................... 153 7.4. Globalne tabele stałych ................................................................................................................... 164 7.5. Uwagi na temat przekształcania kodu proceduralnego na tabele ............................................ 171 8. Inne obiekty schematu ...............................................................................177 8.1. Instrukcja CREATE SCHEMA ..................................................................................................... 179 8.2. Tabele schematu .............................................................................................................................. 180 8.3. Tabele tymczasowe .......................................................................................................................... 180 8.4. Instrukcja CREATE ASSERTION ................................................................................................ 180 8.5. Instrukcja CREATE DOMAIN ..................................................................................................... 181 Poleć książkęKup książkę Spis treści 7 8.6. Instrukcja CREATE COLLATION .............................................................................................. 182 8.7. Instrukcja CREATE TRANSLATION ......................................................................................... 183 8.8. Instrukcja CREATE PROCEDURE .............................................................................................. 183 8.9. Wyzwalacze ...................................................................................................................................... 183 8.10. Model działania wyzwalaczy ....................................................................................................... 184 9. B(cid:228)(cid:246)dy, których nale(cid:276)y unika(cid:232) w instrukcjach DDL ........................................193 9.1. Stosowanie skrótu „tbl” i powiązane błędy ................................................................................. 193 9.2. Podział atrybutów ........................................................................................................................... 196 9.3. Problemy z przeciążaniem projektu ............................................................................................. 197 9.4. Nadmiarowość wynikająca z braku postaci normalnej ............................................................. 201 Cz(cid:246)(cid:264)(cid:232) II. Typy danych ................................................................ 205 10. Dane liczbowe w SQL-u .............................................................................207 10.1. Dokładne liczbowe typy danych ................................................................................................. 208 10.2. Przybliżone liczbowe typy danych .............................................................................................. 213 10.3. Konwersje typów liczbowych ...................................................................................................... 215 10.4. Arytmetyka oparta na czterech funkcjach ................................................................................. 217 10.5. Przekształcanie wartości na NULL i dokonywanie odwrotnych konwersji ......................... 219 10.6. Funkcje matematyczne ................................................................................................................. 222 10.7. Adresy IP ........................................................................................................................................ 226 11. Znakowe typy danych w SQL-u ..................................................................229 11.1. Problemy z łańcuchami znaków w SQL-u ................................................................................ 230 11.2. Standardowe funkcje znakowe .................................................................................................... 232 11.3. Często dostępne rozszerzenia od producentów ........................................................................ 234 11.4. Tablice Cuttera .............................................................................................................................. 242 12. SQL-owe typy danych zwi(cid:241)zane z czasem ...................................................243 12.1. Uwagi na temat standardów związanych z kalendarzem ........................................................ 244 12.2. Natura modeli danych związanych z czasem ............................................................................ 247 12.3. SQL-owe typy danych związane z czasem ................................................................................. 248 12.4. Typy danych z rodziny INTERVAL ........................................................................................... 255 12.5. Kwerendy z operacjami arytmetycznymi na datach ................................................................ 256 12.6. Stosowanie wartości NULL do oznaczania „wieczności” ........................................................ 257 12.7. Predykat OVERLAPS() ................................................................................................................ 258 12.8. Ograniczenia związane ze zmianami stanu ............................................................................... 260 12.9. Tabele z kalendarzem ................................................................................................................... 265 13. Wielokolumnowe elementy danych ............................................................269 13.1. Elementy danych w postaci wektorów i współrzędnych ......................................................... 269 13.2. Hierarchiczne elementy danych ................................................................................................. 276 14. Warto(cid:264)ci NULL — brakuj(cid:241)ce dane w SQL-u ................................................283 14.1. Puste i brakujące tabele ................................................................................................................ 285 14.2. Brakujące wartości w kolumnach ............................................................................................... 285 Poleć książkęKup książkę 8 Spis treści 14.3. Kontekst i brakujące wartości ..................................................................................................... 287 14.4. Porównywanie wartości NULL ................................................................................................... 288 14.5. Wartości NULL i logika ............................................................................................................... 289 14.6. Wartości NULL a obliczenia matematyczne ............................................................................. 293 14.7. Funkcje związane z wartościami NULL ..................................................................................... 294 14.8. Wartości NULL a języki główne ................................................................................................. 294 14.9. Wskazówki projektowe związane z wartościami NULL ......................................................... 295 14.10. Uwagi na temat różnych rodzajów wartości NULL ............................................................... 298 15. Operacje na tabelach ................................................................................301 15.1. Instrukcja DELETE FROM .......................................................................................................... 301 15.2. Instrukcja INSERT INTO ............................................................................................................ 307 15.3. Instrukcja UPDATE ..................................................................................................................... 309 15.4. Uwaga na temat błędów w popularnych rozszerzeniach producentów ................................ 317 15.5. Instrukcja MERGE ........................................................................................................................ 318 16. Operacje na zbiorach ................................................................................321 16.1. UNION i UNION ALL ................................................................................................................ 322 16.2. Operatory INTERSECT i EXCEPT ............................................................................................ 325 16.3. Uwagi na temat opcji ALL i SELECT DISTINCT .................................................................... 330 16.4. Równość i podzbiory właściwe ................................................................................................... 331 Cz(cid:246)(cid:264)(cid:232) III. Mechanizmy z poziomu wierszy i kolumn ...................... 333 17. Operatory porównywania (operatory theta) ................................................335 17.1. Konwersja typów danych ............................................................................................................. 336 17.2. Porównywanie wierszy w SQL-u ................................................................................................ 338 17.3. Operator IS [NOT] DISTINCT FROM ..................................................................................... 340 17.4. Operatory monadyczne ................................................................................................................ 341 18. Predykaty dotycz(cid:241)ce wyników podkwerend ................................................345 18.1. Predykat UNIQUE ........................................................................................................................ 345 18.2. Predykat [NOT] IN() .................................................................................................................... 347 18.3. Predykat [NOT] EXISTS() ........................................................................................................... 357 18.4. operator porównania [SOME | ANY] podkwerenda ..................................................... 365 18.5. operator porównania ALL podkwerenda ........................................................................ 365 19. Predykaty BETWEEN i OVERLAPS .............................................................369 19.1. Predykat BETWEEN .................................................................................................................... 369 19.2. Predykat OVERLAPS ................................................................................................................... 372 20. Rodzina wyra(cid:276)e(cid:254) CASE ..............................................................................383 20.1. Wyrażenie CASE ........................................................................................................................... 383 20.2. Wyrażenia w postaci podkwerend i stałe ................................................................................... 391 21. Predykaty LIKE i SIMILAR TO ....................................................................393 21.1. Sztuczki związane ze wzorcami ................................................................................................... 394 21.2. Wyniki dla wartości NULL i pustych łańcuchów znaków ...................................................... 396 Poleć książkęKup książkę Spis treści 9 21.3. Operator LIKE nie oznacza równości ........................................................................................ 396 21.4. Rozbudowywanie predykatu LIKE za pomocą złączenia ........................................................ 396 21.5. Wyrażenia CASE i predykaty LIKE ............................................................................................ 397 21.6. Predykat SIMILAR TO ................................................................................................................. 397 21.7. Sztuczki związane z łańcuchami znaków ................................................................................... 399 22. Podstawowa instrukcja SELECT ................................................................403 22.1. Wyrażenia CTE ............................................................................................................................. 404 22.2. Klauzula FROM ............................................................................................................................. 405 22.3. Klauzula WHERE .......................................................................................................................... 405 22.4. Klauzula GROUP BY .................................................................................................................... 406 22.5. Klauzula HAVING ........................................................................................................................ 406 22.6. Klauzula SELECT .......................................................................................................................... 407 22.7. Klauzula ORDER BY .................................................................................................................... 407 22.8. Wyrażenie z zagnieżdżonymi kwerendami a ortogonalność ................................................. 407 23. Podstawowe funkcje agreguj(cid:241)ce ...............................................................409 23.1. Funkcje z rodziny COUNT() ...................................................................................................... 410 23.2. Funkcja SUM() .............................................................................................................................. 414 23.3. Funkcja AVG() .............................................................................................................................. 415 23.4. Funkcje zwracające ekstrema ...................................................................................................... 419 23.5. Funkcja agregująca LIST() ........................................................................................................... 427 23.6. Funkcja agregująca wyznaczająca dominantę .......................................................................... 429 23.7. Funkcja agregująca zwracająca medianę ................................................................................... 430 23.8. Funkcja agregująca PRD() ........................................................................................................... 432 24. Zaawansowane statystyki opisowe ...........................................................437 24.1. Funkcje dla tabel dwukolumnowych ......................................................................................... 437 24.2. Korelacja ......................................................................................................................................... 439 25. U(cid:276)ywanie SQL-a do agregacji w systemach OLAP .......................................441 25.1. Kwerendy a raporty ...................................................................................................................... 441 25.2. Operatory grupowania ................................................................................................................. 442 25.3. Klauzula okna ................................................................................................................................ 445 25.4. Funkcje agregujące oparte na oknie ........................................................................................... 449 25.5. Funkcje porządkowe ..................................................................................................................... 449 25.6. Rozszerzenia udostępniane przez producentów ...................................................................... 452 25.7. Kartka z historii ............................................................................................................................. 456 26. Zaawansowane instrukcje SELECT ............................................................459 26.1. Podkwerendy skorelowane .......................................................................................................... 459 26.2. Wrostkowe złączenia wewnętrzne .............................................................................................. 464 26.3. Złączenia zewnętrzne .................................................................................................................... 465 26.4. Operator UNION JOIN ............................................................................................................... 477 26.5. Skalarne wyrażenia SELECT ....................................................................................................... 479 26.6. Dawna i nowa składnia złączeń .................................................................................................. 480 26.7. Złączenia z ograniczeniami ......................................................................................................... 481 26.8. Złączenia T dr. Codda .................................................................................................................. 490 Poleć książkęKup książkę 10 Spis treści 26.9. Brakujące wartości w danych ...................................................................................................... 496 26.10. Brakujące i mieszane dane w wierszach ................................................................................... 501 Cz(cid:246)(cid:264)(cid:232) IV. Struktury danych w SQL-u ........................................... 503 27. Grafy w SQL-u ...........................................................................................505 27.1. Podstawowe cechy grafów ........................................................................................................... 506 27.2. Ścieżki w grafie .............................................................................................................................. 510 27.3. Grafy acykliczne jako zbiory zagnieżdżone ............................................................................... 517 27.4. Model wykorzystujący macierz sąsiedztwa ............................................................................... 519 27.5. Punkty w wielokącie ..................................................................................................................... 520 27.6. Geometria taksówkowa ................................................................................................................ 521 27.7. Klasy równoważności i kliki ........................................................................................................ 524 27.8. Podsumowanie .............................................................................................................................. 532 28. Drzewa i hierarchie w SQL-u ......................................................................533 28.1. Listy sąsiedztwa ............................................................................................................................. 534 28.2. Znajdowanie korzenia .................................................................................................................. 535 28.3. Znajdowanie liści ........................................................................................................................... 536 28.4. Określanie poziomów w drzewie ................................................................................................ 536 28.5. Operacje na drzewach .................................................................................................................. 537 28.6. Model oparty na zbiorach zagnieżdżonych ............................................................................... 538 28.7. Znajdowanie korzenia i liści ........................................................................................................ 541 28.8. Wyszukiwanie poddrzew ............................................................................................................. 541 28.9. Wyszukiwanie poziomów i ścieżek w drzewie .......................................................................... 542 28.10. Funkcje w modelu wykorzystującym zbiory zagnieżdżone .................................................. 545 28.11. Usuwanie wierzchołków i poddrzew ....................................................................................... 546 28.12. Przegląd funkcji dotyczących drzew ........................................................................................ 548 28.13. Wstawianie i aktualizowanie elementów drzew ..................................................................... 554 28.14. Przekształcanie list sąsiedztwa na zbiory zagnieżdżone ........................................................ 558 28.15. Przekształcanie zbiorów zagnieżdżonych na listy sąsiedztwa .............................................. 558 28.16. Porównywanie wierzchołków i struktur .................................................................................. 559 29. Kolejki .....................................................................................................563 29.1. Podstawowe instrukcje DDL ....................................................................................................... 563 29.2. Procedury Enqueue, Dequeue i Empty ...................................................................................... 564 29.3. Zmienianie uporządkowania ....................................................................................................... 565 29.4. Kolejki i matematyka .................................................................................................................... 566 29.5. Kolejki priorytetowe ..................................................................................................................... 567 29.6. Kolejki FIFO i LIFO ...................................................................................................................... 568 30. Macierze w SQL-u .....................................................................................573 30.1. Tablice oparte na nazwanych kolumnach ................................................................................. 574 30.2. Tablice oparte na kolumnach z indeksem ................................................................................. 577 30.3. Operacje na macierzach w SQL-u ............................................................................................... 579 30.4. Spłaszczanie tabeli do postaci tablicy ......................................................................................... 583 Poleć książkęKup książkę Spis treści 11 30.5. Porównywanie tablic zapisanych jako tabele ............................................................................ 585 30.6. Inne operacje na macierzach ....................................................................................................... 587 Cz(cid:246)(cid:264)(cid:232) V. Typowe kwerendy ........................................................ 589 31. Partycjonowanie i agregowanie danych w kwerendach ...............................591 31.1. Pokrycie i partycje ......................................................................................................................... 591 31.2. Zaawansowane grupowanie, agregowanie z uwzględnieniem okien i funkcje OLAP w SQL-u ............................................................................................................... 596 32. Podsekwencje, obszary, serie, luki i wyspy ................................................613 32.1. Znajdowanie podobszarów o wielkości (n) ............................................................................... 614 32.2. Numerowanie obszarów .............................................................................................................. 615 32.3. Wyszukiwanie obszarów o maksymalnej wielkości ................................................................. 617 32.4. Kwerendy z granicami .................................................................................................................. 621 32.5. Kwerendy dotyczące serii i sekwencji ........................................................................................ 621 32.6. Sumowanie ręcznie generowanych sekwencji wartości .......................................................... 626 32.7. Przestawianie i przesuwanie wartości na liście ......................................................................... 629 32.8. Eliminowanie luk na listach liczb ............................................................................................... 630 32.9. „Zawijanie” listy liczb ................................................................................................................... 630 32.10. Pokrycia ........................................................................................................................................ 631 32.11. Klasy równoważności i kliki ...................................................................................................... 635 33. Aukcje .....................................................................................................645 33.1. Rodzaje ofert .................................................................................................................................. 645 33.2. Typy aukcji ..................................................................................................................................... 646 33.3. Stosowanie modeli LIFO i FIFO w magazynach ...................................................................... 648 33.4. Problem pakowania ...................................................................................................................... 653 34. Dzielenie relacji ........................................................................................655 34.1. Dzielenie z resztą ........................................................................................................................... 656 34.2. Dzielenie bez reszty ....................................................................................................................... 658 34.3. Uwaga na temat wydajności ........................................................................................................ 659 34.4. Dzielenie Todda ............................................................................................................................ 659 34.5. Dzielenie z użyciem złączeń ........................................................................................................ 662 34.6. Dzielenie z wykorzystaniem operatorów zbiorów ................................................................... 662 34.7. Dzielenie Romleya ........................................................................................................................ 663 34.8. Wyrażenia logiczne w dzieleniu relacji ...................................................................................... 666 35. Kwerendy zwi(cid:241)zane z czasem ....................................................................669 35.1. Obliczenia matematyczne na czasie ........................................................................................... 670 35.2. Kalendarze ...................................................................................................................................... 674 35.3. Szeregi czasowe .............................................................................................................................. 677 35.4. Daty w formacie juliańskim ......................................................................................................... 691 35.5. Inne funkcje związane z czasem .................................................................................................. 694 35.6. Okresy obejmujące wiele dni ....................................................................................................... 694 35.7. Reprezentowanie czasu w tabelach ............................................................................................. 698 Poleć książkęKup książkę 12 Spis treści 35.8. Funkcje LEAD() i LAG() ............................................................................................................. 700 35.9. Problemy z rokiem 2000 — przegląd historyczny .................................................................... 701 Cz(cid:246)(cid:264)(cid:232) VI. Kwestie zwi(cid:241)zane z implementacj(cid:241) i kodowaniem ........ 707 36. Programowanie proceduralne, mieszane i deklaratywne w SQL-u ................709 36.1. Słowa mają znaczenie ................................................................................................................... 710 36.2. Porządkowanie kodu .................................................................................................................... 711 37. Poziomy zagnie(cid:276)d(cid:276)ania w SQL-u .................................................................717 37.1. Tabele pochodne ........................................................................................................................... 718 37.2. Reguły tworzenia nazw kolumn .................................................................................................. 719 37.3. Reguły określania zasięgu ............................................................................................................ 720 37.4. Dostępne nazwy tabel ................................................................................................................... 722 37.5. Wyrażenia CTE ............................................................................................................................. 723 37.6. Tabele z klauzulą LATERAL ....................................................................................................... 723 37.7. Wskazówki programistyczne ...................................................................................................... 725 38. Zagnie(cid:276)d(cid:276)ony SQL, dynamiczny SQL z interfejsem CLI oraz SQL/PSM .........727 38.1. Zagnieżdżony SQL ........................................................................................................................ 728 38.2. SQL/CLI .......................................................................................................................................... 729 38.3. Dynamiczny SQL .......................................................................................................................... 729 38.4. Historia standardu SQL/PSM ..................................................................................................... 729 38.5. Parametry w formacie CSV ......................................................................................................... 738 Skorowdz .......................................................................................................744 Poleć książkęKup książkę ROZDZIAŁ 9 B(cid:119)(cid:227)dy, których nale(cid:282)y unika(cid:218) w instrukcjach DDL P się hydrauliką. OZNAŁEŚ JUŻ podstawowe narzędzia do budowania instrukcji DDL potrzebnych w schemacie. Jednak sama znajomość narzędzi nie oznacza jeszcze, że wiesz, jak się nimi posługiwać. Możesz zapytać o to każdego, kto próbował samodzielnie zajmować 9.1. Stosowanie skrótu „tbl” i powi(cid:216)zane b(cid:119)(cid:227)dy W czasach kart dziurkowanych i taśm magnetycznych identyfikatory były krótkie i musiały obejmować metadane dla prostych kompilatorów i systemów wykonujących powtarzalne instrukcje. Klasycznym przykładem były języki FORTRAN I i FORTRAN II. Były one oparte na algebrze i używały instrukcji GOTO do zarządzania przepływem sterowania. Występowały w nich tylko dwa liczbowe typy danych — INTEGER i REAL. Nazwy zmiennych miały do sześciu znaków, musiały rozpoczynać się literą i być unikatowe w programie. Deklarowano je, stosując je w instrukcji, a kompilator musiał wywnioskować typ danych na podstawie nazwy. Zmienne rozpoczynające się od liter od I do N reprezentowały liczby całkowite (typ INTEGER), wszystkie pozostałe nazwy oznaczały liczby zmiennoprzecinkowe (typ REAL). Poleć książkęKup książkę 194 Rozdział 9. Błędy, których należy unikać w instrukcjach DDL Metadane w przedrostkach nazw elementów danych występowały także w systemach operacyjnych, gdzie sprzęt (na przykład napęd taśmowy lub dyskowy) miał zapisane na stałe nazwy w postaci skrótów literowych lub liczbowych. Nie istniały wtedy nowoczesne kompilatory i nie rozdzielano abstrakcyjnej postaci programu od jego implementacji. Jednak także obecnie stosowane są przedrostki określające typy danych, na przykład vch_ (typ VARCHAR(n)), int_ (typ INTEGER) itd. Angielskie określenie tibble (czyli stosowanie skrótu tbl) pochodzi od przedrostka tbl_ w nazwach tabel. Czasem pojawiają się też przedrostki vw_ (od Volkswagen Views, czyli widoki firmy Volkswagen) i jeszcze gorsze nazwy. 9.1.1. Standard ISO-11179 Obecnie dostępne są standard ISO-11179 i standardy rozwijane przez jednostkę DM32.8 Meta Data w organizacji INCITS. Zgodnie z tymi standardami należy nazywać rzeczy zgodnie z ich naturą. Oto co to oznacza: 1. Nie należy podawać typów danych (czyli sposobu fizycznego zapisu danych). 2. Nie należy stosować przedrostków pk_ ani fk_ określających sposób używania danego elementu w tabeli (jako klucza głównego lub obcego). 3. Nie należy stosować nazw w formacie „tabela-kolumna”, określających lokalizację danego wystąpienia elementu danych. 4. Tabele to zbiory, dlatego jako ich nazwy należy stosować rzeczowniki zbiorowe lub w liczbie mnogiej. To oznacza, że nazwa Pracownik jest zła. Pracownicy to lepsza wersja, natomiast właściwe określenie to Personel. Podobnie Drzewo to zły wybór, Drzewa to lepsze rozwiązanie, a Las to poprawna forma. Zapewne już rozumiesz ten wzorzec. 5. Nazwa elementu danych może obejmować nazwę atrybutu, podkreślenie i cechę atrybutu. Jeśli ten sam element występuje w jednej tabeli wielokrotnie, jego nazwę można poprzedzić nazwą roli. Zgodnie ze standardem ISO-11179 nazwy elementów danych powinny mieć format [ rola _] atrybut _ cecha . W przykładzie z pierwotnego dokumentu opisano atrybut tree z cechami takimi jak tree_diameter, tree_species i tak dalej. Niektóre cechy nie dotyczą niektórych atrybutów. Na przykład nie trzeba reprezentować cechy employee_diameter, a cecha employee_species może okazać się obraźliwa. Cechy atrybutów związane z wartościami ze skal potencjalnie można wykorzystać w tabelach wyszukiwania. Poniżej znajdziesz listę i definicje podstawowych przyrostków, które opisałem w książce SQL Programming Style. (cid:105) Przyrostek _id oznacza identyfikator. Jest on unikatowy w schemacie i wszędzie tam, gdzie występuje w schemacie, określa jedną encję. W tabeli wyszukiwania występują atrybuty i ich wartości, a nie encje, dlatego z definicji takie identyfikatory nie występują w tego typu tabelach. To dlatego określenia takie jak _category_id czy _type_id to bardzo złe nazwy. Nigdy nie stosuj określenia nazwa_tabeli _id, które jest nazwą Poleć książkęKup książkę 9.1. Stosowanie skrótu „tbl” i powiązane błędy 195 opartą na lokalizacji i informuje, że kolumna prawdopodobnie nie zawiera prawdziwych kluczy. Samo id to zbyt niejasna nazwa, aby była dla kogokolwiek przydatna. Takie nazwy zanieczyszczają słownik danych, gdy trzeba sprawdzać mnóstwo takich samych nazw oznaczających różne elementy danych (często o identycznym, za dużym typie). (cid:105) Przyrostek _date (lub dt) oznacza wymiar czasowy. Dane oznaczają wtedy datę czegoś — zatrudnienia, urodzin, zwolnienia itd. Nie należy tworzyć kolumn o nazwie w postaci samego date. (cid:105) Przyrostek _nbr (lub num) oznacza numer identyfikacyjny. Jest to łańcuch cyfr (lub znaków alfanumerycznych) określający nazwę czegoś. Nie stosuj przyrostka _no, ponieważ wygląda on jak wartość logiczna (yes lub no). Ja chętniej stosuję nbr niż num, ponieważ jest to skrót często stosowany w kilku językach europejskich. (cid:105) Przyrostek _name lub _nm to nazwa składająca się z liter i nie wymaga objaśnień. Czasem zbiór takich nazw jest nazywany skalą nominalną. (cid:105) Przyrostek _code lub _cd oznacza standardowy kod opracowany przez zaufane źródło poza firmą. Na przykład kod pocztowy jest określany przez Pocztę Polską. Kod jest zrozumiały w określonym kontekście, dlatego nie zawsze trzeba go przekształcać, gdy jest wyświetlany ludziom. (cid:105) Przyrostek _size związany jest ze standardem branżowym lub firmowym i służy do określania wielkości towarów (na przykład ubrań, butów, kopert lub śrub). Zwykle istnieje definiujący rozmiary prototyp przechowywany przez zaufane źródło. (cid:105) Przyrostek _seq oznacza sekwencję (z numerami porządkowymi). Nie jest tym samym co numer identyfikacyjny, ponieważ nie może obejmować luk. Określone są też reguły dotyczące następników w sekwencji. (cid:105) Przyrostek _status określa wewnętrzne kodowanie opisujące stan, który może wynikać z wielu czynników. Na przykład kolumna credit_status może być obliczana na podstawie różnych źródeł. Słowo „status” pochodzi od słowa „state”. Można założyć, że istnieją określone dozwolone zmiany stanu. Na przykład stan cywilny może się zmienić na „rozwiedziony” tylko wtedy, gdy obecny stan to „żonaty”. (cid:105) Przyrostek _cat określa kategorię, czyli kodowanie oparte na zewnętrznym źródle z odrębnymi grupami encji. Do ustalania przynależności do kategorii powinny służyć bardzo wyraźne formalne kryteria. Przykładem jest klasyfikacja królestw w biologii. (cid:105) Przyrostek _class oznacza wewnętrzne kodowanie bez zewnętrznego źródła, opisujące podkategorię encji. Klasyfikacja powinna odbywać się na podstawie wyraźnych kryteriów formalnych. Przykładem jest tu klasyfikacja roślin w biologii. (cid:105) Przyrostek _type określa kodowanie, które wewnętrznie i zewnętrznie ma to samo znaczenie. Typy są zwykle mniej formalne od klas i mogą się pokrywać. Na przykład prawo jazdy można otrzymać na motor, samochód osobowy, taksówkę, ciężarówkę itd. Poleć książkęKup książkę 196 Rozdział 9. Błędy, których należy unikać w instrukcjach DDL Różnice między typami, klasami i kategoriami dotyczą rosnącej ścisłości algorytmu przypisującego encje do danego typu albo określonej klasy lub kategorii. Kategorie są bardzo jednoznaczne. Rzadko trzeba zgadywać, czy coś jest zwierzęciem, warzywem, czy minerałem, by przypisać dany obiekt do jednej z tych kategorii. Klasa to zestaw obiektów o pewnych cechach wspólnych. Istnieją reguły pozwalające stwierdzić, że zwierzę jest ssakiem lub gadem. W niektórych sytuacjach reguły nie są oczywiste (na przykład w przypadku składających jaja ssaków australijskich), przy czym wyjątki często są zaliczane do odrębnej kategorii (tu są nią stekowce). Typy są najmniej ścisłe spośród trzech omawianych sposobów klasyfikowania i mogą wymagać subiektywnej oceny. Na przykład w niektórych stanach trójkołowce są uznawane za motocykle, natomiast w innych — za samochody. W jeszcze innych stanach trójkołowce są traktowane jak samochody tylko wtedy, jeśli mają bieg wsteczny. W praktyce wszystkie trzy pojęcia często stosuje się w różnych kontekstach. Na przykład określanie wartości kolumny blood_type (z grupą krwi) odbywa się w wyniku procedury laboratoryjnej i ma prowadzić do jednoznacznego ustalenia wartości ze zbioru {A, B, AB, 0}. Zachowaj zgodność ze standardem branżowym, nawet jeśli narusza to przedstawione wcześniej definicje. 9.1.2. B(cid:119)(cid:227)dy zwi(cid:216)zane z typami danych i ograniczeniami Pomyśl o używanym typie danych. Jeśli element danych jest używany w obliczeniach, musi być typu liczbowego. Nie powinien być łańcuchem znaków ani typem związanym z czasem. Podobnie dla danych reprezentujących czas stosuj typy związane z czasem, a nie łańcuchy znaków. Łańcuchy znaków są odpowiednie dla skal i numerów identyfikacyjnych. Szczegółowe informacje znajdziesz w książce SQL Programming Style (Morgan Kaufmann, 2005; ISBN: 978-0120887972). Najczęstszy błąd dotyczący ograniczeń polega na ich pomijaniu. Ograniczenia są przekazywane do optymalizatora i poprawiają jakość kodu — chronią integralność danych. Po ich utworzeniu są używane dla każdej instrukcji wykonywanej na danym obiekcie zbudowanym za pomocą DDL-a. Za każdym razem działają w ten sam sposób. 9.2. Podzia(cid:119) atrybutów Podział atrybutów przyjmuje wiele form. Występuje, gdy używany jest jeden atrybut, ale jego wartości są umieszczane w schemacie w różnych miejscach. Wymaga to ponownego poskładania pierwotnego faktu, aby móc go zastosować. Najczęściej występującą formą podziału atrybutów jest tworzenie dla każdej wartości odrębnych tabel. Inna postać to tworzenie w tej samej tabeli odrębnych wierszy z częściami poszczególnych wartości. Te problemy łatwiej będzie zrozumieć na podstawie przykładów. Poleć książkęKup książkę 9.3. Problemy z przeciążaniem projektu 197 9.2.1. Podzia(cid:119) atrybutów na poziomie schematu Ten problem polega na umieszczeniu jednego schematu w wielu bazach. Zamiast tworzyć jedną bazę firmy, dane poszczególnych jednostek są zapisywane w odrębnych bazach. Podzielone bazy trzeba połączyć, by uzyskać kompletny model danych. Sytuacja ta różni się od podziału schematu na partycje. Schemat podzielony na partycje nadal jest jednostką logiczną. 9.2.2. Podzia(cid:119) atrybutów na poziomie kolumny Kolumna powinna być wartością skalarną. Nie oznacza to, że musi być wartością atomową. Określenie „atomowość” pochodzi od greckiego słowa „a-toma” oznaczającego „bez części”. Skalarność oznacza, że dana wartość jest pomiarem na skali. Pomyśl o lokalizacji geograficznej. Para (długość, szerokość) określa jedną lokalizację, ale obejmuje dwie kolumny. W celu zlokalizowania obiektu na kuli ziemskiej możesz też zastosować jedną liczbę HTM (ang. Hierarchical Triangular Mesh). Jeśli wartość nie jest atomowa, potrzebne są ograniczenia gwarantujące, że jej łączone komponenty są prawidłowe. 9.2.3. Podzia(cid:119) atrybutów na poziomie tabeli Gdybym zamierzał utworzyć bazę danych z osobnymi tabelami z męskimi i żeńskimi pracownikami, natychmiast zauważyłbyś, że należy zbudować tylko jedną tabelę z kolumną z kodem płci. Tabelę można potem podzielić na podstawie tej kolumny (sex_code). Ta sytuacja jest oczywista, jednak zdarzają się też bardziej subtelne przypadki. 9.3. Problemy z przeci(cid:216)(cid:282)aniem projektu Niewłaściwy podział atrybutu skutkuje rozbiciem faktu na fragmenty w tabeli. Przeładowywanie to odwrotny problem — polega na umieszczaniu zbyt wielu elementów w schematach, tabelach i kolumnach. 9.3.1. Przeci(cid:216)(cid:282)anie na poziomie schematu Wymyśliłem zwrot „samochód, kalmar i Lady GaGa”, aby opisać umieszczanie w jednostce logicznej pomieszanych i niepowiązanych danych. Na poziomie schematu oznacza to obciążanie jednej bazy danych zbyt wieloma zadaniami. Może tak się stać, gdy dwa systemy wyglądają podobnie, dlatego programista rozszerza istniejący model danych. Poleć książkęKup książkę 198 Rozdział 9. Błędy, których należy unikać w instrukcjach DDL 9.3.2. Przeci(cid:216)(cid:282)anie na poziomie tabeli Choć tabele można przeładować na wiele sposobów, koszmarem, który często się powtarza, są tabele OTLT (ang. One True Look-up Table). Związane jest to z umieszczeniem WSZYSTKICH kodowań w jednej dużej tabeli, gdy należy utworzyć osobne tabele dla poszczególnych kodowań. Myślę, że to Paul Keister był pierwszą osobą, która wymyśliła zwrot OTLT. Don Paterson (http://www.sqlservercentral.com) w jednym ze swoich artykułów nazwał tę technikę MUCK (ang. Massively Unified Code-Key). Argumentem na rzecz takich tabel jest to, że potrzebna jest tylko jedna procedura do zarządzania wszystkimi kodowaniami i jedna generyczna funkcja do ich wywoływania (funkcja typu „samochody, kalmary i Lady GaGa”). Ta technika pojawia się nieustannie, warto jednak uhonorować Paula Keistera jako pierwszego, który nadał jej nazwę. Pomysł polega na tym, by utworzyć jedną tabelę do wyszukiwania wszystkich kodów ze schematu. Taka tabela zwykle wygląda mniej więcej tak: CREATE TABLE OTLT -- Generyczne_Wyszukiwania? (generic_code_type CHAR(10) NOT NULL, -- Okropne nazwy! generic_code_value VARCHAR(255) NOT NULL, -- Zwró(cid:252) uwag(cid:266) na wielko(cid:286)(cid:252)! generic_description VARCHAR(255) NOT NULL, -- Zwró(cid:252) uwag(cid:266) na wielko(cid:286)(cid:252)! PRIMARY KEY (generic_code_value, generic_code_type)); Elementy danych są teraz traktowane jak metadane, dlatego mają okropne nazwy. Kolumny nie reprezentują tu nic konkretnego — są „magicznymi” generycznymi miejscami na dowolne wartości. Dlatego jeśli schemat obejmuje znane z bibliotek kody DDC (ang. Dewey Decimal Classification), kody chorób w systemie ICD (ang. International Classification of Diseases) i dwuliterowe kody państw w standardzie ISO-3166, wszystkie te dane będą znajdować się w jednej wielkiej tabeli. Zacznijmy od problemów z instrukcjami DDL, a następnie przejdźmy do okropnych kwerend, które trzeba pisać (lub ukrywać w widokach), gdy stosowana jest taka tabela. Wróćmy do pierwotnych instrukcji DDL i dodajmy ograniczenie CHECK() do kolumny code_type. W przeciwnym razie w wyniku literówki użytkownik może „wymyślić” nowy system kodowania. Kody DDC i ICD są liczbowe i mają ten sam format. Składają się z trzech cyfr, kropki i dalszych cyfr (zwykle trzech). Jednak kody ISO-3166 są literowe. Ups — potrzebne będzie następne ograniczenie CHECK, które sprawdzi wartość kolumny code_type i ustali, czy łańcuch znaków ma właściwy format. Teraz tabela będzie wyglądać tak (jeśli oczywiście ktoś spróbuje zbudować ją w prawidłowy sposób, co zdarza się rzadko): CREATE TABLE OTLT (generic_code_type CHAR(10) NOT NULL CHECK(generic_code_type IN ( DDC , ICD , ISO3166 , ..), generic_code_value VARCHAR(255) NOT NULL, CONSTRAINT Valid_Generic_Code_Type Poleć książkęKup książkę 9.3. Problemy z przeciążaniem projektu 199 CHECK (CASE WHEN generic_code_type = DDC AND generic_code_value LIKE [0-9][0-9][0-9].[0-9][ 0-9][ 0-9] THEN T WHEN generic_code_type = ICD AND generic_code_value LIKE [0-9][0-9][0-9].[0-9][0-9][0-9] THEN T WHEN generic_code_type = ISO3166 AND generic_code_value LIKE [A-Z][A-Z] THEN T ELSE F END = T ), generic_description VARCHAR(255) NOT NULL, PRIMARY KEY (generic_code_value, generic_code_type)); Ponieważ typowa baza danych w aplikacji może obejmować dziesiątki kodów, należy stosować się do przedstawionego wzorca tak długo, jak to konieczne. Efekt nie jest zachęcający, prawda? Pomyśl teraz, co się stanie po dodaniu nowych wierszy do tabeli OTLT. INSERT INTO OTLT (generic_code_type, generic_code_value, generic_description) VALUES ( ICD , 259.0, Inadequate Genitalia after Puberty ), ( DDC , 259.0, Christian Pastoral Practices Religious Orders ); Jeśli popełnisz błąd w kolumnie generic_code_type w trakcie wstawiania, aktualizowania lub usuwania danych, otrzymasz niewłaściwą wartość. Jeżeli w kwerendzie użyjesz błędnej wartości kolumny generic_code_type, efekty mogą być zaskakujące. Znalezienie takiego błędu może okazać się naprawdę trudne, gdy w jednym ze schematów o podobnych strukturach występują nieużywane kody. Następną rzeczą, jaką warto zauważyć w tej tabeli, jest to, że używane są długie kolumny typu VARCHAR(n) lub, co jeszcze gorsze, typu NVARCHAR(n). Ustawiana długość łańcuchów znaków (n) jest często jedną z największych dozwolonych w danym produkcie SQL-owym. Ponieważ nie wiesz, jakie dane znajdą się w tabeli, nie da się przewidzieć i uwzględnić w projekcie bezpiecznej i rozsądnej wielkości maksymalnej. Ograniczenie wielkości trzeba umieścić w klauzuli WHEN w drugim ograniczeniu CHECK() dotyczącym kolumn code_type i code_value. Możesz też pogodzić się z istnieniem kodów o stałej długości większej niż konieczna. Duża pojemność kolumny sprzyja wprowadzaniu błędnych danych. Jeśli udostępnisz kolumnę typu VARCHAR(n), możesz otrzymać łańcuch znaków z wieloma spacjami i dziwnym znakiem na końcu. Jeżeli utworzysz kolumnę typu NVARCHAR(255), ktoś może zapisać w niej buddyjską sutrę chińskimi znakami w kodowaniu Unicode. Pomyśl teraz o problemach związanych z używaniem opisanej tabeli OTLT w kwerendach. Zawsze konieczne jest podanie wartości kolumny generic_code_type, a także szukanej wartości. Poleć książkęKup książkę 200 Rozdział 9. Błędy, których należy unikać w instrukcjach DDL SELECT P1.ssn, P1.lastname, .., L1.generic_description FROM OTLT AS L1, Personnel AS P1 WHERE L1.generic_code_type = ICD AND L1.generic_code_value = P1.disease_code AND ..; W tej przykładowej kwerendzie trzeba znać wartość kolumny generic_code_type powiązaną z kolumną disease_code z tabeli Personnel, a także wartości innych kolumn z kodami. Jeśli jednak wpiszesz błędną wartość kolumny generic_code_type, i tak możesz otrzymać jakiś wynik. Ponadto trzeba uwzględnić dodatkowe zasoby na konwersję typów. Dla niektórych kodów bardziej naturalny może okazać się typ liczbowy niż VARCHAR(n), aby zapewnić poprawne sortowanie danych. Dopełnianie łańcuchów cyfr zerami na początku wymaga dodatkowych zasobów i jest ryzykowne, jeśli programiści nie uzgodnili, ilu zer należy używać. Gdy kwerenda jest wykonywana, trzeba pobrać całą tabelę wyszukiwania — nawet jeśli używanych jest tylko kilka kodów. Jeżeli jeden kod znajduje się na początku obszaru pamięci fizycznej, a drugi — na końcu, potrzebnych może być wiele operacji zmiany strony i zapisu danych w pamięci podręcznej. W trakcie aktualizowania tabeli OTLT trzeba zablokować ją do czasu wykonania zadania. Przypomina to noszenie ze sobą wielu tomów encyklopedii, gdy potrzebny jest tylko jeden artykuł z czasopisma. Rozważ teraz dodatkowe koszty związane ze stosowaniem w tabeli dwuczęściowego klucza obcego: CREATE TABLE EmployeeAbsences (.. generic_code_type CHAR(3) –- Niezb(cid:266)dna minimalna d(cid:225)ugo(cid:286)(cid:252) DEFAULT ICD NOT NULL CHECK (generic_code_type = ICD ), generic_code_value CHAR(7) NOT NULL, –- Niezb(cid:266)dna minimalna d(cid:225)ugo(cid:286)(cid:252) FOREIGN KEY (generic_code_type, generic_code_value) REFERENCES OTLT (generic_code_type, generic_code_value), ..); Teraz trzeba przekształcić typy znakowe, co oznacza dodatkowe koszty. Co gorsza, kody ICD mają naturalną wartość domyślną (000.000 oznacza brak diagnozy), natomiast dla kodów DDC taka wartość nie istnieje. W starszych systemach kodowania często stosowano same dziewiątki, aby przedstawić wartość „różne”. Dzięki temu takie dane po sortowaniu trafiały na koniec raportów w platformach w COBOL-u. Podobnie jak nie istnieje „magiczny i uniwersalny” identyfikator, tak nie ma też „magicznej i uniwersalnej” wartości domyślnej. Opisane podejście oznacza więc utratę jednego z najważniejszych mechanizmów SQL-a. Podejrzewam, że to rozwiązanie zostało wymyślone przez programistów obiektowych, którzy traktują je jak rodzaj polimorfizmu w SQL-u. Dla nich tabela jest klasą (choć jest to nieprawdą), dlatego powinna działać polimorficznie (choć tak się nie dzieje). Poleć książkęKup książkę 9.4. Nadmiarowość wynikająca z braku postaci normalnej 201 9.3.3. Przeci(cid:216)(cid:282)enie na poziomie kolumn Jeśli nazwa kolumny wymaga wielu członów, jest źle sformułowana. Przyjrzyj się tabeli reprezentującej arkusz z rejestrem przyjść i wyjść. CREATE TABLE Clipboard (emp_name CHAR(35) NOT NULL, signature_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, signature_type CHAR(3) DEFAULT IN NOT NULL CHECK (signature_type IN ( IN , OUT )), PRIMARY KEY (emp_name, signature_type)); Rzeczywistą nazwą kolumny signature_timestamp powinno być in_or_out_signature_ timestamp. Gdy chce się wykonać dowolną prostą kwerendę, trzeba podać dwa wiersze w złączeniu zewnętrznym typu self-join, aby otrzymać parę z czasem przyjścia i czasem wyjścia każdego pracownika. Oto prawidłowy projekt: CREATE TABLE Clipboard (emp_name CHAR(35) NOT NULL, sign_in_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, sign_out_time TIMESTAMP, -- NULL oznacza bie(cid:298)(cid:261)cy czas PRIMARY KEY (emp_name, sign_in_time)); Jeden atrybut (cid:127) czas pracy (cid:127) trzeba zamodelować w standardowym SQL-u za pomocą dwóch kolumn. Tu jednak rozbito go na wiersze identyfikowane za pomocą kodu z metadanymi, informującego, który kraniec przedziału czasowego reprezentuje każda wartość. Gdyby wartościami były długość i szerokość geograficzna, natychmiast dostrzegłbyś problem i umieścił obie części jednego atrybutu (lokalizacji geograficznej) w tym samym wierszu. W skrajnym przypadku w tym błędnym podejściu używana jest opcja z metadanymi do określania zawartości kolumny, która obejmuje zupełnie różne i niepowiązane atrybuty. 9.4. Nadmiarowo(cid:262)(cid:218) wynikaj(cid:216)ca z braku postaci normalnej Przyjrzyj się tabeli używanej do obliczania odległości w linii prostej między podanymi na liście miastami. CREATE TABLE City_Coords (city_name VARCHAR(25) NOT NULL PRIMARY KEY, city_latitude FLOAT NOT NULL CHECK (city_latitude BETWEEN –1.57079633 AND + 1.57079633) city_longitude FLOAT NOT NULL, CHECK (city_longitu
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Praktyki mistrza SQL. Programowanie zaawansowane
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ą: