Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00048 006606 13598443 na godz. na dobę w sumie
SQL. Rusz głową! - książka
SQL. Rusz głową! - książka
Autor: Liczba stron: 592
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-2828-5 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> sql - programowanie
Porównaj ceny (książka, ebook, audiobook).

Teraz i Ty możesz dołączyć do grona osób znających SQL. Wystarczy, że sięgniesz po nasz bestseller.

Co w nim znajdziesz? Wszystko co najlepsze w serii Rusz głową! Konkretna wiedza, dużo humoru oraz wszystko wyjaśniające rysunki. Na sam początek dowiesz się co to jest język SQL oraz stworzysz swoją pierwszą bazę danych (polecenie CREATE). W kolejnych rozdziałach nauczysz się uzupełniać te bazy danymi, usuwać je oraz modyfikować (polecenia INSERT, UPDATE oraz DELETE). Jak już przebrniesz przez podstawy, zabierzesz się za to co bazodanowcy lubią najbardziej - indeksy, klucze, złączenia oraz podzapytania. Na sam koniec sprawdzisz jak zagwarantować swojej bazie bezpieczeństwo oraz wykrzesać z niej jeszcze więcej możliwości. Brzmi skomplikowanie? Nie martw się, jesteś w dobrych rękach! A więc...

Naprzód, głowo!

Nikt ci tego nie potrafił wytłumaczyć? Wydaje Ci się, że to problem nie na Twoją głowę? Nie potrzebujesz elektrowstrząsów, żeby pobudzić swój mózg do aktywnego działania. Tylko żadnych gwałtownych gestów! Usiądź wygodnie, otwórz książkę, dopiero teraz się zacznie. Na początek - rusz głową!

Precz z nudnymi wykładami i zakuwaniem bez zrozumienia!

Nauka to znacznie więcej niż tylko czytanie suchego tekstu. Twój mózg jest niczym głodny rekin, cały czas prący naprzód w poszukiwaniu nowej, apetycznej przekąski.

Jak karmimy Twój wygłodniały umysł?

Używamy rysunków, bo obraz wart jest 1024 słów. Stosujemy powtórzenia, by zakodować na stałe dane w Twojej chłonnej głowie. Oddziałujemy na emocje, jesteśmy nieprzewidywalni, zaskakujący i zabawni. Stawiamy przed Tobą wyzwania i zadajemy pytania, które angażują Cię w proces studiowania przedstawianych zagadnień. Cały czas pobudzamy Twój umysł do aktywnego działania, zmuszamy go do posłuszeństwa... a za ciężką pracę nagrodzimy go smakowitym ciasteczkiem w postaci wiedzy - wisienka gratis!

Rozgryź to sam!

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

Darmowy fragment publikacji:

Idź do • Spis treści • Przykładowy rozdział Katalog książek • Katalog online • Zamów drukowany katalog Twój koszyk • Dodaj do koszyka Cennik i informacje • Zamów informacje o nowościach • Zamów cennik Czytelnia • Fragmenty książek online Kontakt Helion SA ul. Kościuszki 1c 44-100 Gliwice tel. 32 230 98 63 e-mail: helion@helion.pl © Helion 1991–2010 SQL. Rusz g³ow¹! Autor: Lynn Beighley T³umaczenie: Piotr Rajca ISBN: 978-83-246-2828-5 Tytu³ orygina³u: Head First SQL: Your Brain on SQL – A Learner Format: 200230, stron: 592 Teraz i Ty mo¿esz do³¹czyæ do grona osób znaj¹cych SQL. Wystarczy, ¿e siêgniesz po nasz bestseller Co w nim znajdziesz? Wszystko co najlepsze w serii Rusz g³ow¹! Konkretna wiedza, du¿o humoru oraz wszystko wyjaœniaj¹ce rysunki. Na sam pocz¹tek dowiesz siê co to jest jêzyk SQL oraz stworzysz swoj¹ pierwsz¹ bazê danych (polecenie CREATE). W kolejnych rozdzia³ach nauczysz siê uzupe³niaæ te bazy danymi, usuwaæ je oraz modyfikowaæ (polecenia INSERT, UPDATE oraz DELETE). Jak ju¿ przebrniesz przez podstawy, zabierzesz siê za to co bazodanowcy lubi¹ najbardziej - indeksy, klucze, z³¹czenia oraz podzapytania. Na sam koniec sprawdzisz jak zagwarantowaæ swojej bazie bezpieczeñstwo oraz wykrzesaæ z niej jeszcze wiêcej mo¿liwoœci. Brzmi skomplikowanie? Nie martw siê, jesteœ w dobrych rêkach! A wiêc… Naprzód, g³owo! Nikt ci tego nie potrafi³ wyt³umaczyæ? Nie potrzebujesz elektrowstrz¹sów, ¿eby pobudziæ swój mózg do aktywnego dzia³ania. Tylko ¿adnych gwa³townych gestów! Usi¹dŸ wygodnie, otwórz ksi¹¿kê, dopiero teraz siê zacznie. Na pocz¹tek – rusz g³ow¹! Precz z nudnymi wyk³adami i zakuwaniem bez zrozumienia! Nauka to znacznie wiêcej ni¿ tylko czytanie suchego tekstu. Twój mózg jest niczym g³odny rekin, ca³y czas pr¹cy naprzód w poszukiwaniu nowej, apetycznej przek¹ski. Jak karmimy Twój wyg³odnia³y umys³? U¿ywamy rysunków, bo obraz wart jest 1024 s³ów. Stosujemy powtórzenia, by zakodowaæ na sta³e dane w Twojej ch³onnej g³owie. Oddzia³ujemy na emocje, jesteœmy nieprzewidywalni, zaskakuj¹cy i zabawni. Ca³y czas pobudzamy Twój umys³ do aktywnego dzia³ania, zmuszamy go do pos³uszeñstwa… a za ciê¿k¹ pracê nagrodzimy go smakowitym ciasteczkiem w postaci wiedzy – wisienka gratis! RozgryŸ to sam! • Tworzenie bazy danych i tabel (CREATE) • Pobieranie danych (SELECT) • Usuwanie (DELETE) i aktualizowanie danych (UPDATE) • Wykorzystywanie kluczy i indeksów • Sortowanie danych • Operacje na danych – sumy, œrednie, elementy maksymalne i minimalne • Pobieranie unikalnych danych • Sposób pobierania okreœlonej liczby wierszy • Stosowanie podzapytañ • Zapewnianie spójnoœci danych • Ograniczanie dostêpu do zgromadzonych danych • Zapewnianie bezpieczeñstwa bazie danych Spis treści (skrócony) 1 2 3 4 5 6 Wprowadzenie Dane i tabele: Na wszystko znajdzie się odpowiednie miejsce Polecenie SELECT: Pobieranie podarowanych danych DELETE i UPDATE: Są szanse, że wszystko będzie w porządku Projektowanie dobrych tabel: Po co być normalnym? Polecenie ALTER: Korygowanie przeszłości Zaawansowane zastosowanie polecenia SELECT: Nowy sposób spojrzenia na dane 7 Projektowanie baz danych składających się z wielu tabel: Wyrastamy z naszych starych tabel 8 9 10 Złączenia i operacje na wielu tabelach: Czy nie możemy się wszyscy dogadać? Podzapytania: Zapytania w zapytaniach Złączenia zewnętrzne, złączenia zwrotne oraz unie: Nowe manewry 11 Ograniczenia, widoki i transakcje: Zbyt wielu kucharzy psuje bazę danych 12 Bezpieczeństwo: Zabezpieczanie swych dóbr Dodatek A Pozostałości Dodatek B Instalacja MySQL-a Dodatek C Przypomnienie narzędzi Skorowidz Spis treści 25 37 87 153 193 231 267 311 373 409 447 483 521 551 569 575 583 Spis treści (z prawdziwego zdarzenia) Wprowadzenie Twój mózg myśli o SQL-u. Czytając książkę, Ty starasz się czegoś nauczyć, natomiast Twój mózg wyświadcza Ci przysługę, dbając o to, by te informacje nie zostały zbyt długo w Twej głowie. Twój mózg myśli sobie: „Lepiej zostawić miejsce na jakieś ważne rzeczy, takie jak: których dzikich zwierząt należy unikać albo czy jeżdżenie nago na snowboardzie jest dobrym pomysłem, czy nie”. Zatem w jaki sposób możesz przekonać swój mózg, by uznał, że poznanie SQL-a to dla Ciebie kwestia życia lub śmierci? Dla kogo jest ta książka Wiemy, co sobie myślisz Metapoznanie: myslenie o myśleniu Oto co możesz zrobić, aby zmusić swój mózg do posłuszeństwa Przeczytaj to Nasi wspaniali recenzenci Podziękowania 26 27 29 31 32 34 35 9 Spis treści 1 Dane i tabele Na wszystko znajdzie się odpowiednie miejsce Czy także i Ty nie cierpisz gubienia czegokolwiek? Niezależnie od tego, czy są to kluczyki do samochodu, bon uprawniający do zakupu mieszkania z 25-procentową zniżką, dane używanej aplikacji, nie ma nic gorszego niż niemożność sprostania własnym potrzebom… wtedy gdy tego najbardziej potrzebujemy. A jeśli chodzi o używane aplikacje, to trzeba wiedzieć, że nie ma lepszego miejsca na przechowywanie ważnych informacji niż tabele. A zatem przewróć kartkę i zacznij, krok za krokiem, poznawać świat relacyjnych baz danych. Definiowanie danych Przeanalizuj swoje dane pod względem kategorii Co znajduje się w bazie danych? Twoja baza danych widziana przez rentgenowskie okulary… Bazy danych zawierają powiązane ze sobą informacje Tabele w zbliżeniu Przejmij kontrolę! Tworzenie tabeli: Polecenie CREATE TABLE Tworzenie bardziej złożonych tabel Przekonajmy się, jak łatwo można pisać kod SQL Utwórzmy w końcu tabelę moje_kontakty Twoja tabela jest gotowa Spotkajmy się z niektórymi typami danych SQL Twoja tabela bez tajemnic Nie można ponownie stworzyć już istniejącej bazy danych lub tabeli! Do kosza ze starą tabelą — czas na nową Aby dodać dane do tabeli, będziesz musiał skorzystać z polecenia INSERT Utworzenie polecenia INSERT Wariacje na temat polecenia INSERT Kolumny bez wartości Zerknij na swoją tabelę, używając polecenia SELECT SQL bez tajemnic: Wyznania wartości NULL Kontrola wewnętrznych wartości NULL NOT NULL pojawia się w wynikach polecenia DESC Wypełnij pustkę słowem kluczowym DEFAULT Przybornik SQL 38 43 44 46 48 49 53 55 56 57 58 59 60 64 66 68 70 73 77 78 79 80 81 83 84 86 Twoja baza danych widziana przez rentgenowskie okulary… Wyobraź sobie bazę danych jako pojemnik zawierający informacje… Tabela. kolumna1 dane dane dane dane kolumna2 dane dane dane dane kolumna3 dane dane dane dane kolumna4 dane dane dane dane kolumna5 dane dane dane dane kolumna6 dane dane dane dane To są kolumny. J e s z c z e i n n a t a b e l a . kolumna1 dane dane dane dane kolumna2 dane dane dane dane kolumna3 dane dane dane dane kolumna4 dane dane dane dane A to są wiersze. kolumna1 dane dane dane dane kolumna2 dane dane dane dane kolumna1 dane dane dane dane dane dane dane kolumna2 kolumna3 dane dane dane dane dane dane dane dane dane dane dane dane dane dane Jeszcze inna tabela. I kolejna tabela. 10 Spis treści 2 Polecenie SELECT Pobieranie podarowanych danych Czy naprawdę lepiej jest dawać, niż brać? W przypadku korzystania z baz danych najprawdopodobniej częściej będziesz musiał pobierać z nich dane, niż je zapisywać. I właśnie w tych wszystkich sytuacjach przydadzą Ci się informacje przedstawione w tym rozdziale: poznasz w nim bardzo przydatne polecenie SELECT i dowiesz się, jak uzyskać dostęp do tych wszystkich ważnych informacji, które wcześniej zapisywałeś w swoich tabelach. Co więcej, dowiesz się także, jak stosować klauzulę WHERE i operatory AND i OR, by nie tylko pobierać dane, lecz wyświetlać te, które są Ci potrzebne. Pobierać dane czy nie pobierać? Lepsza postać polecenia SELECT Co oznacza gwiazdka (*) Jak poszukiwać wartości różnych typów? Kolejne problemy ze znakami przestankowymi Niedopasowane apostrofy Polecenia INSERT z danymi zawierającymi apostrofy Pobieranie konkretnych kolumn w celu ograniczenia wyników Określanie kolumn w celu zwiększenia szybkości zapytania Łączenie zapytań Odnajdywanie wartości liczbowych Łagodne operatory porównania Odnajdywanie wartości liczbowych przy użyciu operatorów porównania Odnajdywanie danych tekstowych przy użyciu operatorów porównania Być ALBO nie być Różnica pomiędzy operatorem AND a OR By odszukać NULL, użyj operatora IS NULL Jak można zaoszczędzić czas dzięki jednemu słowu: LIKE Zew wieloznaczności Pobieranie zakresów przy użyciu operatora AND i operatorów porównania Lepszy sposób — operator BETWEEN Operator IN — w kręgu zainteresowania… …lub poza nim — NOT IN Więcej o operatorze NOT Przybornik SQL Jestem gwiazdą! 88 91 92 98 99 100 102 107 107 114 117 120 122 125 127 130 133 135 135 139 140 143 144 145 150 11 Spis treści 3 DELETE i UPDATE Są szanse, że wszystko będzie w porządku Cały czas zmieniasz zdanie? Teraz nie przysporzy Ci to najmniejszego problemu! Dzięki poleceniom DELETE i UPDATE, które poznasz w tym rozdziale, nie będziesz już dłużej musiał ponosić konsekwencji decyzji podjętych pół roku temu, kiedy to zapisałeś w bazie dane o spodniach w kształcie dzwonów, które właśnie z powrotem zaczynały być modne. Dzięki poleceniu UPDATE będziesz mógł zmieniać dane, natomiast polecenie DELETE pozwoli usnąć z bazy dane, które nie będą Ci już dłużej potrzebne. Jednak w tym rozdziale nie tylko pokażemy Ci te dwa nowe polecenia SQL, lecz także nauczymy, jak można używać ich w precyzyjny sposób, by przez przypadek nie usunąć danych, które cały czas są potrzebne. Klowni są przerażający Śledzenie klownów Klowni są w ciągłym ruchu Jak są zapisywane informacje o klownach? Gonzo, mamy problem Jak pozbyć się rekordu — polecenie DELETE Stosowanie naszego nowego polecenia DELETE Reguły polecenia DELETE Dwa kroki — INSERT i DELETE Stosuj polecenie DELETE rozważnie Problemy z nieprecyzyjnymi poleceniami DELETE Modyfikowanie danych przy użyciu polecenia UPDATE Reguły stosowania polecenia UPDATE UPDATE odpowiada kombinacji INSERT-DELETE Polecenie UPDATE w akcji Aktualizacja miejsc wystąpień klownów Zaktualizuj ceny drinków A chcemy tylko jednego polecenia UPDATE Przybornik SQL 154 155 156 160 162 163 165 166 169 174 178 180 181 182 183 186 188 190 192 Czy Cię przerażamy? 12 Spis treści 4 Projektowanie dobrych tabel Po co być normalnym? Dotychczas tworzyłeś tabele bez zwracania na nie szczególnej uwagi. I wszystko było w porządku, tabele działały bez problemów. Mogłeś w nich zapisywać, modyfikować, usuwać i pobierać dane. Jednak wraz ze zwiększaniem się ilości danych w tabelach zaczniesz zauważać, że są rzeczy, które mogłeś zrobić wcześniej, by ułatwić sobie w przyszłości tworzenie klauzul WHERE. Innymi słowy, musisz znormalizować swoje tabele. Dwie wędkarskie tabele Tabele dotyczą związków Dane atomowe Dane atomowe a Twoje tabele Reguły danych atomowych Dlaczego warto być normalnym? Zalety normalizacji tabel Klowni nie są normalni W połowie drogi do 1NF Reguły KLUCZA GŁÓWNEGO Dążenie do pierwszej postaci NORMALNEJ Poprawianie tabeli Grześka Oryginalna postać polecenia CREATE TABLE tabelę Pokażcie mi moją kasę Polecenie oszczędzające czas Tworzenie tabeli z KLUCZEM GŁÓWNYM 1, 2, 3… automatycznie inkrementowane Dodawanie KLUCZA GŁÓWNEGO do istniejącej tabeli Modyfikacja tabeli i dodanie KLUCZA GŁÓWNEGO Przybornik SQL 194 198 202 204 205 208 209 210 211 212 215 216 217 218 219 220 222 226 227 228 13 z całą masą informacji. Chyba nie jesteście poważni, jeśli oczekujecie, że usunę tabelę jak w pierwszym rozdziale i będę ponownie wpisywał całą jej zawartość tylko i wyłącznie po to, żeby stworzyć kolumnę klucza Chwileczkę, ale ja już mam tabelę głównego. Spis treści 5 Polecenie ALTEr Korygowanie przeszłości Czy kiedykolwiek marzyłeś, by mieć możliwość naprawiania błędów popełnionych w przeszłości? Cóż, teraz masz taką możliwość. Dzięki poleceniu ALTER możesz zastosować wszystkie nowe wiadomości i doświadczenia, by zmodyfikować strukturę tabel utworzonych kilka dni, miesięcy lub nawet lat wcześniej. Ale to jeszcze nie wszystko — możesz to zrobić bez wprowadzania jakichkolwiek zmian w istniejących danych. Skoro tu dotarłeś, zapewne już wiesz, co naprawdę oznacza normalizacja, i będziesz mógł zastosować tę wiedzę do zapewnienia odpowiedniej struktury swym tabelom; tym starym i nowym. Musimy wprowadzić kilka zmian Modyfikowanie tabel Ekstremalne metamorfozy tabel Zmiana nazwy tabeli Musimy poczynić pewne plany Przezbrajanie kolumn Zmiany strukturalne Polecenia ALTER i CHANGE Zmiana dwóch kolumn przy użyciu jednego polecenia SQL Szybko! Usuń tę kolumnę Dokładniejsza analiza nieatomowej kolumny lokalizacji Poszukaj wzorca Kilka wygodnych funkcji łańcuchowych Użyj bieżącej kolumny do zapisania wartości w innej kolumnie Sposób działania połączonych poleceń UPDATE i SET Przybornik SQL 232 237 238 239 241 242 243 244 245 249 256 257 258 263 264 266 Nadszedł czas, by zmienić Twoją wypróbowaną, lecz przestarzałą tabelę na cudeńko, jakiemu nie oprą się żadne informacje, i przenieść ją na taki poziom bazodanowego odpicowania, o którym nawet Ci się nie śniło. 14 Spis treści 6 Zaawansowane zastosowanie polecenia SELECT Nowy sposób spojrzenia na dane Nadszedł czas, byś dodał do swojego SQL-owego przybornika nieco finezji. Już wiesz, jak pobierać dane przy użyciu polecenia SELECT i klauzuli WHERE. Jednak czasami będziesz potrzebował nieco większej precyzji niż ta, jaką one zapewniają. W tym rozdziale dowiesz się o określaniu kolejności oraz grupowaniu danych, jak również o wykonywaniu operacji matematycznych na wynikach zapytań. Reorganizacja Filmoteki Bazodanowa Kilka problemów z bieżącą tabelą Dopasowywanie istniejących danych Określanie zawartości nowej kolumny Polecenie UPDATE z wyrażeniem CASE Wygląda na to, że mamy problem Do tabel może się wkraść bałagan Potrzebujemy możliwości organizowania danych zwracanych przez polecenie SELECT Wypróbuj klauzulę ORDER BY Sortowanie według jednej kolumny Klauzula ORDER z dwoma kolumnami Klauzula ORDER operująca na wielu kolumnach Uporządkowana tabela filmów Zmiana kolejności dzięki użyciu DESC Problem najlepszej sprzedawczyni grupy Młode Gosposie Funkcja SUM zsumuje wszystko za nas Zsumuj wszystko za jednym razem dzięki użyciu GROUP BY Funkcja AVG z klauzulą GROUP BY Funkcje MIN i MAX Liczymy dni Pobieranie unikalnych wartości LIMIT-owanie ilości wyników Ograniczenie tylko do drugiego miejsca Przybornik SQL 268 269 270 271 274 276 281 282 285 286 289 290 291 293 295 297 298 299 300 301 303 306 307 310 15 Spis treści 7 Projektowanie baz danych składających się z wielu tabel Wyrastamy z naszych starych tabel Kiedyś może nadejść moment, kiedy pojedyncza tabela przestanie Ci wystarczać. Twoje dane stały się bardziej złożone i jedna tabela, której do tej pory używałeś, nie jest już w stanie sprostać Twoim potrzebom. W tabeli jest bardzo dużo powtarzających się, nadmiarowych informacji, które niepotrzebnie zajmują miejsce na dysku i spowalniają zapytania. Wytrwałeś, używając tej jednej tabeli, tak długo, jak to było możliwe. Jednak świat, w którym żyjemy, jest ogromny i czasami potrzeba będzie więcej niż jednej tabeli, by zapisać wszystkie dane, zapanować nad nimi i w ostatecznym rozrachunku cały czas być panem własnej bazy danych. Szukamy partnerki na randkę dla Wieśka Wszystko stracone… ale zaraz Wyobraź sobie dodatkową tabelę Nowe tabele w bazie danych z informacjami o klownach Schemat bazy danych klowni_informacje W jaki sposób z jednej tabeli zrobić dwie Łączenie tabel Ograniczanie klucza obcego Dlaczego należy zawracać sobie głowę kluczami obcymi? TWORZENIE tabeli z KLUCZEM OBCYM Zależności pomiędzy tabelami Wzorce danych: jeden-do-jednego Wzorce danych: kiedy używać tabel połączonych zależnością jeden-do-jednego Wzorce danych: jeden-do-wielu Wzorce danych: dochodzimy do zależności wiele-do-wielu Wzorce danych: potrzebujemy tabeli łączącej Wzorce danych: wiele-do-wielu W końcu w 1NF Klucz złożony korzysta z wielu kolumn Zapis uproszczony Częściowa zależność funkcjonalna Przechodnia zależność funkcjonalna Druga postać normalna Trzecia postać normalna (w końcu) I tak oto Robert (i lista_grzesia) żyli od tej pory długo i szczęśliwie Przybornik SQL 312 323 324 325 326 328 330 335 336 337 339 339 340 341 342 345 346 351 352 354 355 356 360 366 369 372 ostatnio_widziano klowni_informacje wygląd Dom opieki „Spokojna Ostoja” Urodziny u Jacka Zielińskiego M, pomarańczowe włosy, niebieski garnitur, ogromne stopy K, czerwone włosy, zielona sukienka, ogromne stopy aktywności balony, mały samochodzik mim MegaStragan Cyrk Koloseum K, żółta koszula, workowate czerwone spodnie trąbka, parasolka M, cygaro, czarne włosy, niewielki kapelusz Dom opieki „Wesoła Wdówka” K, różowe włosy, ogromny kwiat, niebieska sukienka skrzypce krzyk, taniec imię Eklerka Pan Pimpuś Pani Smyk Pan Hobo Klarabela klowni_informacje id imie plec opis info_aktywnosci id id_aktywnosci aktywnosci id_aktywnosci aktywnosc info_lokalizacja id id_lokalizacji kiedy lokalizacja id_lokalizacji lokalizacja zainteresowania zainteresowania id_zainteresowania zainteresowanie 16 Spis treści 8 Złączenia i operacje na wielu tabelach Czy nie możemy się wszyscy dogadać? Witam w skomplikowanym świecie wielu tabel. Wspaniale jest mieć w bazie więcej niż jedną tabelę, jednak abyś mógł się nimi posługiwać, będziesz musiał poznać nowe narzędzia i techniki. Jednoczesne korzystanie z wielu tabel może być kłopotliwe, dlatego też, by wszystko było jasne, będziesz potrzebował nazw zastępczych (nazywanych także „aliasami”). Oprócz tego złączenia pomogą Ci połączyć tabele, dzięki czemu będziesz mógł korzystać ze wszystkich danych, zapisanych w wielu różnych miejscach. Przygotuj się — teraz ponownie odzyskasz pełną kontrolę nad swoją bazą danych. 374 Powtarzamy się, cały czas się powtarzamy… 375 Wypełnianie tabel 378 Zainteresowania — kłopotliwa kolumna 379 Wciąż wykazujemy zainteresowanie 380 Aktualizacja wszystkich zainteresowań 381 Pobieranie wszystkich zainteresowań 382 Wiele dróg prowadzących w to samo miejsce 382 CREATE, SELECT oraz INSERT — (prawie) jednocześnie 383 CREATE, SELECT i INSERT — jednocześnie 384 O co chodzi z tym AS? 385 Nazwy zastępcze kolumn 386 Nazwy zastępcze, a kto by ich potrzebował? 387 Wszystko co chciałbyś wiedzieć o złączeniach wewnętrznych 388 Złączenie kartezjańskie 393 Zrozumienie złączeń wewnętrznych 394 Złączenie wewnętrzne w akcji: złączenie równościowe 397 Złączenia wewnętrzne w akcji: złączenie różnościowe 398 Ostatni rodzaj złączeń wewnętrznych: złączenia naturalne Złączone zapytania? 405 Nazwy zastępcze tabel i kolumn bez tajemnic: Dlaczego się ukrywacie? 406 Przybornik SQL 408 … i tak naprawdę to właśnie stąd się biorą malutkie tablice z wynikami. 17 Spis treści 9 Podzapytania Zapytania w zapytaniach Janie, dwuczęściowe zapytanie, proszę. Złączenia są wspaniałe, jednak czasami musisz zadać swojej bazie danych więcej niż jedno zapytanie. Bądź użyć wyników jednego zapytania jako danych wejściowych dla drugiego. I właśnie w takich sytuacjach przydają się podzapytania. Pozwolą Ci one uniknąć powielania danych, sprawią, że Twoje zapytania staną się bardziej dynamiczne, a może nawet pozwolą się wkręcać na koncerty i przyjęcia dla wyższych sfer. (No, na to ostatnie bym nie liczyła, ale dwa punkty z trzech to i tak nieźle). Grzesiek wchodzi na rynek pracy Baza Grześka wzbogacona o nowe tabele Grzesiek używa złączenia wewnętrznego Ale Grzesiek chce użyć innych zapytań Podzapytania Łączymy dwa zapytania w zapytanie z podzapytaniem Jakby jedno pytanie nie wystarczało: poznajcie podzapytanie Podzapytanie w działaniu Podzapytania i ich reguły Podstawowe informacje o tworzeniu podzapytań Podzapytanie jako kolumna polecenia SELECT Inny przykład: Podzapytanie ze złączeniem naturalnym Podzapytania nieskorelowane SQL bez tajemnic: Wybór optymalnego sposobu realizacji zapytania, jeśli dostępna jest większa ilość możliwości Nieskorelowane podzapytania zwracające wiele wartości: IN oraz NOT IN Podzapytania skorelowane (Przydatne) Podzapytanie skorelowane używające operatora NOT EXISTS EXISTS i NOT EXISTS Usługi pośrednictwa pracy Grześka — zaproszenie do współpracy! W drodze na imprezę… Przybornik SQL 410 411 412 414 416 417 418 419 421 424 427 428 429 430 433 438 439 440 442 443 444 zapytanie ZEWNĘTRZNE zapytanie WEWNĘTRZNE Zapytanie zewnętrzne. SELECT jakas_kolumna, inna_kolumna FROM tabela WHERE kolumna = (SELECT kolumna FROM tabela ); Zapytanie wewnętrzne. 18 Spis treści 10 Złączenia zewnętrzne, złączenia zwrotne oraz unie Nowe manewry To wszystko, czego do tej pory dowiedziałeś się o złączeniach, to jedynie pół prawdy na ich temat. Widziałeś już złączenia krzyżowe tworzące wszystkie możliwe pary rekordów pochodzących z dwóch tabel oraz złączenia wewnętrzne zwracające jedynie pasujące do siebie rekordy obu tabel. Nie spotkałeś się jeszcze natomiast ze złączeniami zewnętrznymi, zwracającymi także te wiersze, które nie mają pasujących odpowiedników w drugiej tabeli, złączeniami zwrotnymi, które łączą tabelę z nią samą, oraz uniami, które scalają wyniki z kilku różnych zapytań. Kiedy poznasz te wszystkie sztuczki, będziesz w stanie pobierać dane z bazy dokładnie w taki sposób, jaki będzie Ci potrzebny. (Nie zapomnimy także ujawnić całej szokującej prawdy o podzapytaniach!). Polecenie UNION pozwoli Grześkowi połączyć wyniki pochodzące z trzech niezależnych zapytań i zwrócić je w postaci jednej tabeli. S t a n ow i s k a z t a b e l i p r a c a_ a k t u a l n a . Stanowiska z tabeli praca_poszukiwana. S t a n ow i s k a z t a b e l i p r a c a_ a k t u a l n a . Aby tytuł został wyświetlony w wynikach całego polecenia, musi się pojawić w wynikach obu zapytań Stanowiska z tabeli praca_poszukiwana. Porządki w starych danych Kluczem są dwie strony złączenia — lewa i prawa Oto lewostronne złączenie zewnętrzne Złączenia zewnętrzne i wielokrotne dopasowania Prawostronne złączenie zewnętrzne Podczas gdy my radośnie złączaliśmy zewnętrznie… Moglibyśmy utworzyć nową tabelę Gdzie w schemacie umieścimy nową tabelę? Klucz obcy odwołujący się do tej samej tabeli Łączenie tabeli z nią samą Potrzebujemy złączenia zwrotnego Inny sposób zwracania informacji z wielu tabel Można zastosować polecenie UNION Polecenie UNION ma swoje ograniczenia Reguły stosowania poleceń UNION w działaniu UNION ALL Utworzenie tabeli na podstawie wyników polecenia UNION Polecenia INTERSECT i EXCEPT Skończyliśmy ze złączeniami, czas zająć się czymś nowym Podzapytania i złączenia — studium porównawcze Zamiana podzapytania na złączenie Złączenie zwrotne jako podzapytanie Firma Grześka rozwija się Przybornik SQL W wynikach całego polecenia zostaną wyświetlone tylko te wiersze z pierwszego zapytania, które nie występują w drugim zapytaniu. W s z e l k i e s t a n ow i s k a , k t ó r e w y s t ę p u j ą w w y n i k a c h zw r ó c o n y c h p r z e z o b a z a p y t a n i a , n i e z o s t a n ą uw z g l ę d n i o n e w w y n i k a c h c a ł e g o p o l e c e n i a . 448 449 450 455 456 459 460 461 462 463 465 466 467 468 469 470 471 472 473 473 474 479 480 482 19 Spis treści 11 Ograniczenia, widoki i transakcje Zbyt wielu kucharzy psuje bazę danych Twoje bazy danych rozrosły się i muszą z nich korzystać także inne osoby. Problem polega na tym, że niektóre z nich nie będą znały języka SQL równie dobrze jak Ty. Musisz zatem mieć jakieś sposoby, by uniemożliwić im wprowadzanie nieprawidłowych danych, techniki pozwalające ukryć przed nimi wybrane dane oraz mechanizmy, które uchronią te osoby przed wzajemnym przeszkadzaniem sobie, gdy jednocześnie będą modyfikować zawartość bazy. W tym rozdziale zaczniemy ochraniać nasze dane przed błędami popełnianymi przez inne osoby. Witamy w Bazie Obronnej, w części 1. 484 485 486 487 Grzesiek zatrudnił pomocników Pierwszy dzień Kuby: Dopisywanie nowego klienta Kuba unika wartości NULL Trzy miesiące później Uwaga, KONTROLA: dodawanie OGRANICZEŃ SPRAWDZAJĄCYCH 488 489 Sprawdzanie płci 491 Praca Franka staje się nużąca 493 Tworzenie widoku 494 Oglądanie własnych widoków 495 Jak właściwie działa widok? 496 Czym są widoki Wstawianie, aktualizacja i usuwanie danych przy wykorzystaniu widoków 499 500 Sekret polega na tym, by udawać, że widok jest prawdziwą tabelą 503 Widoki z klauzulą CHECK OPTION Twój widok może pozwalać na aktualizację danych, jeśli… 504 505 Kiedy widok przestanie być potrzebny 506 Kiedy dobrej bazie przydarzy się coś złego 507 Co się stało w bankomacie Kolejne kłopoty z bankomatami 508 510 To nie marzenia, to transakcje 511 Klasyczny test ACID 512 SQL pomaga nam zarządzać swoimi transakcjami Co powinno się stać w bankomacie 513 514 Jak umożliwić korzystanie z transakcji w MySQL-u 515 Wypróbuj transakcje samodzielnie Przybornik SQL 518 BAZODANOWA KASA OSZCZęDNOŚCIOWA 20 Spis treści 12 Bezpieczeństwo Zabezpieczanie swych dóbr Włożyłeś niezwykle dużo wysiłku i czasu w utworzenie swojej bazy danych. I na pewno byłbyś zdruzgotany, gdyby przydarzyło się jej coś złego. Jednak musisz zapewnić dostęp do swoich danych innym osobom i obawiasz się, że mogłyby zapisać w bazie niewłaściwe dane lub, co gorsza, usunąć nie te dane, które powinny. Na szczęście w tym rozdziale dowiesz się, w jaki sposób można dodatkowo zabezpieczyć bazę danych oraz obiekty w niej umieszczone oraz w jaki sposób uzyskać pełną kontrolę nad tym, kto i jakie operacje na bazie może wykonywać. Problemy użytkowników Zapobieganie błędom w bazie klownów Zabezpieczanie konta administratora Dodanie nowego użytkownika Dokładnie określ, czego poszczególni użytkownicy potrzebują Prosta postać polecenia GRANT Różne wersje polecenia GRANT Usuwanie uprawnień Usuwanie uprawnień przydzielonych dzięki GRANT OPTION Precyzyjne usuwanie Współużytkowane konta przysparzają problemów Stosowanie roli Usuwanie roli Stosowanie roli z klauzulą WITH ADIMIN OPTION Łączenie poleceń CREATE USER i GRANT Lista Grześka stała się usługą globalną! Czy już coś wiesz o filii Listy Grzesia w swoim mieście? Korzystaj z SQL-a w swoich własnych projektach, ponieważ także Ty możesz odnieść taki sukces jak Grzesiek Przybornik SQL 522 523 525 526 527 528 531 532 533 534 538 540 540 542 547 548 549 549 550 root ważniak doktorek głupek pyskacz szczęściarz śpioch ziewacz 21 Spis treści A Pozostałości Część najważniejszych zagadnień (których nie opisaliśmy wcześniej) Nawet po tym wszystkim jest jeszcze coś więcej. Jest jeszcze dosłownie kilka rzeczy, o których, jak sądzimy, powinieneś wiedzieć. Nie czulibyśmy się w porządku, gdybyśmy je całkowicie zignorowali i nie poświęcili im choćby krótkiej wzmianki. A zatem: nim będziesz mógł odłożyć tę książkę na półkę, przeczytaj o tych drobnych, lecz ważnych sprawach. Poza tym kiedy skończysz lekturę tego dodatku, pozostaną Ci jeszcze dwa następne… oraz indeks… no i może jeszcze jakieś reklamy… a potem już naprawdę skończysz. Obiecujemy! Nr 1. Znajdź i zainstaluj graficzny program do obsługi używanego systemu zarządzania bazami danych Nr 2. Słowa zastrzeżone i znaki specjalne Nr 3. ALL, ANY oraz SOME Nr 4. Dodatkowe informacje o typach danych Nr 5. Tabele tymczasowe Nr 6. Rzutowanie typów Nr 7. Kim jesteś? Która jest godzina? Nr 8. Przydatne funkcje matematyczne Nr 9. Nr 10. Dwu-minutowy kurs PHP i MySQL-a Indeksowanie dla poprawy szybkości działania zapytań 552 554 556 558 560 561 562 563 565 566 ABSOLUTE ACTION ADD ADMIN AFTER AGGREGATE ALIAS ALL ALLOCATE ALTER AND ANY ARE ARRAY AS ASC ASSERTION AT AUTHORIZATION BEFORE BEGIN BINARY BIT BLOB BOOLEAN BOTH BREADTH BY CALL CASCADE CASCADED CASE CAST CATALOG CHAR CHARACTER CHECK CLASS CLOB CLOSE COLLATE COLLATION COLUMN COMMIT COMPLETION CONNECT CONNECTION CONSTRAINT CONSTRAINTS CONSTRUCTOR CONTINUE CORRESPONDING CREATE CROSS CUBE CURRENT CURRENT_DATE CURRENT_PATH CURRENT_ROLE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_ USER CURSOR CYCLE DATA DATE DAY DEALLOCATE DEC DECIMAL DECLARE DEFAULT DEFERRABLE DEFERRED DELETE DEPTH DEREF DESC DESCRIBE DESCRIPTOR DESTROY DESTRUCTOR DETERMINISTIC DICTIONARY DIAGNOSTICS DISCONNECT DISTINCT DOMAIN DOUBLE DROP DYNAMIC EACH ELSE END END_EXEC EQUALS ESCAPE EVERY EXCEPT EXCEPTION EXEC EXECUTE EXTERNAL FALSE FETCH FIRST FLOAT FOR FOREIGN FOUND FROM FREE FULL FUNCTION GENERAL GET GLOBAL GO GOTO GRANT GROUP GROUPING HAVING HOST HOUR IDENTITY IGNORE IMMEDIATE IN INDICATOR INITIALIZE INITIALLY INNER INOUT INPUT INSERT INT INTEGER INTERSECT INTERVAL INTO IS ISOLATION ITERATE JOIN KEY LANGUAGE LARGE LAST LATERAL LEADING LEFT LESS LEVEL LIKE LIMIT LOCAL LOCALTIME LOCALTIMESTAMP LOCATOR MAP MATCH MINUTE MODIFIES MODIFY MODULE MONTH NAMES NATIONAL NATURAL NCHAR NCLOB NEW NEXT NO NONE NOT NULL NUMERIC OBJECT OF OFF OLD ON ONLY OPEN OPERATION OPTION OR ORDER ORDINALITY OUT OUTER OUTPUT PAD PARAMETER PARAMETERS PARTIAL PATH POSTFIX PRECISION PREFIX PREORDER PREPARE PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURE PUBLIC READ READS REAL RECURSIVE REF REFERENCES REFERENCING RELATIVE RESTRICT RESULT RETURN RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP ROUTINE ROW ROWS SAVEPOINT SCHEMA SCROLL SCOPE SEARCH SECOND SECTION SELECT SEQUENCE SESSION SESSION_USER SET SETS SIZE SMALLINT SOME SPACE SPECIFIC SPECIFICTYPE SQL SQLEXCEPTION SQLSTATE SQLWARNING START STATE STATEMENT STATIC STRUCTURE SYSTEM_USER TABLE TEMPORARY TERMINATE THAN THEN TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TO TRAILING TRANSACTION TRANSLATION TREAT TRIGGER TRUE UNDER UNION UNIQUE UNKNOWN UNNEST UPDATE USAGE USER USING VALUE VALUES VARCHAR VARIABLE VARYING VIEW WHEN WHENEVER WHERE WITH WITHOUT WORK WRITE YEAR ZONE A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 22 B Spis treści Instalacja MySQL-a Spróbuj to zrobić samemu Cała zdobyta przez Ciebie wiedza i umiejętności nie na wiele się zdadzą, jeśli nie wykorzystasz ich w praktyce. W tym dodatku znajdziesz instrukcje dotyczące instalacji swojego własnego serwera MySQL, którego będziesz mógł używać do zabawy i pracy. Zacznij działać i to szybko! Instrukcje i rozwiązywanie problemów Proces instalacji MySQL-a w systemie Windows 570 570 571 C Przypomnienie narzędzi Wszystkie nowe narzędzia SQL W tym dodatku, w jednym jedynym miejscu, zostały po raz pierwszy zebrane wszystkie podpowiedzi dotyczące SQL-a… ale będą tu tylko przez jedną noc (żartujemy)! Znajdziesz tu podsumowanie wszystkich porad i informacji o SQL-u, jakie zamieściliśmy w całej książce. Poświęć chwilkę, by przejrzeć listę, i rozkoszuj się poczuciem dumy — już znasz wszystkie te rady i informacje. Symbole 576 S Skorowidz 583 23 t e g o p o l e c e n i a d o C R E A T E D A T A B A S E b a z y d a n y c h , U ż y w a j u t w o r z e n i a c a ł e j k t ó r a b ę d z i e z a w i e r a ć w s z y s t k i e k t ó r a b ę d z i e z a w i e r a ć w s z y s t k i e t a b e l e . T w o j e DELETE To narzędzie, którego możesz używać do usuwania wierszy z tabeli. Stosuj w nim klauzulę WHERE, by precyzyjnie określać wiersze, których chcesz określać wiersze, których chcesz określać wiersze, których chcesz się pozbyć. się pozbyć. USE DATABASE Pozwala wskazać bazę danych, na której chcesz pracować, na której chcesz pracować, na przykład by utworzyć w na przykład by utworzyć w niej tabele. niej tabele. ALTER TABLE To polecenie pozwala zmieniać To polecenie pozwala zmieniać nazwę tabeli oraz jej strukturę nazwę tabeli oraz jej strukturę bez konieczności usuwania jej bez konieczności usuwania jej zawartości. N U L L o r a z N O T N U L L N U L L o r a z N O T N U L L t a k ż e z a s t a n o w i ć s i ę t a k ż e z a s t a n o w i ć s i ę w k t ó r y c h w k t ó r y c h P o w i n i e n e ś P o w i n i e n e ś w s k a z a ć k o l u m n y , w s k a z a ć k o l u m n y , t o ś c i t o ś c i n i e m o g ą w y s t ę p o w a ć w a r n i e m o g ą w y s t ę p o w a ć w a r i i n a p r z y k ł a d d l a t e g o , n a p r z y k ł a d d l a t e g o , t o p ó ź n i e j s z e t o p ó ź n i e j s z e N U L L , N U L L , t o w a n i e d a n y c h . t o w a n i e d a n y c h . t o w a n i e d a n y c h . ł o b y ł o b y r u d n i r u d n i ż e u t ż e u t s o r s o r s o r t a k i c h k o l u m n t a k i c h k o l u m n t a k i c h k o l u m n i i i w y s z u k i w a n i e w y s z u k i w a n i e w y s z u k i w a n i e t w o r z e n i a t w o r z e n i a t w o r z e n i a u ż y ć w n i c h s ł ó w u ż y ć w n i c h s ł ó w u ż y ć w n i c h s ł ó w P o d c z a s P o d c z a s P o d c z a s b ę d z i e s z m u s i a ł b ę d z i e s z m u s i a ł b ę d z i e s z m u s i a ł k l u c z o w y c h N O T N U L L . Podzapytanie skorelowane Podzapytanie, które korzysta i zależy od wartości zwracanych przez zapytanie zewnętrzne. przez zapytanie zewnętrzne. NATURAL JOIN Złączenie wewnętrzne, w którym Złączenie wewnętrzne, w którym pominięto klauzulę „ON”. Działa pominięto klauzulę „ON”. Działa jedynie w przypadku, gdy łączone jedynie w przypadku, gdy łączone jedynie w przypadku, gdy łączone tabele zawierają kolumnę o takiej UPDATE tabele zawierają kolumnę o takiej tabele zawierają kolumnę o takiej samej nazwie. samej nazwie. Zapytanie zewnętrzne Zapytanie zewnętrzne Zapytanie zawierające w sobie Zapytanie zawierające w sobie zapytanie wewnętrzne, określane zapytanie wewnętrzne, określane także jako podzapytanie. także jako podzapytanie. To polecenie aktualizuje istniejącą kolumnę (lub kolumny), zapisując w niej nową wartość. Także w tym poleceniu można używać klauzuli poleceniu można używać klauzuli poleceniu można używać klauzuli poleceniu można używać klauzuli WHERE. WHERE. D E F AU L T To s ł o w o k l u c z o w e p o z w a l a i ć d o m y ś l n ą w a r t o ś ć k t ó r a b ę d z i e u ż y w a n a , o k r e ś l p o d c z a s z a p i s y w a n i a r e k o r d u k o l u m n y , k o l u m n y i j e ś l w a r t o ś ć d a n e j t a b e l j a w n i e p o d a n a . d o n i e z o s t a n i e i DROP TABLE To polecenie pozwala usunąć tabelę z bazy, na przykład w sytuacji, gdy tworząc ją, popełnisz jakiś błąd. Jednak powinieneś z niego korzystać, jeszcze zanim zaczniesz dodawać do tabeli dane przy użyciu polecenia INSERT. i , Z ł ą c z e n i e K R Z Y Ż O W E Z ł ą c z e n i e K R Z Y Ż O W E Z ł ą c z e n i e K R Z Y Ż O W E ( C R O S S J O I N ) ( C R O S S J O I N ) ( C R O S S J O I N ) Z w r a c a k a ż d y w i e r s z z p i e r w s z e j Z w r a c a k a ż d y w i e r s z z p i e r w s z e j Z w r a c a k a ż d y w i e r s z z p i e r w s z e j p o ł ą c z o n y k o l e j n o z k a ż d y m w i e r s z e m z d r u g i e j t a b e l t a k ż e p o d w i e l o m a t a k ż e p o d w i e l o m a Z n a n e Z n a n e j a k : j a k : . . i i t a b e l t a b e l t a k i m i t a k i m i , , n a z w a m i n a z w a m i Z Ł Ą C Z E N I E K A R T E Z J A Ń S K I E Z Ł Ą C Z E N I E K A R T E Z J A Ń S K I E i n n y m i i n n y m i o r a z Z Ł Ą C Z E N I E B E Z Z Ł Ą C Z E N I A . INNER JOIN INNER JOIN Dowolne złączenie zawierające Dowolne złączenie zawierające wiersze z obu tabel i wiersze z obu tabel i wykorzystujące jakiś warunek wykorzystujące jakiś warunek logiczny. logiczny. logiczny. Podzapytanie nieskorelowane Podzapytanie nieskorelowane To niezależne podzapytanie, które To niezależne podzapytanie, które w żaden sposób nie odwołuje się w żaden sposób nie odwołuje się w żaden sposób nie odwołuje się do zapytania zewnętrznego. do zapytania zewnętrznego. do zapytania zewnętrznego. Złączenie RÓWNOŚCIOWE i RÓŻNOŚCIOWE To dwa rodzaje złączeń wewnętrznych. Pierwszy z nich zwraca wiersze, które są sobie równe, a drugi wiersze, które są od siebie różne. 4. Projektowanie dobrych tabel Po co być normalnym? … i wtedy mamusia zadzwoniła do swojego tajemniczego pomocnika! W porządku, to nie jest normalne. Dotychczas tworzyłeś tabele bez zwracania na nie szczególnej uwagi. I wszystko było w porządku, tabele działały bez problemów. Mogłeś w nich zapisywać, modyfikować, usuwać i pobierać dane. Jednak w miarę zwiększania się ilości danych w tabelach zaczniesz zauważać, że są rzeczy, które mogłeś zrobić wcześniej, by ułatwić sobie w przyszłości tworzenie klauzul WHERE. Innymi słowy, musisz znormalizować swoje tabele. to jest nowy rozdział  193193 Poławianie danych Dwie wędkarskie tabele Dwóch znajomych wędkarzy, Jacek i Marek, stworzyło tabele do gromadzenia danych o rekordowych połowach. Tabela Marka zawiera kolumny pozwalające na zapisanie łacińskiej nazwy gatunku ryby, nazwy polskiej, wagi złowionej ryby oraz miejsca dokonania połowu. Nie zawiera jednak kolumn pozwalających na zapianie imienia i nazwiska osoby, która ustanowiła rekord. Ta tabela ma jedynie cztery kolumny. Porównaj ją z tabelą rekordowe_polowy przedstawioną na następnej stronie. polowy_informacje nazwa nazwa_gatunkowa miejsce bass sandacz pstrąg okoń płotka łuskot węgorz szczupak złota rybka łosoś M. salmoides S. vitreus O. Clarki P. Flavescens R. rutilus L. Osseus A. anguilla E. americanus C. auratus O. Tshawytscha Wigry, PD Dziubiele, WM Mrzygłód, PK Pisz, WM Charzykowy, PM Czaplinek, ZP Swornegacie, PM Karwica, WM Warszawa, MZ Toruń, KP waga 1,23 kg 2,75 kg 1,20 kg 0,85 kg 0,65 kg 1,10 kg 1,45 kg 3,34 kg 0,35 kg 3,10 kg Jestem ichtiologiem. Chcę szukać w tabeli wyłącznie łacińskich nazw gatunkowych i nazw używanych potocznie, by określić wagę rekordowej ryby oraz gdzie ją złowiono. Marek 194 Rozdział 4. Projektowanie dobrych tabel Tabela Jacka także zawiera polską nazwę złowionej ryby oraz jej wagę; jednak oprócz tego Jacek umieścił w niej kolumny pozwalające na zapisanie imienia i nazwiska szczęśliwego wędkarza oraz nazwy województwa, w którym dokonano połowu. Także ta tabela służy do rejestrowania rekordowych połowów wędkarskich, jednak zawiera niemal dwukrotnie więcej kolumn. imie nazwisko nazwa miejsce wojewodztwo rekordowe_polowy bass sandacz pstrąg okoń płotka łuskot węgorz szczupak złota rybka łosoś Wigry Dziubiele Mrzygłód Pisz Charzykowy Czaplinek Swornegacie Karwica Warszawa Toruń PD WM PK WM PM ZP PM WM MZ KP waga 1,23 kg 2,75 kg 1,20 kg 0,85 kg 0,65 kg 1,10 kg 1,45 kg 3,34 kg 0,35 kg 3,10 kg data 5.9.1947 16.8.1960 23.6.1978 18.5.1934 1.8.1965 31.9.1988 12.8.1973 11.6.1995 25.9.2003 17.8.1991 Jan Adrian Zenon Maria Piotr Ignacy Krzysztof Paweł Andrzej Roman Kowalski Bródka Krawczyk Popiela Drymza Wikorczyk Dubała Wronek Książewicz Wiertek Zaostrz ołówek Dla obu tabel napisz zapytanie, które pobierze wszystkie rekordowe połowy dokonane w województwie podkarpackim. Piszę artykuły dla magazynu „Weekend z wędką”. Muszę znać imiona i nazwiska wędkarzy, którzy ustanowili rekordowe połowy, daty tych połowów oraz ich miejsca. Jacek jesteś tutaj  195 Rozwiązanie ćwiczenia Zaostrz ołówek Rozwiązanie Dla każdej z tabel napisz zapytanie, które pobierze informacje o rekordowych połowach dokonanych na terenie województwa podkarpackiego. Niemal nigdy nie muszę wyszukiwać informacji na podstawie województwa. Dlatego informacje o województwie zapisuję w tabeli w tej samej kolumnie, w której umieszczam nazwę miejsca, gdzie dokonano rekordowego połowu. Musimy zastosować operator LIKE i odszukać interesujące nas rekordy na podstawie pola zawierającego połączoną nazwę miejscowości i oznaczenie województwa. SELECT * FROM polowy_informacje WHERE miejsce LIKE PK ; nazwa pstrąg nazwa_gatunkowa O. Clarki miejsce Mrzygłód, PK waga 1,20 kg Często muszę przeszukiwać informacje na podstawie województwa, dlatego też utworzyłem w tabeli odrębną kolumnę określającą województwo, w którym dokonano rekordowego połowu. To zapytanie odwołuje się bezpośrednio do kolumny „wojewodztwo”. SELECT * FROM rekordowe_polowy WHERE województwo = PK ; imie Zenon nazwisko Krawczyk nazwa pstrąg miejsce Mrzygłód wojewodztwo PK waga 1,20 kg data 23.6.1978 196 Rozdział 4. Projektowanie dobrych tabel P.: A zatem tabela Jacka jest lepsza od tabeli Marka? O.: Nie. To dwie różne tabele, stworzone w innych celach. W praktyce Marek rzadko kiedy będzie musiał poszukiwać w swojej tabeli informacji na podstawie województwa, gdyż tak naprawdę interesują go jedynie nazwy gatunkowe i potoczne złowionych ryb oraz, oczywiście, ich waga. Z drugiej strony, Jacek będzie musiał korzystać z informacji o województwie podczas poszuki- wania danych w swojej tabeli. To właśnie z tego powodu w jego tabeli informacje o województwie, w jakim dokonano rekor- dowych połowów, znalazły się w osobnej kolumnie. To mu ułatwi poszukiwanie danych na podstawie województwa. P.: Czy podczas przeszukiwania tabel powinniśmy unikać stosowania operatora LIKE? O.: Nic nie przemawia za tym, by nie stosować operatora LIKE, niemniej jednak może to przysporzyć pewnych problemów oraz prowadzić do otrzymywania niepożądanych wyników. Jeśli w kolumnach są zapisywane złożone informacje, to operator LIKE nie będzie dostatecznie precyzyjny, by je pobierać. Nie istnieją głupie pytania P.: Dlaczego krótsze zapytania są lepsze do długich? O.: Im prostsze jest zapytanie, tym lepiej. Zapytania będą się stawać coraz bardziej skomplikowane wraz z powiększaniem się bazy danych i ilości umieszczonych w niej tabel. Jeśli na samym początku zaczniesz od możliwie jak najprostszych zapytań, to w przyszłości na pewno tego nie pożałujesz. P.: Chcesz przez to powiedzieć, że zawsze powinienem przechowywać w kolumnach bardzo małe fragmenty informacji? O.: Niekoniecznie. Analizując tabele Jacka i Marka, mogłeś już zauważyć, że wszystko zależy od tego, w jaki sposób chcesz korzystać z tabel. Na przykład wyobraź sobie tabele dotyczące samochodów — jedną, z której korzysta warsztat mechaniczny, i drugą, używaną przez właściciela komisu samochodowego. Mechanicy mogą potrzebować szczegółowych informacji o każdym samochodzie; z kolei właścicielowi komisu wystarczy marka, model, rok produkcji oraz numer nadwozia. P.: A wyobraźmy sobie adres pocztowy. Czy nie moglibyśmy utworzyć jednej kolumny, w której byłby zapisany cały adres, oraz kilku innych, w których umieścilibyśmy jego poszczególne elementy? O.: Choć takie powielanie danych może Ci się obecnie wydawać całkiem dobrym pomysłem, to jednak pomyśl, o ile więcej miejsca na dysku zajmie taka baza, gdy rozrośnie się do potężnych rozmiarów. Poza tym w przypadku powielania danych w poleceniach INSERT i UPDATE pojawią się dodatkowe kolumny, o których będziesz musiał pamiętać. Przyjrzyjmy się dokładniej, jak należy projektować tabele, by optymalnie pasowały do sposobów, w jakie będziemy z nich korzystać. Sposób, w jaki masz zamiar korzystać z danych, będzie determinował postać tworzonych tabel. WYSIL SZaRE komóRkI SQL jest językiem używanym w relacyjnych bazach danych. Jak uważasz, czym są te „relacje” w świecie baz danych? jesteś tutaj  197 Wytyczne tworzenia tabel Tabele dotyczą związków Bazy danych obsługiwane przy użyciu języka SQL są nazywane systemami zarządzania relacyjnymi bazami danych (ang. Relational Database Management System, w skrócie RDBMS). Ale nie zaprzątaj sobie głowy zapamiętywaniem tych nazw. Dla nas najważniejsze jest tylko jedno słowo: RELACYJNE*. Dla Ciebie oznacza ono mniej więcej tyle, że aby zaprojektować odlotową tabelę, musisz zastanowić się i określić, jak poszczególne kolumny są ze sobą powiązane i wspólnie opisują zagadnienie, jakiego dotyczy tabela. Całe wyzwanie i sztuka polega na tym, by opisać zagadnienie, wykorzystując do tego celu kolumny, które zagwarantują łatwość pobierania danych z tabeli. A to oczywiście zależy od tego, jakie informacje chcemy pobierać z tabeli. Można wyróżnić kilka bardzo ogólnych kroków, jakie należy wykonać, projektując tabele. 1. Wybierz jedno zagadnienie, które ma opisywać tabela. Czego mają dotyczyć informacje zapisywane w tabeli? 2. Utwórz listę informacji o danym zagadnieniu, których będziesz potrzebował podczas korzystania z tabeli. Jak będziesz korzystał z tabeli? 3. Na podstawie tej listy podziel informacje o zagadnieniu na elementy, których następnie będziesz mógł użyć, określając organizację tabeli. Jak będzie Ci najłatwiej przeszukiwać i pobierać dane z tabeli? 198 Rozdział 4. * Niektórzy uważają, że słowo „relacyjny” odnosi się do wielu tabel powiązanych ze sobą. Jednak jest to błędna opinia. Projektowanie dobrych tabel ćwiczenie ć Czy na podstawie przedstawionego poniżej zdania, określającego, w jaki sposób ichtiolog Marek chce przeszukiwać i pobierać dane z tabeli, potrafisz określić, jakie powinny być jej kolumny? Wpisz nazwy kolumn w pustych prostokątach na poniższym rysunku. Przeszukując tabelę na podstawie nazwy lub nazwy gatunkowej , chcę uzyskać informacje o miejscu dokonania połowu oraz wadze złowionej ryby. Twoja kolej. Napisz analogiczne zdanie dotyczące Jacka — autora artykułów dla magazynu „Weekend z wędką”, który korzysta z bazy, by notować w niej szczegółowe informacje na potrzeby swoich artykułów. Następnie narysuj strzałki prowadzące od nazw kolumn do miejsca w zdaniu, w którym Jacek nawiązuje do danej kolumny. wojewodztwo nazwisko imie nazwa miejsce waga data jesteś tutaj  199 Ćwiczenie. Rozwiązanie Czy na podstawie przedstawionego poniżej zdania określającego, w jaki sposób ichtiolog Marek chce przeszukiwać i pobierać dane z tabeli, potrafisz określić, jakie powinny być jej kolumny? Wpisz nazwy kolumn w pustych prostokątach na poniższym rysunku. Rozwiązanie ćwiczenia nazwa nazwa_gatunkowa Przeszukując tabelę na podstawie nazwy lub nazwy gatunkowej, chcę uzyskać informacje o miejscu dokonania połowu oraz wadze złowionej ryby. waga miejsce Twoja kolej. Napisz analogiczne zdanie dotyczące Jacka — autora artykułów dla magazynu „Weekend z wędką”, który korzysta z bazy, by notować w niej szczegółowe informacje na potrzeby swoich artykułów. Następnie narysuj strzałki prowadzące od nazw kolumn do miejsca w zdaniu, w którym Jacek nawiązuje do danej kolumny. wojewodztwo nazwisko imie nazwa Przeszukując tabelę według nazwy ryby, chciałbym uzyskać imię oraz nazwisko wędkarza, jak również miejsce połowu, województwo, wagę złowionej ryby oraz datę połowu . miejsce waga data 200 Rozdział 4. Projektowanie dobrych tabel Ale dlaczego Jacek ma poprzestawać na tym? Dlaczego nie podzieli daty na kolumny dni, z nazwą ulicy i numerem domu. miesięcy i lat? Nawet kolumnę określającą miejsce można by dalej podzielić na osobne kolumny oczywiście, że można by tak zrobić. Jednak nasze dane nie muszą być podzielone aż tak dokładnie. Przynajmniej nie w tym przypadku. Gdyby jednak Jacek miał zamiar napisać artykuł o tym, gdzie pojechać na wakacje, by złapać dużą rybę, to w takim przypadku mógłby podzielić kolumnę „miejsce” na nazwę ulicy i numer, tak by czytelnicy mogli znaleźć nocleg jak najbliżej rekordowego łowiska. Jednak Jacek potrzebuje wyłącznie informacji o miejscu i województwie, dlatego utworzył tylko tyle kolumn, ile jest koniecznych, by niepotrzebnie nie powiększać rozmiaru bazy danych. Uznał, że w jego sytuacji nie ma sensu bardziej dzielić danych; innymi słowy, uznał, że jego informacje są danymi atomowymi. WYSIL SZaRE komóRkI Jak myślisz, co oznacza termin „dane atomowe” w kontekście informacji zapisywanych w relacyjnych bazach danych? jesteś tutaj  201 Dane atomowe Dane atomowe Czym jest atom? To niewielki fragment materii, którego nie można lub nie należy dalej dzielić. To samo dotyczy danych. Kiedy zostaną one uznane za dane ATOMOWE, oznacza to, że zostały one już podzielone na najmniejsze elementy, których nie należy dalej dzielić. Dostawa w 30 minut lub gratis Przyjrzyjmy się na przykład dostarczycielowi pizzy. Aby dostarczyć zamówienie w odpowiednie miejsce, wystarczy, że w jednej kolumnie zapiszemy nazwę ulicy i numer domu. Na jego potrzeby są to dane atomowe. Dostawca nigdy nie będzie poszukiwał samego numeru domu. W rzeczywistości, jeśli miejsce dostawy zostałoby podzielone na nazwę ulicy i numer domu, to zapytania, które musiałby zadawać dostawca, byłyby dłuższe i bardziej złożone, a to spowodowałoby wydłużenie czasu dostarczania pizzy do klienta. N a p o t r z e b y d o s t aw c y p i z z y a d r e s z a p i s a n y w j e d n e j k o l um n i e j e s t w y s t a r c z a j ą c o a t om ow ą i n f o rm a c j ą . 202 Rozdział 4. Projektowanie dobrych tabel Lokalizacja, lokalizacja, lokalizacja A teraz przeanalizujmy przykład pośrednika handlu nieruchomościami. Taki pośrednik mógłby chcieć, by nazwa ulicy została zapisana w osobnej kolumnie. Mógłby bowiem chcieć podać w zapytaniu nazwę ulicy, by uzyskać informacje o wszystkich domach na sprzedaż położonych przy niej. A zatem w przypadku pośrednika handlu nieruchomościami informacjami atomowymi są nazwa ulicy oraz numer domu. Z kolei w przypadku pośrednika handlu nieruchomościami rozdzielenie nazwy ulicy od numeru domu i zapisanie ich w osobnych kolumnach pozwoli mu odnajdywać wszystkie domy na sprzedaż położone przy konkretnej ulicy za pomocą jednego, prostego zapytania. jesteś tutaj  203 Tworzenie danych atomowych Dane atomowe a Twoje tabele Poniżej przedstawiliśmy kilka pytań, które możesz sobie zadać, aby ułatwić sobie określenie danych, jakie należy umieścić w tworzonych tabelach. 1. Co jest podstawowym zagadnieniem opisywanym przez tabelę? Czy tabela opisuje klownów, krowy, pączki, czy też polityków? 2. W jaki sposób będziesz korzystał z tabeli, by uzyskiwać informacje o tym zagadnieniu? 3. Czy kolumny tabeli zawierają dane atomowe, dzięki czemu używane zapytania mogą być krótkie i precyzyjne? Projektuj tabele w taki sposób, aby przeszukiwanie ich było jak najprostsze. Nie istnieją głupie pytania P.: Czyż atomy nie są bardzo małe? Czy nie powinienem zatem dzielić swoich informacji na naprawdę bardzo małe elementy? O.: Nie. Tworzenie danych atomowych oznacza podzielenie ich na najmniejsze elementy konieczne do stworzenia wydajnych tabel, a nie na podzielenie ich na najmniejsze możliwe elementy. Nie należy dzielić danych bardziej niż to konieczne. Jeśli nie potrzebujesz dodatkowych kolumn, to nie twórz ich tylko i wyłącznie dlatego, że mógłbyś to zrobić. P.: W czym może mi pomóc stosowanie danych atomowych? O.: Może Ci pomóc w zapewnieniu, że informacje przechowywane w tabeli będą precyzyjne. Jeśli na przykład utworzysz osobną kolumnę przeznaczoną do przechowywania numeru domu, to będziesz mógł upewnić się, że będą w niej zapisywane wyłącznie liczby. Stosowanie danych atomowych pozwala także poprawić efektywność wykonywanych zapytań, gdyż same zapytania są łatwiejsze do napisania, a czas ich wykonania jest krótszy. Korzyści, jakie zapewnia nam stosowanie danych atomowych, są tym wyraźniejsze, im więcej jest danych przechowywanych w tabeli. 204 Rozdział 4. Zaostrz ołówek Poniżej przedstawiliśmy dwie oficjalne reguły dotyczące danych atomowych. Dla każdej z nich narysuj dwie hipotetyczne tabele, które nie będą spełniać wytycznych reguły. Projektowanie dobrych tabel Reguła 1.: W kolumnie z danymi atomowymi w jednym wierszu tabeli nie może się znajdować kilka wartości tego samego typu. Tej reguły nie spełnia tabela Grześka — moje_kontakty, a konkretnie jej pole „zainteresowania”. Reguła 2.: W tabeli zawierającej dane atomowe nie może być kilku kolumn zawierających dane tego samego typu. Tej reguły nie spełnia tabela proste_drinki. jesteś tutaj  205 Zaostrz ołówek. Rozwiązanie Zaostrz ołówek Rozwiązanie Poniżej przedstawiliśmy dwie oficjalne reguły dotyczące danych atomowych. Dla każdej z nich narysuj dwie hipotetyczne tabele, które nie będą spełniać wytycznych reguły. Reguła 1.: W kolumnie z danymi atomowymi w jednym wierszu tabeli nie może się znajdować kilka wartości tego samego typu. Oczywiście Twoja odpowiedź na pewno będzie inna, ale oto jeden z możliwych przykładów: pożywienie składniki chleb sałatka drożdże, mleko, jajka, mąka pomidor, ogórek, sałata Czy pamiętasz tabelę Grześka? Zawierała ona kolumnę zainteresowania, w której Grzesiek zapisywał niejednokrotnie kilka różnych zainteresowań danej osoby, przez co przeszukiwanie tabeli było prawdziwym koszmarem. Ta sama sytuacja występuje w tej tabeli. Wyobraź sobie odszukanie pomidorów wśród tych wszystkich pozostałych składników. Reguła 2.: W tabeli zawierającej dane atomowe nie może być kilku kolumn zawierających dane tego samego typu. Zbyt wiele kolumn do podawania studentów! nauczyciel Pani Martini Pan Grog student1 student2 student3 Janek Sonia Romek Tymon Kasia Julia 206 Rozdział 4. Projektowanie dobrych tabel ćwiczenie Skoro już znasz oficjalne reguły oraz trzy kroki pozwalające na stosowanie danych atomowych, przeanalizuj wszystkie tabele przedstawione do tej pory w książce i wyjaśnij, dlaczego zawierają one dane atomowe, albo co sprawia, że zapisywane w nich informacje nie są danymi atomowymi. Tabela Grześka, ze strony 83 Tabela z ocenami pączków, ze strony 112 Tabela z informacjami o klownach, strona 155 Tabela drinków, ze strony 93 Tabela połowów wędkarskich, strona 194 jesteś tutaj  207 Normalizacja tabel Dlaczego warto być normalnym? Kiedy wyczerpie się Twój limit godzin na konsultacje ze specjalistą do spraw baz danych i będziesz musiał zatrudnić projektantów baz SQL, fajnie by było, gdybyś nie musiał tracić cennych godzin na tłumaczenie im, jak działają Twoje tabele. Cóż, tworzenie tabel ZNORMALIZOWANYCH oznacza, że są one zgodne z pewnymi standardami, które projektanci baz danych będą rozumieć. Co więcej, na pewno ucieszy Cię fakt, iż nasze tabele zawierające dane atomowe są już w połowie drogi do owej „normalności”. Zapisywanie w tabeli danych atomowych jest pierwszym krokiem na drodze do tworzenia tabel ZNOrMALIZOWANYCH. Rozwiązanie ćwiczenia Skoro już znasz oficjalne reguły oraz trzy kroki pozwalające na stosowanie danych atomowych, przeanalizuj wszystkie tabele przedstawione do tej pory w książce i wyjaśnij, dlaczego zawierają one dane atomowe, albo co sprawia, że zapisywane w nich informacje nie są danymi atomowymi. Tabela Grześka, ze strony 83 Nie jest atomowa. Kolumny „zainteresowania” i „szuka” nie są zgodne z regułą 1. Tabela z ocenami pączków, ze strony 112 Tabela jest atomowa. W odróżnieniu od kolumn tabeli proste_drinki każda kolumna tej tabeli przechowuje informacje różnego typu. Oprócz tego, w odróżnieniu od kolumny „aktywnosci” tabeli klownów w każdej z kolumn tej tabeli przechowywany jest tylko jeden element informacji. Tabela z informacjami o klownach, strona 155 Tabela nie jest atomowa. W niektórych rekordach w kolumnie „aktywnosci” zapisywanych jest więcej czynności niż jedna, co jest sprzeczne z regułą 1. Tabela drinków, ze strony 93 Tabela nie jest atomowa. Zawiera ona więcej niż jedną kolumnę „składnik”, co jest sprzeczne z regułą 2. Tabela połowów wędkarskich, strona 194 Tabela jest atomowa. W każdej kolumnie są zapisywane informacje innego typu. Każda kolumna zawiera także tylko jedną informację. 208 Rozdział 4. Zalety normalizacji tabel Projektowanie dobrych tabel 1. W tabelach znormalizowanych dane się nie powielają, co pozwala ograniczyć wielkość bazy. Unikanie powielania danych pozwoli Ci zaoszczędzić miejsce na dysku. 2. Dzięki mniejszej ilości informacji w bazie wszelkie zapytania będą wykonywane szybciej. Moje tabele nie są aż tak duże. Dlaczego zatem mam sobie zawracać głowę jakąś normalizacją? Ponieważ nawet w przypadku małych tabel można na tym zyskać. Poza tym w miarę upływu czasu tabele stają się coraz większe. Jeśli od samego początku Twoje tabele będą znormalizowane, to w przyszłości, gdy zapytania zaczną być wykonywane zbyt wolno, nie będziesz musiał ich modyfikować. jesteś tutaj  209 Normalizacja i 1NF Klowni nie są normalni Czy pamiętasz tabelę z informacjami o publicznych wystąpieniach klownów? Śledzenie poczynań klownów stało się ogólnokrajowym szaleństwem i nasza stara tabela może nie sprostać zwiększonym wymaganiom, ponieważ kolumny wyglad i aktywnosci zawierają tak wiele danych. Na nasze potrzeby ta tabela nie jest atomowa. Wyszukiwanie danych w tych dwóch kolumnach jest naprawdę trudne, gdyż zawierają one tak wiele informacji! klowni_informacje wyglad aktywnosci balony, mały samochodzik K, czerwone włosy, zielona sukienka, ogromne stopy M, pomarańczowe włosy, niebieski garnitur, ogromne stopy mim K, żółta koszula, workowate czerwone spodnie M, cygaro, czarne włosy, niewielki kapelusz K, różowe włosy, ogromny kwiat, niebieska sukienka M, niebieskie włosy, czerwony garnitur, ogromny nos K, pomarańczowy garnitur, workowate spodnie K, cała na pomarańczowo i w cekinach M, w przebraniu kobiety, kostium w plamki M, zielono-fioletowy kostium, szpiczasty nos trąbka, parasolka skrzypce krzyk, taniec balony taniec utrzymywanie równowagi, mały samochodzik śpiew, taniec wchodzenie do malutkiego samochodu imie Eklerka Pan Pimpuś Pani Smyk Pan Hobo Klarabela Skuter Zippo Balbina Gonzo Pan Smyk ostatnio_widziano Dom opieki „Spokojna Ostoja” Urodziny u Jacka Zielińskiego MegaStragan Cyrk Koloseum Dom opieki „Wesoła Wdówka” Szpital Miejski Centrum Handlowe Skarbiec Auta Edwarda Zabawex Zaostrz ołówek Spróbujmy tak zmodyfikować tabelę klowni_informacje, by stała się ona tabelą atomową. Spróbuj zaproponować inną strukturę tabeli, zakładając przy tym, że chcemy wyszukiwać w niej informacje na podstawie kolumn wyglad, aktywnosci oraz ostatnio_widziano. 9 2 2 e i n o r t s a n z s e i z d j a n z i z d e i w o p d O 210 Rozdział 4. Projektowanie dobrych tabel W połowie drogi do 1NF Pamiętasz zapewne, że umieszczenie w tabeli danych atomowych to jedynie połowa drogi do znormalizowania tabeli. Kiedy tabela będzie całkowicie znormalizowana, przyjmie ona PIERWSZĄ POSTAĆ NORMALNĄ (ang. first normal form, w skrócie 1NF). Aby tabela miała pierwszą postać normalną, musi spełniać dwa warunki: Już wiem, jak zaspokoić ten wymóg. Każdy wiersz danych musi zawierać wartości atomowe Aby całkowicie znormalizować tabelę, do każdego z jej rekordów musimy dodać klucz główny. Każdy wiersz danych musi mieć unikalny identyfikator, nazywany kluczem głównym (ang. primary key). WYSIL SZaRE komóRkI Jak sądzisz, jakiego typu kolumny będą się nadawały do tworzenia klucza głównego? jesteś tutaj  211 Reguły klucza głównego Reguły KLUCZA GŁÓWNEGO Kolumnę, która ma pełnić rolę klucza głównego tabeli, należy utworzyć specjalnie w tym celu od razu podczas projektowania tabeli. Na kilku kolejnych stronach utworzymy tabelę i wskażemy kolumnę, która będzie jej kluczem głównym. Jednak zanim to zrobimy, przyjrzymy się, czym ten klucz główny jest. Klucz główny służy do zapewniania unikalności wszystkich rekordów tabeli. A to oznacza, że wartości w kolumnie klucza głównego nie mogą się powtarzać. Przeanalizujmy przykład tabeli przedstawionej poniżej. Jak myślisz, czy któraś z jej kolumn nadawałaby się na klucz główny? Kluczem głównym tabeli nazywamy kolumnę, która sprawia, że każdy wiersz tabeli jest unikalny. PESEL nazwisko numer telefon Numery PESEL mają unikalne wartości i są przypisywane konkretnym osobom. Może zatem ta kolumna nadawałaby się na klucz główny? W tych trzech kolumnach wartości mogą się powtarzać; na przykład z dużą dozą prawdopodobieństwa możemy założyć, że w tabeli znajdzie się więcej niż jedna osoba o imieniu Jan; podobnie może się zdarzyć, że kilka osób będzie mieszkać razem i używać tego samego numeru telefonu. Dlatego te trzy kolumny raczej nie będą się nadawały na pełnienie roli klucza głównego tabeli. Uwaga! Zadbaj o swoje rekordy, używając kolumny PESEL jako klucza głównego tabeli. Przy coraz częstszych kradzieżach tożsamości coraz mniej osób zgodzi się na podanie swojego numeru PESEL, co jest zresztą całkowicie zrozumiałe. Jest to zbyt ważna informacja, by ryzykować jej kradzież. Czy możesz z całkowitą pewnością stwierdzić, że Twoja baza jest bezpieczna? Jeśli nie, to wszystkie te numery PESEL mogą zostać skradzione wraz z tożsamością ich właścicieli. 212 Rozdział 4. Projektowanie dobrych tabel W kolumnie klucza głównego nie mogą się pojawiać wartości NULL. Gdyby w kolumnie klucza głównego można było zapisywać wartości NULL, to rekordy nie byłyby unikalne, gdyż wartość NULL mogłaby się pojawić w kilku z nich. Wartość kolumny klucza głównego musi zostać określona w momencie dodawania rekordu do tabeli. Jeśli wartość kolumny klucza głównego nie zostanie określona w momencie dodawania rekordu, to ryzykujemy, że pojawi się w niej wartość NULL, co może doprowadzić do powtórzenia się tego samego rekordu w tabeli i naruszenia zasad pierwszej postaci normalnej. Klucz główny musi być krótki. Klucz główny musi zawierać tylko te informacje, które są niezbędne dla zapewnienia jego unikalności, i nic więcej. Wartości w kolumnie klucza głównego nie mogą się zmieniać. Gdyby można było zmieniać wartości zapisane w kolumnie klucza głównego, to przypadkowo można by podać wartość, która została już użyta. Pamiętaj, wszystkie wartości w kolumnie klucza głównego zawsze muszą być unikalne. WYSIL SZaRE komóRkI Czy na podstawie tych wszystkich informacji możesz podać przykład dobrego klucza głównego? Przejrzyj przykładowe tabele, które prze
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

SQL. Rusz głową!
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ą: