SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   MySQL. Szybki start
           KATALOG KSI¥¯EK
                                         Autor: Larry Ullman
                      KATALOG ONLINE     T³umaczenie: Marek Pa³czyñski
                                         ISBN: 83-7361-040-5
       ZAMÓW DRUKOWANY KATALOG           Tytu³ orygina³u: MySQL VQG
                                         Format: B5, stron: 336

              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Ksi¹¿ka „MySQL. Szybki start” to przystêpne wprowadzenie dla osób, które chc¹
                                         w krótkim czasie poznaæ MySQL — jeden z najpopularniejszych systemów
                                         bazodanowych. Do jego zalet nale¿¹: szerokie rozpowszechnienie, du¿a wydajno æ
         CENNIK I INFORMACJE             i prostota obs³ugi. Je li chcesz stworzyæ swoj¹ pierwsz¹ bazê danych, MySQL idealnie
                                         siê do tego nadaje. Chocia¿ jest to produkt darmowy, pod wieloma wzglêdami nie
                   ZAMÓW INFORMACJE      ustêpuje znacznie dro¿szym aplikacjom komercyjnym.
                     O NOWO CIACH        „MySQL. Szybki start” to same konkrety; nie znajdziesz tu zbêdnych teoretycznych
                                         rozwa¿añ i dygresji. Ka¿dy podrozdzia³ przedstawia sposób, w jaki nale¿y rozwi¹zaæ
                       ZAMÓW CENNIK      dany problem programistyczny. Jednocze nie ksi¹¿ka ta stanowi kompletny przewodnik
                                         po wszystkich wa¿nych dla programisty zagadnieniach. Nie zabrak³o tu równie¿
                                         informacji na temat korzystania z MySQL z poziomu jêzyków programowania takich jak
                 CZYTELNIA               Perl, Java, czy PHP.
                                         Dziêki tej ksi¹¿ce:
          FRAGMENTY KSI¥¯EK ONLINE
                                            • Zainstalujesz MySQL w ró¿nych systemach operacyjnych
                                            • Uruchomisz serwer MySQL i dowiesz siê, z jakich programów klienckich
                                              korzystaæ
                                            • Zaprojektujesz wydajn¹ bazê danych
                                            • Poznasz jêzyk SQL
                                            • Zaznajomisz siê ze specyficznymi funkcjami dostêpnymi w MySQL
                                            • Nauczysz siê pisaæ aplikacje Javy, Perla i PHP wykorzystuj¹ce MySQL
                                            • Poznasz podstawy administrowania serwerem bazodanowym



Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści



                                                                              Spis treści

              Wprowadzenie                                                                                          9
Rozdział 1.   Instalowanie MySQL                                                                            17
              Instalacja MySQL w systemie Windows .............................................. 19
              Instalowanie MySQL w systemie Linux ............................................... 21
              Opcje konfiguracyjne.......................................................................... 25
              Uaktualnianie MySQL ........................................................................ 26
              Poprawki do MySQL .......................................................................... 29
Rozdział 2.   Uruchamianie MySQL                                                                              31
              Rozpoczęcie pracy MySQL ................................................................. 32
              Zatrzymywanie MySQL...................................................................... 37
              Wykorzystanie mysqladmin................................................................. 40




                                                                                                                          Spis treści
              Klient MySQL.................................................................................... 43
              U ytkownicy i ich prawa..................................................................... 46
Rozdział 3.   Projektowanie bazy danych                                                                             51
              Normalizacja...................................................................................... 52
              Klucze ............................................................................................... 53
              Relacje............................................................................................... 55
              Pierwsza postać normalna ................................................................... 57
              Druga postać normalna........................................................................ 58
              Trzecia postać normalna...................................................................... 60
              Typy danych MySQL.......................................................................... 62
              Wartości domyślne i NULL................................................................. 66
              Indeksy .............................................................................................. 68
              Końcowy etap projektu ....................................................................... 70
Rozdział 4.   SQL                                                                                             73
              Tworzenie baz danych i tabel .............................................................. 74
              Wprowadzanie danych ........................................................................ 78
              Pobieranie danych............................................................................... 81
              Wyra enia warunkowe........................................................................ 84
              U ycie LIKE i NOT LIKE .................................................................. 87

                                                                                                                     5
Spis treści

                            Złączenia ........................................................................................... 89
                            Sortowanie wyników zapytania ........................................................... 93
                            Ograniczanie liczby zwracanych wyników ........................................... 95
                            Uaktualnianie danych.......................................................................... 97
                            Usuwanie danych................................................................................ 98
                            Modyfikacja tabel............................................................................. 101
              Rozdział 5.   Funkcje MySQL                                                                                  105
                            Funkcje tekstowe.............................................................................. 106
                            Konkatenacja i aliasy........................................................................ 109
                            Funkcje numeryczne ......................................................................... 112
                            Funkcje przetwarzania daty i czasu.................................................... 115
                            Formatowanie daty i czasu ................................................................ 118
                            Funkcje szyfrowania ......................................................................... 120
                            Funkcje grupowania.......................................................................... 123
                            Pozostałe funkcje.............................................................................. 126
              Rozdział 6.   MySQL i PHP                                                                                     129
                            Łączenie z MySQL i wybieranie bazy danych..................................... 130
Spis treści




                            Proste zapytania................................................................................ 133
                            Przetwarzanie wyników zapytania ...................................................... 140
                            Korzystanie z mysql_insert_id()......................................................... 147
                            Obsługa błędów................................................................................ 154
                            Bezpieczeństwo................................................................................ 157
              Rozdział 7.   MySQL i Perl                                                                                    167
                            Instalacja Perla z obsługą MySQL w systemie operacyjnym Windows ... 168
                            Instalowanie obsługi MySQL w Perlu w systemie operacyjnym Unix ... 171
                            Testowanie Perla i MySQL................................................................ 174
                            Łączenie z MySQL ........................................................................... 177
                            Proste zapytania................................................................................ 180
                            Przetwarzanie wyników zapytania ..................................................... 183
                            Pozyskanie wartości InsertID............................................................. 186
                            Bezpieczeństwo................................................................................ 188
              Rozdział 8.   MySQL i Java                                                                                     193
                            Instalacja sterownika MySQL dla Javy .............................................. 194
                            Łączenie z bazą danych..................................................................... 197
                            Proste zapytania................................................................................ 202
                            Przetwarzanie wyników zapytania ..................................................... 206
                            Pliki własności ................................................................................. 211

              6
Spis treści

Rozdział 9.       Techniki programowania baz danych                                                       215
                  Zapisywanie i pobieranie danych binarnych........................................ 216
                  Tworzenie mechanizmów wyszukiwania............................................ 225
                  Tworzenie stron z wynikami zapytania............................................... 232
                  Zabezpieczanie bazy danych.............................................................. 242
Rozdział 10. Administrowanie MySQL                                                                         247
             Pliki danych MySQL ........................................................................ 248
             Sporządzanie kopii zapasowych baz danych ....................................... 252
             Korzystanie z plików wsadowych ...................................................... 255
             Importowanie danych........................................................................ 258
             Utrzymanie bazy danych ................................................................... 260
             Podnoszenie wydajności.................................................................... 263
             Dzienniki pracy MySQL ................................................................... 265
             Bezpieczeństwo................................................................................ 268
Rozdział 11. MySQL dla zaawansowanych                                                                       271
             Tabele InnoDB ................................................................................. 272
             Transakcje w MySQL ....................................................................... 277




                                                                                                                             Spis treści
             Blokowanie tabel.............................................................................. 280
             Przeszukiwanie typu full-text............................................................. 283
             Wyra enia regularne ......................................................................... 287
Dodatek A         Rozwiązywanie problemów                                                                             289
                  Instalacja.......................................................................................... 290
                  Uruchamianie MySQL ...................................................................... 291
                  Dostęp do MySQL............................................................................ 292
                  Problemy z mysql.sock ..................................................................... 294
                  Zmiana hasła u ytkownika root ......................................................... 296
                  Przestawienie licznika wartości typu AUTO_INCREMENT................ 298
                  Zapytania zwracające nieoczekiwane wyniki ...................................... 299
Dodatek B         Przegląd SQL i MySQL                                                                          301
                  Podstawy SQL.................................................................................. 302
                  Administracyjne polecenia SQL......................................................... 306
                  Prawa dostępu MySQL ..................................................................... 307
                  Typy danych MySQL........................................................................ 308
                  Funkcje MySQL ............................................................................... 310
                  Pozostałe informacje......................................................................... 313


                                                                                                                        7
Spis treści

              Dodatek C     Źródła informacji                                                                                     315
                            MySQL............................................................................................ 316
                            Aplikacje MySQL innych dostawców ................................................ 317
                            SQL................................................................................................. 318
                            Ogólne wiadomości o bazach danych................................................. 319
                            PHP ................................................................................................. 320
                            Perl.................................................................................................. 321
                            Java................................................................................................. 322
                            Bezpieczeństwo................................................................................ 323
                            Inne źródła informacji....................................................................... 324
                            Skorowidz                                                                                          325
Spis treści




              8
3
                      Projektowanie bazy danych
Projektowanie
  bazy danych
                    Projektowanie bazy danych
   W pracy z systemem zarządzania relacyjną
   bazą danych, takim jak MySQL, pierwszym
   etapem procesu tworzenia i wykorzystywania
   bazy polega na zdefiniowaniu jej struktury.
   Projektowanie bazy danych, inaczej
   modelowanie danych, ma zasadnicze
   znaczenie dla pomyślnego i długotrwałego
   zarządzania informacjami. Wykorzystanie
   procesu zwanego normalizacją umo liwia
   całkowite wyeliminowanie redundancji
   oraz innego typu problemów, które mogłyby




                                                     Projektowanie bazy danych
   naruszyć integralność danych.
   Omówione w niniejszym rozdziale techniki
   pomogą w zapewnieniu projektowanej bazie
   danych realności jej wykonania, wysokiej
   jakości i niezawodności. Zaprezentowany
   przykład — obsługa transakcji handlowych,
   w tym przechowywanie faktur i zapis wydatków
   — będzie wykorzystywany tak e w kolejnych
   rozdziałach niniejszej ksią ki, a przedstawione
   zasady normalizacji znajdują zastosowanie
   w ka dej nowo tworzonej bazie danych.




                                               51
Rozdział 3.

                                                                     Tabela 3.1. Bazując na zało onym sposobie
               Normalizacja                                          wykorzystywania bazy danych opracowano listę
               Zagadnieniem normalizacji jako pierwszy zajął         wszystkich niezbędnych informacji, które powinny
                                                                     być w niej przechowywane
               się — we wczesnych latach 70. — pracownik
               naukowy firmy IBM, E.F. Codd (opracował on            Baza danych finansów
               równie podstawy teorii relacyjnych baz danych).       Pozycja                    Przykład
               Relacyjna baza danych jest jedynie zbiorem danych,    Numer faktury            1
               uło onych w określony sposób. Dr Codd opracował
                                                                     Data wystawienia faktury 2002-04-20
               natomiast szereg zasad, zwanych postaciami
                                                                     Wartość faktury          30,28 USD
               normalnymi, które ułatwiają zdefiniowanie
                                                                     Opis faktury             Projekt HTML
               wspomnianego uło enia. W niniejszym rozdziale
                                                                     Termin płatności         2002-05-11
               przedstawiono charakterystykę trzech postaci
                                                                     Informacje o kliencie    Acme Industries,
               normalnych, które zazwyczaj są wystarczające                                   100 Main Street, Anytown,
               dla większości projektów baz danych.                                           NY 11111, (800) 555-1234
               Przed rozpoczęciem normalizowania bazy                Wydatek                  100 USD
               danych konieczne jest określenie przeznaczenia        Kategoria wydatku i opis Opłaty za utrzymywanie
                                                                                              serwisu internetowego
               budowanej aplikacji. Oznacza to, e niezbędne                                   www.DMCinsights.com
               jest wnikliwe przeanalizowanie tego zagadnienia
                                                                     Data zapłaty             2002-01-26
               z klientem lub we własnym zakresie, gdy
               sposób operowania danymi determinuje proces
               ich modelowania. Dlatego podczas lektury
Normalizacja




               niniejszego rozdziału Czytelnik powinien zamiast
               oprogramowania MySQL korzystać z kartki
               i ołówka (dla jasności, projektowanie bazy danych
               jest niezbędnym etapem tworzenia wszystkich
               relacyjnych baz danych, nie tylko w MySQL).
               Publikacje związane z bazami danych opierają się
               zazwyczaj na przykładach zbiorów muzycznych
               czy ksią kowych (drugi ich rodzaj był
               wykorzystywany przez Autora w innej ksią ce:          Wskazówki
               Po prostu PHP. Techniki zaawansowane, Helion
                                                                        Jednym z najlepszych sposobów
               2002 (PHP Advanced for the World Wide Web:
                                                                        określenia, jakiego typu informacje
               Visual QuickPro Guide)). Podczas lektury niniejszej
                                                                        powinny być przechowywane w bazie
               ksią ki Czytelnik zapozna się ze sposobem
                                                                        danych, jest ustalenie rodzajów
               tworzenia bazy danych typu finansowo-księgowego.
                                                                        zadawanych pytań i informacji, jakie
               Zasadniczym jej zadaniem będzie rejestrowanie
                                                                        powinny się znaleźć w odpowiedziach.
               faktur i wydatków, choć mo e być w prosty
               sposób zmodyfikowana, tak by przechowywać                Choć niniejszy rozdział prezentuje
               informacje innego rodzaju, np. dane o czasie             sposób manualnego projektowania bazy
               pracy nad projektem itp. W tabeli 3.1 zestawiono         danych, nale y pamiętać, e istnieją
               wstępną listę danych, jakie powinny być                  gotowe aplikacje, przeznaczone do tego
               gromadzone w omawianej, przykładowej                     celu. Ich lista znajduje się w dodatku C
               bazie danych.                                            Źródła informacji.




               52
Projektowanie bazy danych


Klucze
Klucze stanowią tę część danych, która pomaga
w identyfikowaniu danego wiersza informacji
w tabeli (inną nazwą wiersza jest rekord).
Istnieją dwa rodzaje kluczy, którymi będziemy
operować: klucze główne i klucze obce. Klucz
główny jest unikatowym identyfikatorem i musi
spełniać określone reguły. Musi:
u zawsze posiadać jakąś wartość (nie mo e
  mieć wartości 07..);
u przechowywać stałą wartość (nigdy
   niezmienianą);
u posiadać niepowtarzalną wartość w ka dym
   wierszu tabeli.
Najlepszym przykładem klucza głównego,
który mo na spotkać w yciu codziennym, jest
numer PESEL. Idea polega na tym, e ka dy
obywatel otrzymuje niepowtarzalny numer
PESEL, który nie podlega adnym zmianom.
PESEL jest sztuczną konstrukcją, słu ącą




                                                      Klucze
do identyfikowania osób. Łatwo się mo na
przekonać, e takie sztuczne narzucenie
klucza głównego ka dej tabeli stanowi
najefektywniejszy sposób jej projektowania.
Drugim rodzajem kluczy są klucze obce.
Stanowią one reprezentację kluczy Tabeli A
w Tabeli B. Załó my, e dysponujemy bazą
danych filmów, gdzie istnieją tabele film
i re yser. Klucz publiczny tabeli re yser
mógłby wówczas być odwzorowany w tabeli
film jako klucz obcy. Idea ta stanie się łatwiejsza
do zrozumienia po przeanalizowaniu zało eń
procesu normalizacji.
Aktualnie, oficjalnie MySQL obsługuje klucze
obce tylko w przypadku wykorzystania tabel
typu InnoDB (więcej informacji na temat typów
tabel zawarto w rozdziale 11. MySQL dla
zaawansowanych), w przeciwnym razie je
ignoruje. Dlatego te występowanie kluczy
obcych w MySQL ma raczej charakter
teoretyczny a nie u ytkowy, co powinno ulec
zmianie w kolejnych wersjach oprogramowania.



                                                53
Rozdział 3.

         W przedstawionej postaci baza danych finanse
         stanowi pojedynczą tabelę. Rozpoczęcie
         procesu normalizacji wymaga ustalenia
         przynajmniej jednego klucza głównego
         (klucze obce będą określane w kolejnych etapach).

         Aby określić klucz główny:
         1. Wyszukaj dowolne pole, które spełnia
              zało enia klucza głównego.
              W przedstawionym przykładzie jedynymi
              danymi, które zawsze są niepowtarzalne,
              posiadają wartość i ich wartość nie mo e
              być zmieniana, są numery faktur. Pole to
              zostanie oznaczone jako klucz główny            Rysunek 3.1. Pierwszy krok w procesie normalizacji
                                                              bazy danych polega na określeniu klucza głównego
              (ang. primary key), do czego posłu y
                                                              — numeru faktury
              symbol (PK) (rysunek 3.1).
         2. Jeśli nie istnieje naturalny klucz główny,
              nale y go wymyślić.
              Czasami jest konieczne utworzenie klucza
              głównego, gdy nie istnieje wśród danych
              pole nadające się do tego celu. Nawet
Klucze




              w przypadku stosowania identyfikatorów
              PESEL czy oznaczania ksią ek numerem
              ISBN (ang. International Standardized
              Book Number — standardowy
              znormalizowany numer ksią ki),
              które spełniają podane kryteria, dobrym
              rozwiązaniem jest utworzenie dodatkowego
              pola, przeznaczonego jednoznacznie
              na klucz główny.

         Wskazówki
              MySQL dopuszcza u ycie tylko jednego
              klucza głównego w tabeli, choć mo na go
              oprzeć na wielu kolumnach (zagadnienie to
              wykracza tematycznie poza zakres
              niniejszej ksią ki).
              MySQL osiąga największą wydajność
              w przypadku, gdy kluczem głównym jest
              wartość ze zbioru liczb całkowitych. Jest to
              kolejny powód, dla którego identyfikatory
              ISBN, zawierające znaki myślnika, niezbyt
              dobrze nadają się do pełnienia funkcji klucza
              głównego.


         54
Projektowanie bazy danych


Relacje
Mówiąc o relacjach w bazie danych, mamy
na myśli zale ności danych jednej tabeli
od danych drugiej. Relacje pomiędzy dwoma
tabelami mogą mieć postać jeden-do-jeden,
jeden-do-wielu lub wiele-do-wielu.
Zale ność typu jeden-do-jeden występuje
wtedy, gdy jedna i tylko jedna pozycja w tabeli
A odnosi się do jednej i tylko jednej pozycji
w tabeli B (np. ka dy obywatel Polski posiada
jeden identyfikator PESEL, a ka dy identyfikator
PESEL jest przypisany tylko do jednego
obywatela. aden obywatel nie mo e posiadać
dwóch numerów PESEL i aden numer PESEL
nie mo e być przydzielony dwóm obywatelom).
Relacja jeden-do-wielu ma miejsce wówczas,
gdy jedna i tylko jedna pozycja w tabeli A
dotyczy wielu pozycji w tabeli B. Określenie
kobieta lub mę czyzna odnosi się do wielu
osób, ale ka da z osób mo e być tylko
mę czyzną lub kobietą. Relacja jeden-do-wielu




                                                   Relacje
jest najczęściej spotykaną relacją pomiędzy
tabelami bazy danych.
W końcu, zale ność wiele-do-wielu występuje
wtedy, gdy wiele pozycji w tabeli A mo e
odnosić się do wielu pozycji w tabeli B.
Przykładowo, album płytowy mo e zawierać
piosenki wykonywane przez wielu artystów,
a artyści mogą być autorami wielu albumów
płytowych. Projektując bazę danych nale y
unikać relacji wiele-do-wielu, gdy są one
przyczyną powstawania redundancji danych
i problemów związanych z ich integralnością.
Współzale ność relacji i kluczy polega na tym,
 e klucz w jednej tabeli odnosi się zazwyczaj
do pola danych w innej, o czym ju wspominano.
Zrozumienie zasad posługiwania się unikatowymi
identyfikatorami oraz relacjami pozwala na
przystąpienie do normalizowania bazy danych.




                                             55
Rozdział 3.

          Wskazówki
               Modelowanie bazy danych opiera się
               na pewnej konwencji reprezentowania jej
               struktury. Zostanie ona zaprezentowana
               za pomocą szeregu rysunków,
               zaprezentowanych w niniejszym rozdziale.
               Symbole wspomnianych rodzajów relacji
               pokazano na rysunku 3.2.
               Wynikiem procesu projektowania bazy
                                                          Rysunek 3.2. Prezentowane oznaczenia
               danych jest diagram element-związek
                                                          reprezentują relacje pomiędzy tabelami
               (ang. entity reletionship diagram),        w procesie modelowania bazy danych
               uwzględniający reprezentację
               obramowanych tabel i symboli
               przedstawionych na rysunku 3.2.
               Słowo „relacyjny” w skrócie RDBMS
               pochodzi od tabel, które z technicznego
               punktu widzenia nazywają się relacjami.
Relacje




          56
Projektowanie bazy danych


                                                  Pierwsza postać normalna
                                                  Pierwsza postać normalna bazy danych zakłada,
                                                   e ka da kolumna mo e zawierać tylko jedną
                                                  wartość (kolumna jest wtedy czasami nazywana
                                                  atomową). Tabela, która posiada jedno pole
                                                  przeznaczone do przechowywania danych
                                                  adresowych nie spełnia tego kryterium, gdy
                                                  przechowuje w pojedynczym polu pięć ró nych
                                                  danych — ulicę, miasto, województwo, kod
                                                  pocztowy i czasami kraj. Podobnie, niezgodne
                                                  z zało eniem byłoby przechowywanie w jednym
                                                  polu imienia i nazwiska osoby (choć niektórzy
                                                  mogliby twierdzić, e imię i nazwisko stanowią
                                                  całość, będąc elementem niepodzielnym).
                                                  W ramach prowadzonego procesu normalizacji
                                                  zostanie dokonane sprawdzenie istniejącej
                                                  struktury pod kątem zgodności z pierwszą




                                                                                                      Pierwsza postać normalna
                                                  postacią normalną.

                                                  Aby uczynić bazę danych zgodną
Rysunek 3.3. Zgodnie z zało eniami pierwszej      z pierwszą postacią normalną:
postaci normalnej dwie kolumny, które
nie spełniały jej kryteriów, zostały podzielone   1. Wyszukuj pola, które zawierają więcej ni
na większą liczbę pól                                jedną informację.
                                                     Analizując tabelę 3.1 mo na zauwa yć,
                                                      e z kryteriami pierwszej postaci normalnej
                                                     nie są zgodne dwie kolumny: Informacje
                                                     o kliencie oraz Kategoria wydatku i opis.
                                                     Pola dotyczące dat zawierają, co prawda,
                                                     informacje o dniu, miesiącu i roku, jednak
                                                     ich dalsze rozdzielanie nie byłoby
                                                     uzasadnione.
                                                  2. Dokonaj podziału pól wybranych
                                                     w pierwszym kroku (rysunek 3.3).
                                                     Rozwiązanie problemu polega na wydzieleniu
                                                     z Informacji o kliencie pól: Nazwisko klienta,
                                                     Ulica klienta, Stan klienta, Kod pocztowy
                                                     klienta i Telefon klienta, a następnie
                                                     z Kategorii wydatków i opisu pól:
                                                     Kategoria wydatku, Opis wydatku.
                                                  3. Upewnij się, e wszystkie utworzone
                                                     w kroku 2. pola spełniają kryteria
                                                     pierwszej postaci normalnej.



                                                                                                57
Rozdział 3.


                        Druga postać normalna
                        Baza danych ma drugą postać normalną, je eli spełnia
                        zało enia pierwszej postaci normalnej (normalizacja
                        przebiega stopniowo), a ka da kolumna w tabeli, która
                        nie jest kluczem, pozostaje w relacji tylko z kluczem
                        głównym. Najbardziej oczywisty wniosek, jaki płynie
                        z powy szego zało enia jest taki, e baza danych
                        nie ma drugiej postaci normalnej, je eli kilka rekordów
                        tabeli posiada dokładnie taką samą wartość w danej             Rysunek 3.4. Normalizacja bazy
                                                                                       danych wymaga przeniesienia informacji
                        kolumnie. Przykładowo, zamieszczenie listy
                                                                                       nadmiarowych — takich jak dane
                        producentów muzycznych wraz z nazwami ich                      klienta i informacje o wydatkach
                        albumów, spowodowałoby występowanie tych samych                — do oddzielnych tabel
                        wartości w ramach jednej tabeli albumów.
                        Przyglądając się bazie danych finansów (rysunek 3.3)
                        mo na zauwa yć szereg niezgodności. Na początek,
                        informacje na temat klienta nie zawsze będą się odnosiły
                        tylko do jednej faktury (klient mo e dokonać kilku
                        transakcji). Po drugie, informacje o wydatkach nie
Druga postać normalna




                        wią ą się z fakturami.
                        Przekształcenie bazy danych do drugiej postaci
                        normalnej wymaga przeniesienia wymienionych kolumn
                        do oddzielnych tabel, gdzie ka da z wartości będzie
                        zamieszczona tylko raz. W rzeczywistości normalizacja
                        mo e być rozumiana jako proces tworzenia coraz
                        większej liczby tabel, a do momentu usunięcia
                        wszystkich mo liwych redundancji danych.

                        Aby uczynić bazę danych
                        zgodną z drugą postacią normalną:
                        1. Wyszukaj wszystkie pola, które nie zale ą
                             bezpośrednio od klucza głównego.
                             Jak ju wspomniano, informacjami, które
                             nie dotyczą bezpośrednio konkretnych faktur,
                             są informacje o kliencie oraz dane na temat wydatków.
                        2. Utwórz nowe tabele (rysunek 3.4).
                             Najbardziej racjonalnym sposobem modyfikacji
                             istniejącej struktury będzie utworzenie oddzielnych
                             tabel Klienci, Faktury i Wydatki. Zgodnie z przyjętymi
                             w ksią ce regułami wizualizacji, reprezentacja bazy
                             danych składa się z obramowanych tabel. W ka dym
                             bloku tabeli znajduje się nagłówek, który zawiera nazwę
                             tabeli oraz cześć składającą się z nazw wszystkich
                             kolumn.


                        58
Projektowanie bazy danych

                                              3. Przydziel lub utwórz nowe klucze główne
                                                (rysunek 3.5).
                                                Do zapewnienia, e wszystkie nowo utworzone
                                                tabele posiadają klucz główny, słu y technika
                                                opisana w wcześniejszej części tego rozdziału.
                                                Z uwagi na fakt, e zarówno tabela Klienci, jak
                                                i Wydatki nie posiada właściwego, unikatowego
                                                identyfikatora, konieczne było sztuczne jego
                                                utworzenie — Klient ID oraz Wydatek ID. Nazwa
                                                klienta byłaby być mo e niepowtarzalną wartością,
Rysunek 3.5. Ka da tabela bazy danych
                                                a tym samym mogłaby być kluczem głównym,
powinna posiadać własny klucz główny,
niezale nie od tego, czy jest to pole           niemniej korzystniej jest zawsze posłu yć się w tym
nadmiarowe — jak Klient ID — czy pole           celu wartościami ze zbioru liczb całkowitych.
znaczące — jak Numer faktury                  4. Powtórz kroki 1 – 3.
                                                Z uwagi na fakt, e zostały utworzone nowe tabele
                                                z nowymi kluczami, nale y się upewnić, e w efekcie
                                                wykonania tej operacji powstała baza zgodna
                                                z drugą postacią normalną. W prezentowanym




                                                                                                       Druga postać normalna
                                                przykładzie (rysunek 3.5) pozostaje jeden istotny
                                                problem — pole Kategoria wydatku mo e się
                                                odnosić do wielu rodzajów wydatków. Dlatego
                                                te zostanie utworzona nowa tabela o nazwie
                                                Kategorie wydatków (rysunek 3.6).
Rysunek 3.6. Wchodzące w skład tabeli         5. Utwórz niezbędne klucze obce, które określą
Wydatki pole Kategoria wydatku powinno          właściwe relacje (rysunek 3.7).
zostać wydzielone w postaci odrębnej tabeli
                                                Ostatnim krokiem na drodze do uzyskania zgodności
                                                z drugą postacią normalną jest uwzględnienie
                                                kluczy obcych i relacji, które będą określały sposób
                                                wzajemnego powiązania danych i tabel. Nale y
                                                pamiętać, e klucz główny jednej tabeli stanowi
                                                z reguły klucz obcy innej tabeli. Je eli oka e się,
                                                 e klucz główny danej tabeli nie funkcjonuje jako
                                                klucz obcy w innej, prawdopodobnie coś zostało
                                                pominięte (choć nie zawsze jest to prawdą).

                                              Wskazówka
Rysunek 3.7. Nowym kluczom głównym              Innym sposobem sprawdzenia zgodności z drugą
zostały przypisane odpowiednie klucze           postacią normalną jest przeanalizowanie relacji
obce (FK — ang. foreign key) oraz
                                                pomiędzy tabelami. Najlepszym rozwiązaniem
określony został charakter relacji
(w obu przypadkach jeden-do-wielu)              jest utworzenie zale ności typu jeden-do-wielu.
                                                Tablice, w których występują relacje wiele-do-wielu
                                                prawdopodobnie wymagają przekształcenia.




                                                                                                 59
Rozdział 3.


                          Trzecia postać normalna
                          Baza danych ma trzecią postać normalną,
                          je eli jest zgodna z drugą postacią normalną
                          i je eli ka da kolumna, która nie jest kluczem,
                          pozostaje niezale na od innych kolumn
                          niebędących kluczami. Innymi słowy,
                          wszystkie pola tabeli, które nie są kluczami,
                          powinny być wzajemnie niezale ne.
                          W przypadku poprawnego zrealizowania dwóch
                          pierwszych kroków normalizacyjnych mo e się         Rysunek 3.8. Modyfikowanie struktury bazy
                          okazać, e wprowadzanie zmian na tym etapie          danych mo e wprowadzać nieco zmieszania
                          nie będzie konieczne. Z drugiej strony, je eli      do projektu, który przestaje spełniać kryteria
                          w ramach wspomnianych działań zostało               normalizacji ze względu na pola: osoba
                          dokonanych wiele zmian, krok ten dostarcza          kontaktowa i adres e-mail
                          mo liwości ostatecznego sprawdzenia
                          projektu. Załó my przykładowo, e do ka dej
                          faktury przypisywane jest nazwisko osoby
Trzecia postać normalna




                          odpowiedzialnej za kontakt oraz adres jej
                          poczty elektronicznej (rysunek 3.8). Rzecz
                          w tym, e wspomniane informacje odnoszą się
                          do klienta, a nie do faktury, tym samym baza
                          danych nie spełnia kryteriów trzeciej postaci
                          normalnej. Prawidłowe rozwiązanie polega na
                          dodaniu tych pól do tabeli Klienci (rysunek 3.9).



                                                                              Rysunek 3.9. Prawidłowe umiejscowienie
                                                                              danych z pól: osoba kontaktowa i adres e-mail
                                                                              wymaga przeniesienia ich do tabeli Klienci




                          60
Projektowanie bazy danych

                                               Wskazówki
                                                  Po zakończeniu szkicowania bazy danych
                                                  na kartce dobrym pomysłem jest
                                                  przeniesienie go do arkusza kalkulacyjnego,
                                                  który odwzoruje powstały projekt (mo na
                                                  te posłu yć się specjalnie utworzonym
                                                  do tego celu narzędziem). Taki dokument
                                                  mógłby słu yć jako dobre źródło informacji
                                                  dla projektantów witryny internetowej,
                                                  a tak e jako dokument przekazywany
                                                  klientowi po zakończeniu projektu.
                                                  Normalizacja stanie się jeszcze czynnością
                                                  o jeszcze większym znaczeniu z chwilą,
                                                  gdy MySQL zacznie wymuszać stosowanie
                                                  kluczy obcych (w wersjach 4.1 i późniejszych).




                              Zaniechanie normalizacji                                               Trzecia postać normalna
Mimo i zapewnienie, e baza danych spełnia kryteria trzeciej postaci normalnej zapewnia
jej stabilność i trwałość, nie istnieje konieczność normalizowania ka dej bazy danych, z jaką
będziemy pracować. Jednak zanim podwa ymy słuszność tej metody, nale y pamiętać,
  e takie działanie mo e mieć powa ne konsekwencje w dłu szej perspektywie.
Dwoma zasadniczymi przyczynami zaniechania normalizacji są wygoda i wydajność.
Mniejszą liczbą tabel łatwiej się manipuluje i łatwiej jest te wtedy zrozumieć strukturę bazy
danych. Co więcej, ze względu na ich zło oną naturę, znormalizowane bazy danych stają się
zazwyczaj wolniejsze w trakcie uaktualniania, pobierania i modyfikowania danych. Normalizacja
oznacza wybranie większego poziomu integralności danych i skalowalności kosztem prostoty
i szybkości działania. Z drugiej strony, istnieje wiele sposobów poprawienia wydajności baz
danych, podczas gdy metod przeciwdziałania utracie danych, wynikającej z zastosowania
wadliwego projektu, jest niewiele.



                                                                                                61
Rozdział 3.


                    Typy danych MySQL
                    Po zdefiniowaniu wszystkich wymaganych tabel
                    i kolumn konieczne jest określenie typu danych
                    przechowywanych w ka dym z pól. Podczas tworzenia
                    bazy danych (co zostanie przedstawione w następnym
                    rozdziale) będzie wymagane określenie rodzaju
                    informacji, które będą przechowywane w ka dym
                    z pól. Niemal ka da baza danych opiera się na trzech
                    ich kategoriach:
                    u tekst;
                    u liczby;
                    u data i czas.
                    W ka dej z wymienionych grup wyró nia się
                    kilka odmian typów danych, z których pewne są
                    charakterystyczne jedynie dla MySQL. Właściwy
                    wybór typu dla danej kolumny wpływa nie tylko
                    na rodzaj informacji, jakie mogą być w niej gromadzone
Typy danych MySQL




                    oraz na sposób ich przechowywania, ale równie
                    na całkowitą wydajność bazy danych. Większość
                    dostępnych w MySQL typów danych została zestawiona
                    w tabeli 3.2. Zamieszczono tam tak e informacje
                    o rozmiarze oraz krótki opis ka dego z nich.
                    Wiele typów pozwala na określenie opcjonalnego
                    atrybutu & WIQ è (nawiasy kwadratowe — =?
                    — oznaczają, e pomiędzy nimi mo na wstawić
                    parametr opcjonalny, tymczasem nawiasy okrągłe
                    odpowiadają argumentom obowiązkowym). Typy
                    liczbowe mogą być definiowane jako 705+)0'& — co
                    ogranicza wartości kolumny do liczb dodatnich i zera
                    — lub <'41(+.., co oznacza, e wolne miejsce zostanie
                    wypełnione zerami (typy <'41(+.. są jednocześnie
                    typami 705+)0'&). Z kolei z poszczególnymi typami
                    dat są związane ró ne sposoby ich wykorzystania.
                    Opis zagadnienia znajduje się w podręczniku
                    dostępnym pod adresem www.mysql.com/doc/D/A/
                    DATETIME.html. Zazwyczaj jednak są stosowane
                    podstawowe pola typu 6+/' i &#6', nie ma więc
                    potrzeby analizowania ich zawiłości. Omówienia
                    wymagają tak e dwa rozszerzenia typu 6':6 — '07/
                    i 5'6. Oba pozwalają na zdefiniowanie w trakcie
                    tworzenia tabeli serii akceptowalnych wartości.




                    62
Projektowanie bazy danych

                                                     Pole typu '07/ mo e zawierać tylko jedną
                                                     z kilku tysięcy mo liwych wartości, podczas
                                                     gdy pole 5'6 mo e się składać z kilku wartości,
                                                     przy czym ich liczba nie mo e przekraczać 64.
                                                     Z typami '07/ i 5'6 wią ą się dwa problemy
                                                     — nie są one obsługiwane przez inne bazy
                                                     danych, a ich u ycie jest niezgodne z zasadami
                                                     normalizacji.


Tabela 3.2. Większość typów kolumn dostępnych w bazach danych MySQL
Typy danych MySQL
Typ                        Rozmiar                   Opis
%*#4=& WIQ è?              Liczba bajtów             Pole o stałej długości; długość: 0 – 255 znaków.
8#4%*#4
& WIQ è           Długość ciągu + 1 bajt    Pole o stałej długości; długość: 0 – 255 znaków.
6+0;6':6                   Długość ciągu + 1 bajt    Ciąg tekstowy o maksymalnej długości 255 znaków.
6':6                       Długość ciągu + 2 bajty   Ciąg tekstowy o maksymalnej długości 65.536 znaków.
/'+7/6':6                 Długość ciągu + 3 bajty   Ciąg tekstowy o maksymalnej długości 16.777.215 znaków.
.10)6':6                   Długość ciągu + 4 bajty   Ciąg tekstowy o maksymalnej długości 4.294.967.295 znaków.




                                                                                                                     Typy danych MySQL
6+0;+06= WIQ è?           1 bajt                    Liczba z zakresu od –128 do 128 lub 0 do 255 je eli
                                                     jest typu 705+)0'.
5/#..+06= WIQ è?          2 bajty                   Liczba z zakresu od –32768 do 32768 lub 0 do 65535
                                                     je eli jest typu 705+)0'.
/'+7/+06= WIQ è?         3 bajty                   Liczba z zakresu od –8.388.608 do 8.388.607
                                                     lub 0 do 16.777.215 je eli jest typu 705+)0'.
+06= WIQ è?               4 bajty                   Liczba z zakresu od –2.147.483.648 do 2.147.483.647
                                                     lub 0 do 4.294.967.295 je eli jest typu 705+)0'.
$+)+06= WIQ è?            8 bajtów                  Liczba z zakresu od –9.223.372.036.854.775.808
                                                     do 9.223.372.036.854.775.807 lub 0
                                                     do 18.446.744.073.709.551.615 je eli jest typu 705+)0'.
(.1#6                      4 bajty                   Mała wartość zmiennoprzecinkowa.
17$.'= WIQ è2Q[ELG?    8 bajtów                  Du a wartość zmiennoprzecinkowa.
'%+/#.= WIQ è2Q[ELG?   Długość + 1               Wartość typu 17$.' zapisana jako ciąg tekstowy, dla
                           lub Długość + 2 bajty     którego mo liwe jest ustalenie liczby pozycji po przecinku.
#6'                       3 bajty                   Data w formacie: RRRR-MM-DD.
#6'6+/'                   8 bajtów                  Data i czas w formacie: RRRR-MM-DD GG:MM:SS.
6+/'56#/2                  4 bajty                   Znacznik czasowy w formacie: GG:MM:SS.
6+/'                       3 bajty                   Znacznik czasowy w formacie GG:MM:SS.
'07/                       1 lub 2 bajty             Wyliczenie, które pozwala na to, by ka da kolumna
                                                     posiadała jedną z kilku mo liwych wartości.
5'6                        1,2,3,4 lub 8 bajtów      Typ podobny do '07/ z tą ró nicą, e mo e posiadać
                                                     więcej ni jedną dopuszczalną wartość.




                                                                                                                63
Rozdział 3.

                    Aby wybrać typ danych:
                    1. Określ czy kolumna będzie przechowywała dane
                         tekstowe, liczbowe czy te daty.                              CHAR a VARCHAR
                         Zazwyczaj jest to prosty i oczywisty etap.                Co do przewagi któregokolwiek
                         Do przechowywania wartości liczbowych, takich             z tych dwóch podobnych
                         jak kody pocztowe czy sumy pienię ne, które będą          do siebie typów wcią trwają
                         przechowywane wraz z dodatkowymi znakami                  dyskusje. Oba przechowują
                         (jak znak myślnika czy oznaczenie waluty), u ywa się      ciągi tekstowe i mogą być
                         pól tekstowych, choć zapisanie ich jako wartości          definiowane z podaniem
                                                                                   maksymalnej jego długości.
                         liczbowych daje lepsze rezultaty. Problem formatowania
                                                                                   Podstawowa ró nica polega
                         mo e być rozwiązywany w innymi miejscu.                   na tym, e jakiekolwiek dane
                    2. Wybierz dla danej kolumny odpowiedni typ z danej            zapisane jako %*#4 zawsze
                         kategorii.                                                będą zapisywane jako ciąg
                                                                                   tekstowy o długości określonej
                         Mając na uwadze wysoką wydajność bazy danych,             dla danej kolumny (wypełnienie
                         warto pamiętać, e:                                        znakami spacji). Z kolei
                                                                                   długość ciągów tekstowych
                         s   pola o stałej długości (jak %*#4) są zazwyczaj        typu 8#4%*#4 jest równa
                             szybciej przetwarzane ni pola o zmiennej długości     długości przechowywanego
                             (jak 8#4%*#4), choć z drugiej strony zajmują więcej
Typy danych MySQL




                                                                                   ciągu danych.
                             przestrzeni dyskowej. Więcej informacji na ten        Wynika z tego, e:
                             temat zamieszczono we wskazówce;
                                                                                     kolumny 8#4%*#4 zajmują
                         s   rozmiar ka dego z pól powinien być ograniczony          mniej miejsca na dysku;
                             do najmniejszej mo liwej wartości, którą mo na          kolumny %*#4 są
                             wyznaczyć określając największą mo liwą wartość         przetwarzane szybciej
                             wprowadzaną do danego pola. Przykładowo, je eli         ni 8#4%*#4, o ile nie są
                             największa wartość pola Klient ID będzie rzędu          stosowane typy tabel
                             setek, to dla danej kolumny powinno się wybrać          InnoDB (więcej informacji
                             trzycyfrowy typ 5/#..+06 bez znaku (705+)0')           na ten temat zamieszczono
                             — pozwoli on na wprowadzenie wartości od 0 do 999.      w rozdziale 11. MySQL
                                                                                     dla zaawansowanych).
                             Nale y pamiętać, e wprowadzenie pięcioznakowego       Trzeba przyznać, e
                             ciągu tekstowego do pola typu %*#4
 spowoduje       w większości przypadków
                             obcięcie trzech ostatnich znaków. Ta prawidłowość     ró nica w wielkości
                             znajduje zastosowanie we wszystkich typach            zajmowanego miejsca
                             o określonej długości (%*#4, 8#4%*#4, +06 itp.).      na dysku oraz w szybkości
                                                                                   pomiędzy oboma typami
                    3. Ustal maksymalną długość kolumn tekstowych                  jest niezauwa alna, przez co
                         lub liczbowych oraz dołącz, jeśli to konieczne,           rozwa anie tego problemu nie
                         inne atrybuty (jak np. 705+)0') (tabela 3.3).            ma szczególnego znaczenia.
                         Zamiast rozpisywania się o sposobach i przyczynach        Istnieje jeszcze jedna, mniej
                         takiego, a nie innego zdefiniowania wszystkich 21         istotna ró nica pomiędzy
                         przykładowych kolumn, wszystkie ich własności             omawianymi typami danych
                                                                                   — MySQL usuwa nadmiarowe
                         zestawiono w tabeli 3.3. Niektórzy programiści
                                                                                   znaki spacji z kolumn %*#4
                         mogą mieć odmienne propozycje. Najistotniejsze            podczas pobierania danych
                         jest jednak, aby dostosować ka dy typ do rozmiarów        a z kolumn 8#4%*#4 podczas
                         przechowywanych informacji, zamiast korzystać zawsze      ich wstawiania.
                         z podstawowych (nieefektywnych) typów 6':6 i +06.

                    64
Projektowanie bazy danych

                                                        Wskazówki
                                                            Wiele z nazw typów posiada synonimy,
                                                            np. +06 — +06')'4, '% — '%+/#. itd.
                                                            Pole typu 6+/'56#/2 jest uaktualniane
                                                            automatycznie podczas wykonywania
                                                            polecenia +05'46 czy 72#6', nawet je eli
                                                            dla danego pola nie określono adnej
                                                            wartości. W przypadku, gdy tabela zawiera
                                                            więcej pól typu 6+/'56#/2, podczas
                                                            realizacji polecenia +05'46 lub 72#6'
                                                            uaktualniane jest tylko pierwsze z nich.
                                                            Dostępny jest równie typ $.1$, będący
                                                            odmianą typu 6':6, który pozwala na
                                                            przechowywanie w tabeli plików binarnych.
                                                            Przykład u ycia zostanie zaprezentowany
                                                            w rozdziale 9. Techniki programowania
                                                            baz danych.
Tabela 3.3. Dobór optymalnego typu danych




                                                                                                         Typy danych MySQL
dla ka dego z pól jest często zaniedbywaną czynnością
Baza danych finansów
Nazwa kolumny               Tabela                Typ kolumny
Numer faktury               Faktury               5/#..+06
 705+)0'
Klient ID                   Faktury               5/#..+06
 705+)0'
Data wystawienia faktury    Faktury               FCVG
Wartość faktury             Faktury               FGEKOCN
 WPUKIPGF
Opis faktury                Faktury               VKP[VGZV
Klient ID                   Klienci               UOCNNKPV
 WPUKIPGF
Nazwa klienta               Klienci               XCTEJCT

Ulica klienta               Klienci               XCTEJCT

Miasto klienta              Klienci               XCTEJCT

Stan klienta                Klienci               %*#4

Kod pocztowy klienta        Klienci               OGFKWOKPV
 WPUKIPGF
Telefon klienta             Klienci               XCTEJCT

Osoba kontaktowa            Klienci               XCTEJCT

Adres e-mail kontaktowy     Klienci               XCTEJCT

Wydatek ID                  Wydatki               UOCNNKPV
 WPUKIPGF
Kategoria wydatku ID        Wydatki               VKP[KPV
 WPUKIPGF
Wartość wydatku             Wydatki               FGEKOCN
 WPUKIPGF
Opis wydatku                Wydatki               VKP[VGZV
Data zapłaty                Wydatki               FCVG
Kategoria wydatku ID        Kategorie wydatków    VKP[KPV
 WPUKIPGF
Kategoria wydatku           Kategorie wydatków    XCTEJCT




                                                                                                    65
Rozdział 3.


                           Wartości domyślne i NULL
                           Zgodnie z przedstawionymi wcześniej informacjami, definiując typy
                           danych jest mo liwe dołączanie atrybutów, takich jak 705+)0' czy
                           '41(+... Istnieją jeszcze dwie wartości, z których jedna informuje,
                           czy w kolumnie dopuszcza się wartości 07.., a druga wskazuje
                           domyślną wartość danego pola.
                           W przypadku programowania lub tworzenia bazy danych u ycie 07..
                           jest jednoznaczne z poinformowaniem, e dane pole nie przechowuje
                            adnej wartości (lub wartość jest nieznana). Rozwiązaniem idealnym
                           byłoby oczywiście przypisanie ka demu rekordowi bazy danych pewnej
                           konkretnej wartości. W rzeczywistości jednak takie sytuacje zdarzają
                           się rzadko. Dołączając do deklaracji typu ciąg 016 07.. mo liwe
                           jest wymuszenie takiego ograniczenia na danym polu. Przykładowo,
                           deklaracja klucza głównego mogłaby wyglądać następująco:
                             MNKGPVAKF 5/#..+06
 705+)0' 016 07..
Wartości domyślne i NULL




                           Tabela 3.4. W wyniku dalszych prac nad projektem bazy danych
                           niektóre kolumny zostały uzupełnione o wartości NOT NULL i DEFAULT
                           Baza danych finansów
                           Nazwa kolumny              Tabela               Typ kolumny
                           Numer faktury              Faktury              5/#..+06
 705+)0' 016 07.. '(#7.6 
                           Klient ID                  Faktury              5/#..+06
 705+)0'
                           Data wystawienia faktury   Faktury              FCVG 016 07..
                           Wartość faktury            Faktury              FGEKOCN
 WPUKIPGF 016 07..
                           Opis faktury               Faktury              VKP[VGZV
                           Klient ID                  Klienci              UOCNNKPV
 WPUKIPGF 016 07.. '(#7.6 
                           Nazwa klienta              Klienci              XCTEJCT
 016 07..
                           Ulica klienta              Klienci              XCTEJCT

                           Miasto klienta             Klienci              XCTEJCT

                           Stan klienta               Klienci              EJCT

                           Kod pocztowy klienta       Klienci              OGFKWOKPV
 WPUKIPGF
                           Telefon klienta            Klienci              XCTEJCT

                           Osoba kontaktowa           Klienci              XCTEJCT

                           Adres e-mail kontaktowy    Klienci              XCTEJCT

                           Wydatek ID                 Wydatki              UOCNNKPV
 WPUKIPGF 016 07.. '(#7.6 
                           Kategoria wydatku ID       Wydatki              VKP[KPV
 WPUKIPGF
                           Wartość wydatku            Wydatki              FGEKOCN
 WPUKIPGF 016 07..
                           Opis wydatku               Wydatki              VKP[VGZV
                           Data zapłaty               Wydatki              FCVG
                           Kategoria wydatku ID       Kategorie wydatków   VKP[KPV
 WPUKIPGF
                           Kategoria wydatku          Kategorie wydatków   XCTEJCT




                           66
Projektowanie bazy danych

Podczas budowania tabeli mo liwe jest
tak e przypisywanie wartości domyślnych.
W sytuacjach, gdy du a część rekordów
posiadać będzie tę samą zawartość, wcześniejsze
ustalenie wartości domyślnych pozwoli na
wyeliminowanie konieczności wprowadzania
pewnych danych w trakcie uzupełniania bazy
danych, o ile oczywiście nie odbiegają one od
wartości standardowych. Przykładem mo e być:
  RNGE '07/
 /  -  '(#7.6   -

Obie techniki zostały uwzględnione w tabeli 3.4.

Wskazówki
   Zgodnie ze sztuką projektowania bazy
   danych oraz zasadami funkcjonowania
   MySQL klucze główne nie mogą zawierać
   wartości 07...




                                                   Wartości domyślne i NULL
   Je eli kolumna '07/ zostanie określona jako
   016 07.., wówczas pierwsza dopuszczalna
   wartość stanie się wartością domyślną.
   Istotnym jest, aby mieć świadomość, e 07..
   nie jest wartością równoznaczną z zerem,
   pustym ciągiem ( ) czy znakiem spacji ( ).




                                             67
Rozdział 3.

                                                              Tabela 3.5. W celu zwiększenia wydajności
          Indeksy                                             baza danych została wzbogacona o kilka
          Indeksy składają się na szczególny system,          (choć nie jest ich zbyt wiele) indeksów,
                                                              które pozwolą jej na efektywniejsze pobieranie
          wykorzystywany do poprawienia całościowej
                                                              przechowywanych informacji
          wydajności bazy danych. Ustalając indeksy
          w ramach tabeli wskazuje się kolumny,               Indeksy bazy danych finansów
          które są w danej tabeli wa niejsze od innych        Kolumna                        Typ indeksu
          kolumn tej samej tabeli (definicja dla laików).     Numer faktury                  24+/#4; -';
          W rzeczywistości, do przechowywania                 Klient ID                      24+/#4; -';
          indeksów i efektywnego nimi zarządzania             Wydatek ID                     24+/#4; -';
          MySQL tworzy oddzielne pliki.
                                                              Kategoria wydatku ID           24+/#4; -';
          MySQL pozwala na utworzenie maksymalnie             Data wystawienia faktury       +0':
          32 indeksów dla jednej tabeli, a ka dy z nich       Nazwa klienta                  +0': (lub 70+37')
          mo e obejmować do 16 kolumn. Wykorzystanie
          indeksów wielokolumnowych nie musi się
          wydawać takie oczywiste, jednak stają się
          u yteczne w przypadku częstego przeszukiwania
          grupy tych samych kolumn (np. zawierających
          dane na temat imienia, nazwiska, miasta
          i województwa).
          Z drugiej strony, w stosowaniu indeksów
          wskazany jest umiar. Zwiększają one co
Indeksy




          prawda szybkość odczytu danych z bazy, ale
          spowalniają proces ich modyfikacji (z uwagi na
          fakt, e zmiany muszą być odwzorowane tak e
          w indeksach). Najlepszym zastosowaniem dla
          indeksów jest u ycie ich w kolumnach, które:
          u są często wykorzystywane w części 9*'4'
               zapytań;
          u są często wykorzystywane w części 14'4 $;
               zapytań;
          u cechują się ró norodnością wartości
               (kolumny, w których wartości powtarzają się
               wielokrotnie nie powinny być indeksowane).
          W celu zwiększenia wydajności kolumna klucza
          głównego jest indeksowana automatycznie
          przez MySQL.
          W MySQL wyró nia się trzy typy indeksów:
          +0':, 70+37' (narzucający konieczność
          wprowadzania unikatowej wartości w ka dym
          wierszu) oraz 24+/#4; -'; (będący szczególną
          postacią indeksu 70+37'). Propozycje indeksów
          dla bazy danych finansów zestawiono w tabeli 3.5.



          68
Projektowanie bazy danych

Ostatnim atrybutem kolumny, który często
wykorzystuje się w połączeniu z indeksem,
jest #761A+0%4'/'06. Definicja pola zawierającego
tę własność wygląda następująco:
  MNKGPVAKF 5/#..+06
 705+)0' 016 07..
  #761A+0%4'/'06

Określa ona obowiązek wprowadzania w danym
polu kolejnej logicznej wartości z danej serii.
Jeśli kolumna jest kolumną przechowującą
wartości typu liczb całkowitych, to w trakcie
dodawania do tabeli nowego rekordu w danym
polu zostanie wprowadzona kolejna liczba
całkowita.

Wskazówki
   #761A+0%4'/'06 w MySQL jest
   odpowiednikiem sekwencji w Oracle.
   Indeksy stosowane w kolumnach o zmiennej
   długości cechuje mniejsza wydajność.
   Ogólnie, stosowanie pól, których długość
   nie jest stała, spowalnia pracę MySQL.




                                                    Indeksy
   W trakcie tworzenia indeksów mo na im
   nadawać nazwy (zobacz rozdział 4. SQL).
   Je eli jednak nie zostaną one określone,
   nazwą indeksu stanie się nazwa kolumny,
   której dotyczy.




                                              69
Rozdział 3.


                        Końcowy etap projektu
                        Ostatnim etapem projektowania bazy danych
                        jest zastosowanie odpowiedniej konwencji
                        nazewnictwa. Co prawda, MySQL nie narzuca
                        zasad nazywania baz danych, tabel czy kolumn,
                        istnieją jednak pewne sprawdzone reguły,
                        których nale y przestrzegać (niektóre z nich są
                        nawet obowiązkowe):
                        u u ywanie znaków alfanumerycznych;
                        u ograniczenie maksymalnej długości nazw
                             do 64 znaków (jest to wymóg MySQL);
                        u u ywanie znaków podkreślenia (A) w celu
                             rozdzielania wyrazów;
                        u korzystanie tylko z małych liter
                             (choć nie jest to rzecz obowiązkowa);
                        u u ywanie liczby mnogiej w oznaczaniu tabel
Końcowy etap projektu




                             i pojedynczej w definiowaniu kolumn;
                        u dołączanie KF (lub +) do nazw kolumn
                             kluczy głównych i obcych;
                        u umieszczanie kluczy głównych
                             w początkowej części tabeli,
                             a w dalszej kolejności kluczy obcych;
                        u nazwy pól powinny mieć charakter opisowy;
                        u nazwy pól, z wyjątkiem kluczy, powinny
                             być unikatowe w obrębie wszystkich tabel.
                        Zamieszczone powy ej reguły mają jedynie
                        charakter zalecenia, ich przestrzeganie,
                        poza koniecznością posługiwania się znakami
                        alfanumerycznymi bez znaków spacji, nie jest
                        zatem obowiązkowe. Część programistów
                        preferuje u ywanie wielkich liter do rozdzielania
                        wyrazów (zamiast znaku podkreślenia). Inni
                        z kolei uwzględniają w nazwie kolumny jej typ.
                        Najistotniejszym jest jednak to, by przestrzegać
                        ustalonej konwencji.




                        70
Projektowanie bazy danych

                                                     Ostateczny projekt bazy danych przedstawiono
                                                     w tabeli 3.6. Sposób jej utworzenia zostanie
                                                     zaprezentowany w następnym rozdziale.

                                                     Wskazówki
                                                        Systemy Unix, w przeciwieństwie
                                                        do systemów Windows, rozró niają
                                                        w nazwach baz danych i tabel wielkość
                                                        liter. W nazwach kolumn wielkość
                                                        znaków jest zawsze rozró niana.
                                                        Drobiazgowe przestrzeganie określonych
                                                        zasad projektowania baz danych pozwala
                                                        na ograniczenie liczby błędów, które mogą
                                                        się pojawić w trakcie programowania
                                                        interfejsu bazy danych, o czym będzie
                                                        mowa w rozdziałach 6., 7. i 8.




                                                                                                     Końcowy etap projektu
Tabela 3.6. Ostatni etap projektu polega na zastosowaniu odpowiedniej konwencji nazewnictwa
Baza danych finansów
Nazwa kolumny                   Tabela               Typ kolumny
faktura_id                      faktury              5/#..+06
 705+)0' 016 07.. '(#7.6 
klient_id                       faktury              5/#..+06
 705+)0'
data_faktury                    faktury              FCVG 016 07..
wartosc_faktury                 faktury              FGEKOCN
 WPUKIPGF 016 07..
opis_faktury                    faktury              VKP[VGZV
klient_id                       klienci              UOCNNKPV
 WPUKIPGF 016 07.. '(#7.6 
nazwa_klienta                   klienci              XCTEJCT
 016 07..
ulica_klienta                   klienci              XCTEJCT

miasto_klienta                  klienci              XCTEJCT

stan_klienta                    klienci              EJCT

kod_pocztowy_klienta            klienci              OGFKWOKPV
 WPUKIPGF
telefon_klienta                 klienci              XCTEJCT

osoba_kontaktowa                klienci              XCTEJCT

email_kontaktowy                klienci              XCTEJCT

wydatek_id                      wydatki              UOCNNKPV
 WPUKIPGF 016 07.. '(#7.6 
kategoria_wydatku_id            wydatki              VKP[KPV
 WPUKIPGF
wartosc_wydatku                 wydatki              FGEKOCN
 WPUKIPGF 016 07..
opis_wydatku                    wydatki              VKP[VGZV
data_zaplaty                    wydatki              FCVG
kategoria_wydatku_id            kategorie_wydatkow   VKP[KPV
 WPUKIPGF
kategoria_wydatku               kategorie_wydatkow   XCTEJCT





                                                                                                71

Mais conteúdo relacionado

Mais procurados

100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery WindowsWydawnictwo Helion
 
PHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIPHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIWydawnictwo Helion
 
Oracle. Optymalizacja wydajności
Oracle. Optymalizacja wydajnościOracle. Optymalizacja wydajności
Oracle. Optymalizacja wydajnościWydawnictwo Helion
 
Ajax. Wzorce i najlepsze rozwiązania
Ajax. Wzorce i najlepsze rozwiązaniaAjax. Wzorce i najlepsze rozwiązania
Ajax. Wzorce i najlepsze rozwiązaniaWydawnictwo Helion
 
100 sposobów na Linux Server. Wskazówki i narzędzia dotyczące integracji, mon...
100 sposobów na Linux Server. Wskazówki i narzędzia dotyczące integracji, mon...100 sposobów na Linux Server. Wskazówki i narzędzia dotyczące integracji, mon...
100 sposobów na Linux Server. Wskazówki i narzędzia dotyczące integracji, mon...Wydawnictwo Helion
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieWydawnictwo Helion
 
PostgreSQL. Leksykon kieszonkowy
PostgreSQL. Leksykon kieszonkowyPostgreSQL. Leksykon kieszonkowy
PostgreSQL. Leksykon kieszonkowyWydawnictwo Helion
 
Master Thesis - Comparative analysis of programming Environments based on Rub...
Master Thesis - Comparative analysis of programming Environments based on Rub...Master Thesis - Comparative analysis of programming Environments based on Rub...
Master Thesis - Comparative analysis of programming Environments based on Rub...Adam Skołuda
 
Windows Server 2003. Podręcznik administratora
Windows Server 2003. Podręcznik administratoraWindows Server 2003. Podręcznik administratora
Windows Server 2003. Podręcznik administratoraWydawnictwo Helion
 

Mais procurados (20)

Rozbudowa i naprawa serwerów
Rozbudowa i naprawa serwerówRozbudowa i naprawa serwerów
Rozbudowa i naprawa serwerów
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
 
PHP 5. Nowe możliwości
PHP 5. Nowe możliwościPHP 5. Nowe możliwości
PHP 5. Nowe możliwości
 
Cisco. Receptury
Cisco. RecepturyCisco. Receptury
Cisco. Receptury
 
PHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIPHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie II
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Oracle. Optymalizacja wydajności
Oracle. Optymalizacja wydajnościOracle. Optymalizacja wydajności
Oracle. Optymalizacja wydajności
 
SQL Server 2005
SQL Server 2005SQL Server 2005
SQL Server 2005
 
Po prostu sieci komputerowe
Po prostu sieci komputerowePo prostu sieci komputerowe
Po prostu sieci komputerowe
 
SQL w mgnieniu oka
SQL w mgnieniu okaSQL w mgnieniu oka
SQL w mgnieniu oka
 
Debian Linux. Ćwiczenia
Debian Linux. ĆwiczeniaDebian Linux. Ćwiczenia
Debian Linux. Ćwiczenia
 
Praktyczny kurs SQL
Praktyczny kurs SQLPraktyczny kurs SQL
Praktyczny kurs SQL
 
Ajax. Wzorce i najlepsze rozwiązania
Ajax. Wzorce i najlepsze rozwiązaniaAjax. Wzorce i najlepsze rozwiązania
Ajax. Wzorce i najlepsze rozwiązania
 
100 sposobów na Linux Server. Wskazówki i narzędzia dotyczące integracji, mon...
100 sposobów na Linux Server. Wskazówki i narzędzia dotyczące integracji, mon...100 sposobów na Linux Server. Wskazówki i narzędzia dotyczące integracji, mon...
100 sposobów na Linux Server. Wskazówki i narzędzia dotyczące integracji, mon...
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanie
 
PostgreSQL. Leksykon kieszonkowy
PostgreSQL. Leksykon kieszonkowyPostgreSQL. Leksykon kieszonkowy
PostgreSQL. Leksykon kieszonkowy
 
Master Thesis - Comparative analysis of programming Environments based on Rub...
Master Thesis - Comparative analysis of programming Environments based on Rub...Master Thesis - Comparative analysis of programming Environments based on Rub...
Master Thesis - Comparative analysis of programming Environments based on Rub...
 
Windows Server 2003. Podręcznik administratora
Windows Server 2003. Podręcznik administratoraWindows Server 2003. Podręcznik administratora
Windows Server 2003. Podręcznik administratora
 
SQL. Leksykon kieszonkowy
SQL. Leksykon kieszonkowySQL. Leksykon kieszonkowy
SQL. Leksykon kieszonkowy
 
100 sposobów na Access
100 sposobów na Access100 sposobów na Access
100 sposobów na Access
 

Destaque

Tworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceTworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceWydawnictwo Helion
 
Oracle9i. Przewodnik dla początkujących
Oracle9i. Przewodnik dla początkującychOracle9i. Przewodnik dla początkujących
Oracle9i. Przewodnik dla początkującychWydawnictwo Helion
 
Hack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polskaHack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polskaWydawnictwo Helion
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1Wydawnictwo Helion
 
Rozbudowa i naprawa komputerów PC. Wydanie drugie
Rozbudowa i naprawa komputerów PC. Wydanie drugieRozbudowa i naprawa komputerów PC. Wydanie drugie
Rozbudowa i naprawa komputerów PC. Wydanie drugieWydawnictwo Helion
 
Hack Proofing XML. Edycja polska
Hack Proofing XML. Edycja polskaHack Proofing XML. Edycja polska
Hack Proofing XML. Edycja polskaWydawnictwo Helion
 
Java. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyJava. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyWydawnictwo Helion
 
Adobe Illustrator 10. Ćwiczenia
Adobe Illustrator 10. ĆwiczeniaAdobe Illustrator 10. Ćwiczenia
Adobe Illustrator 10. ĆwiczeniaWydawnictwo Helion
 

Destaque (12)

Tworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceTworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyce
 
Oracle9i. Przewodnik dla początkujących
Oracle9i. Przewodnik dla początkującychOracle9i. Przewodnik dla początkujących
Oracle9i. Przewodnik dla początkujących
 
Photoshop 7/7 CE. Biblia
Photoshop 7/7 CE. BibliaPhotoshop 7/7 CE. Biblia
Photoshop 7/7 CE. Biblia
 
Hack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polskaHack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polska
 
Bluetooth
BluetoothBluetooth
Bluetooth
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
 
Rozbudowa i naprawa komputerów PC. Wydanie drugie
Rozbudowa i naprawa komputerów PC. Wydanie drugieRozbudowa i naprawa komputerów PC. Wydanie drugie
Rozbudowa i naprawa komputerów PC. Wydanie drugie
 
Po prostu InDesign 2 CE
Po prostu InDesign 2 CEPo prostu InDesign 2 CE
Po prostu InDesign 2 CE
 
ABC grafiki komputerowej
ABC grafiki komputerowejABC grafiki komputerowej
ABC grafiki komputerowej
 
Hack Proofing XML. Edycja polska
Hack Proofing XML. Edycja polskaHack Proofing XML. Edycja polska
Hack Proofing XML. Edycja polska
 
Java. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyJava. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalisty
 
Adobe Illustrator 10. Ćwiczenia
Adobe Illustrator 10. ĆwiczeniaAdobe Illustrator 10. Ćwiczenia
Adobe Illustrator 10. Ćwiczenia
 

Semelhante a MySQL. Szybki start

Bazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawBazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawWydawnictwo Helion
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startWydawnictwo Helion
 
PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIWydawnictwo Helion
 
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki startPHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki startWydawnictwo Helion
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie IIPHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie IIWydawnictwo Helion
 
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalistyMySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalistyWydawnictwo Helion
 
Oracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danychOracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danychWydawnictwo Helion
 
SQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystkoSQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystkoWydawnictwo Helion
 
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIPHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIWydawnictwo Helion
 
Oracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawOracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawWydawnictwo Helion
 
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIPHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIWydawnictwo Helion
 
Microsoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programistyMicrosoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programistyWydawnictwo Helion
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowaneWydawnictwo Helion
 
Windows Server 2003. Wysoko wydajne rozwiązania
Windows Server 2003. Wysoko wydajne rozwiązaniaWindows Server 2003. Wysoko wydajne rozwiązania
Windows Server 2003. Wysoko wydajne rozwiązaniaWydawnictwo Helion
 
Po prostu własny serwer internetowy
Po prostu własny serwer internetowyPo prostu własny serwer internetowy
Po prostu własny serwer internetowyWydawnictwo Helion
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki startWydawnictwo Helion
 
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IICore Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IIWydawnictwo Helion
 

Semelhante a MySQL. Szybki start (20)

MySQL
MySQLMySQL
MySQL
 
Bazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawBazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstaw
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki start
 
PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie III
 
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki startPHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie IIPHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
 
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalistyMySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
 
Oracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danychOracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danych
 
SQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystkoSQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystko
 
MySQL. Almanach
MySQL. AlmanachMySQL. Almanach
MySQL. Almanach
 
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIPHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
 
Oracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawOracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstaw
 
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIPHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
 
Microsoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programistyMicrosoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programisty
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowane
 
Windows Server 2003. Wysoko wydajne rozwiązania
Windows Server 2003. Wysoko wydajne rozwiązaniaWindows Server 2003. Wysoko wydajne rozwiązania
Windows Server 2003. Wysoko wydajne rozwiązania
 
Po prostu własny serwer internetowy
Po prostu własny serwer internetowyPo prostu własny serwer internetowy
Po prostu własny serwer internetowy
 
Linux w sieci
Linux w sieciLinux w sieci
Linux w sieci
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
 
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IICore Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
 

Mais de Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++Wydawnictwo Helion
 

Mais de Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++
 

MySQL. Szybki start

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI MySQL. Szybki start KATALOG KSI¥¯EK Autor: Larry Ullman KATALOG ONLINE T³umaczenie: Marek Pa³czyñski ISBN: 83-7361-040-5 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: MySQL VQG Format: B5, stron: 336 TWÓJ KOSZYK DODAJ DO KOSZYKA Ksi¹¿ka „MySQL. Szybki start” to przystêpne wprowadzenie dla osób, które chc¹ w krótkim czasie poznaæ MySQL — jeden z najpopularniejszych systemów bazodanowych. Do jego zalet nale¿¹: szerokie rozpowszechnienie, du¿a wydajno æ CENNIK I INFORMACJE i prostota obs³ugi. Je li chcesz stworzyæ swoj¹ pierwsz¹ bazê danych, MySQL idealnie siê do tego nadaje. Chocia¿ jest to produkt darmowy, pod wieloma wzglêdami nie ZAMÓW INFORMACJE ustêpuje znacznie dro¿szym aplikacjom komercyjnym. O NOWO CIACH „MySQL. Szybki start” to same konkrety; nie znajdziesz tu zbêdnych teoretycznych rozwa¿añ i dygresji. Ka¿dy podrozdzia³ przedstawia sposób, w jaki nale¿y rozwi¹zaæ ZAMÓW CENNIK dany problem programistyczny. Jednocze nie ksi¹¿ka ta stanowi kompletny przewodnik po wszystkich wa¿nych dla programisty zagadnieniach. Nie zabrak³o tu równie¿ informacji na temat korzystania z MySQL z poziomu jêzyków programowania takich jak CZYTELNIA Perl, Java, czy PHP. Dziêki tej ksi¹¿ce: FRAGMENTY KSI¥¯EK ONLINE • Zainstalujesz MySQL w ró¿nych systemach operacyjnych • Uruchomisz serwer MySQL i dowiesz siê, z jakich programów klienckich korzystaæ • Zaprojektujesz wydajn¹ bazê danych • Poznasz jêzyk SQL • Zaznajomisz siê ze specyficznymi funkcjami dostêpnymi w MySQL • Nauczysz siê pisaæ aplikacje Javy, Perla i PHP wykorzystuj¹ce MySQL • Poznasz podstawy administrowania serwerem bazodanowym Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Spis treści Wprowadzenie 9 Rozdział 1. Instalowanie MySQL 17 Instalacja MySQL w systemie Windows .............................................. 19 Instalowanie MySQL w systemie Linux ............................................... 21 Opcje konfiguracyjne.......................................................................... 25 Uaktualnianie MySQL ........................................................................ 26 Poprawki do MySQL .......................................................................... 29 Rozdział 2. Uruchamianie MySQL 31 Rozpoczęcie pracy MySQL ................................................................. 32 Zatrzymywanie MySQL...................................................................... 37 Wykorzystanie mysqladmin................................................................. 40 Spis treści Klient MySQL.................................................................................... 43 U ytkownicy i ich prawa..................................................................... 46 Rozdział 3. Projektowanie bazy danych 51 Normalizacja...................................................................................... 52 Klucze ............................................................................................... 53 Relacje............................................................................................... 55 Pierwsza postać normalna ................................................................... 57 Druga postać normalna........................................................................ 58 Trzecia postać normalna...................................................................... 60 Typy danych MySQL.......................................................................... 62 Wartości domyślne i NULL................................................................. 66 Indeksy .............................................................................................. 68 Końcowy etap projektu ....................................................................... 70 Rozdział 4. SQL 73 Tworzenie baz danych i tabel .............................................................. 74 Wprowadzanie danych ........................................................................ 78 Pobieranie danych............................................................................... 81 Wyra enia warunkowe........................................................................ 84 U ycie LIKE i NOT LIKE .................................................................. 87 5
  • 3. Spis treści Złączenia ........................................................................................... 89 Sortowanie wyników zapytania ........................................................... 93 Ograniczanie liczby zwracanych wyników ........................................... 95 Uaktualnianie danych.......................................................................... 97 Usuwanie danych................................................................................ 98 Modyfikacja tabel............................................................................. 101 Rozdział 5. Funkcje MySQL 105 Funkcje tekstowe.............................................................................. 106 Konkatenacja i aliasy........................................................................ 109 Funkcje numeryczne ......................................................................... 112 Funkcje przetwarzania daty i czasu.................................................... 115 Formatowanie daty i czasu ................................................................ 118 Funkcje szyfrowania ......................................................................... 120 Funkcje grupowania.......................................................................... 123 Pozostałe funkcje.............................................................................. 126 Rozdział 6. MySQL i PHP 129 Łączenie z MySQL i wybieranie bazy danych..................................... 130 Spis treści Proste zapytania................................................................................ 133 Przetwarzanie wyników zapytania ...................................................... 140 Korzystanie z mysql_insert_id()......................................................... 147 Obsługa błędów................................................................................ 154 Bezpieczeństwo................................................................................ 157 Rozdział 7. MySQL i Perl 167 Instalacja Perla z obsługą MySQL w systemie operacyjnym Windows ... 168 Instalowanie obsługi MySQL w Perlu w systemie operacyjnym Unix ... 171 Testowanie Perla i MySQL................................................................ 174 Łączenie z MySQL ........................................................................... 177 Proste zapytania................................................................................ 180 Przetwarzanie wyników zapytania ..................................................... 183 Pozyskanie wartości InsertID............................................................. 186 Bezpieczeństwo................................................................................ 188 Rozdział 8. MySQL i Java 193 Instalacja sterownika MySQL dla Javy .............................................. 194 Łączenie z bazą danych..................................................................... 197 Proste zapytania................................................................................ 202 Przetwarzanie wyników zapytania ..................................................... 206 Pliki własności ................................................................................. 211 6
  • 4. Spis treści Rozdział 9. Techniki programowania baz danych 215 Zapisywanie i pobieranie danych binarnych........................................ 216 Tworzenie mechanizmów wyszukiwania............................................ 225 Tworzenie stron z wynikami zapytania............................................... 232 Zabezpieczanie bazy danych.............................................................. 242 Rozdział 10. Administrowanie MySQL 247 Pliki danych MySQL ........................................................................ 248 Sporządzanie kopii zapasowych baz danych ....................................... 252 Korzystanie z plików wsadowych ...................................................... 255 Importowanie danych........................................................................ 258 Utrzymanie bazy danych ................................................................... 260 Podnoszenie wydajności.................................................................... 263 Dzienniki pracy MySQL ................................................................... 265 Bezpieczeństwo................................................................................ 268 Rozdział 11. MySQL dla zaawansowanych 271 Tabele InnoDB ................................................................................. 272 Transakcje w MySQL ....................................................................... 277 Spis treści Blokowanie tabel.............................................................................. 280 Przeszukiwanie typu full-text............................................................. 283 Wyra enia regularne ......................................................................... 287 Dodatek A Rozwiązywanie problemów 289 Instalacja.......................................................................................... 290 Uruchamianie MySQL ...................................................................... 291 Dostęp do MySQL............................................................................ 292 Problemy z mysql.sock ..................................................................... 294 Zmiana hasła u ytkownika root ......................................................... 296 Przestawienie licznika wartości typu AUTO_INCREMENT................ 298 Zapytania zwracające nieoczekiwane wyniki ...................................... 299 Dodatek B Przegląd SQL i MySQL 301 Podstawy SQL.................................................................................. 302 Administracyjne polecenia SQL......................................................... 306 Prawa dostępu MySQL ..................................................................... 307 Typy danych MySQL........................................................................ 308 Funkcje MySQL ............................................................................... 310 Pozostałe informacje......................................................................... 313 7
  • 5. Spis treści Dodatek C Źródła informacji 315 MySQL............................................................................................ 316 Aplikacje MySQL innych dostawców ................................................ 317 SQL................................................................................................. 318 Ogólne wiadomości o bazach danych................................................. 319 PHP ................................................................................................. 320 Perl.................................................................................................. 321 Java................................................................................................. 322 Bezpieczeństwo................................................................................ 323 Inne źródła informacji....................................................................... 324 Skorowidz 325 Spis treści 8
  • 6. 3 Projektowanie bazy danych Projektowanie bazy danych Projektowanie bazy danych W pracy z systemem zarządzania relacyjną bazą danych, takim jak MySQL, pierwszym etapem procesu tworzenia i wykorzystywania bazy polega na zdefiniowaniu jej struktury. Projektowanie bazy danych, inaczej modelowanie danych, ma zasadnicze znaczenie dla pomyślnego i długotrwałego zarządzania informacjami. Wykorzystanie procesu zwanego normalizacją umo liwia całkowite wyeliminowanie redundancji oraz innego typu problemów, które mogłyby Projektowanie bazy danych naruszyć integralność danych. Omówione w niniejszym rozdziale techniki pomogą w zapewnieniu projektowanej bazie danych realności jej wykonania, wysokiej jakości i niezawodności. Zaprezentowany przykład — obsługa transakcji handlowych, w tym przechowywanie faktur i zapis wydatków — będzie wykorzystywany tak e w kolejnych rozdziałach niniejszej ksią ki, a przedstawione zasady normalizacji znajdują zastosowanie w ka dej nowo tworzonej bazie danych. 51
  • 7. Rozdział 3. Tabela 3.1. Bazując na zało onym sposobie Normalizacja wykorzystywania bazy danych opracowano listę Zagadnieniem normalizacji jako pierwszy zajął wszystkich niezbędnych informacji, które powinny być w niej przechowywane się — we wczesnych latach 70. — pracownik naukowy firmy IBM, E.F. Codd (opracował on Baza danych finansów równie podstawy teorii relacyjnych baz danych). Pozycja Przykład Relacyjna baza danych jest jedynie zbiorem danych, Numer faktury 1 uło onych w określony sposób. Dr Codd opracował Data wystawienia faktury 2002-04-20 natomiast szereg zasad, zwanych postaciami Wartość faktury 30,28 USD normalnymi, które ułatwiają zdefiniowanie Opis faktury Projekt HTML wspomnianego uło enia. W niniejszym rozdziale Termin płatności 2002-05-11 przedstawiono charakterystykę trzech postaci Informacje o kliencie Acme Industries, normalnych, które zazwyczaj są wystarczające 100 Main Street, Anytown, dla większości projektów baz danych. NY 11111, (800) 555-1234 Przed rozpoczęciem normalizowania bazy Wydatek 100 USD danych konieczne jest określenie przeznaczenia Kategoria wydatku i opis Opłaty za utrzymywanie serwisu internetowego budowanej aplikacji. Oznacza to, e niezbędne www.DMCinsights.com jest wnikliwe przeanalizowanie tego zagadnienia Data zapłaty 2002-01-26 z klientem lub we własnym zakresie, gdy sposób operowania danymi determinuje proces ich modelowania. Dlatego podczas lektury Normalizacja niniejszego rozdziału Czytelnik powinien zamiast oprogramowania MySQL korzystać z kartki i ołówka (dla jasności, projektowanie bazy danych jest niezbędnym etapem tworzenia wszystkich relacyjnych baz danych, nie tylko w MySQL). Publikacje związane z bazami danych opierają się zazwyczaj na przykładach zbiorów muzycznych czy ksią kowych (drugi ich rodzaj był wykorzystywany przez Autora w innej ksią ce: Wskazówki Po prostu PHP. Techniki zaawansowane, Helion Jednym z najlepszych sposobów 2002 (PHP Advanced for the World Wide Web: określenia, jakiego typu informacje Visual QuickPro Guide)). Podczas lektury niniejszej powinny być przechowywane w bazie ksią ki Czytelnik zapozna się ze sposobem danych, jest ustalenie rodzajów tworzenia bazy danych typu finansowo-księgowego. zadawanych pytań i informacji, jakie Zasadniczym jej zadaniem będzie rejestrowanie powinny się znaleźć w odpowiedziach. faktur i wydatków, choć mo e być w prosty sposób zmodyfikowana, tak by przechowywać Choć niniejszy rozdział prezentuje informacje innego rodzaju, np. dane o czasie sposób manualnego projektowania bazy pracy nad projektem itp. W tabeli 3.1 zestawiono danych, nale y pamiętać, e istnieją wstępną listę danych, jakie powinny być gotowe aplikacje, przeznaczone do tego gromadzone w omawianej, przykładowej celu. Ich lista znajduje się w dodatku C bazie danych. Źródła informacji. 52
  • 8. Projektowanie bazy danych Klucze Klucze stanowią tę część danych, która pomaga w identyfikowaniu danego wiersza informacji w tabeli (inną nazwą wiersza jest rekord). Istnieją dwa rodzaje kluczy, którymi będziemy operować: klucze główne i klucze obce. Klucz główny jest unikatowym identyfikatorem i musi spełniać określone reguły. Musi: u zawsze posiadać jakąś wartość (nie mo e mieć wartości 07..); u przechowywać stałą wartość (nigdy niezmienianą); u posiadać niepowtarzalną wartość w ka dym wierszu tabeli. Najlepszym przykładem klucza głównego, który mo na spotkać w yciu codziennym, jest numer PESEL. Idea polega na tym, e ka dy obywatel otrzymuje niepowtarzalny numer PESEL, który nie podlega adnym zmianom. PESEL jest sztuczną konstrukcją, słu ącą Klucze do identyfikowania osób. Łatwo się mo na przekonać, e takie sztuczne narzucenie klucza głównego ka dej tabeli stanowi najefektywniejszy sposób jej projektowania. Drugim rodzajem kluczy są klucze obce. Stanowią one reprezentację kluczy Tabeli A w Tabeli B. Załó my, e dysponujemy bazą danych filmów, gdzie istnieją tabele film i re yser. Klucz publiczny tabeli re yser mógłby wówczas być odwzorowany w tabeli film jako klucz obcy. Idea ta stanie się łatwiejsza do zrozumienia po przeanalizowaniu zało eń procesu normalizacji. Aktualnie, oficjalnie MySQL obsługuje klucze obce tylko w przypadku wykorzystania tabel typu InnoDB (więcej informacji na temat typów tabel zawarto w rozdziale 11. MySQL dla zaawansowanych), w przeciwnym razie je ignoruje. Dlatego te występowanie kluczy obcych w MySQL ma raczej charakter teoretyczny a nie u ytkowy, co powinno ulec zmianie w kolejnych wersjach oprogramowania. 53
  • 9. Rozdział 3. W przedstawionej postaci baza danych finanse stanowi pojedynczą tabelę. Rozpoczęcie procesu normalizacji wymaga ustalenia przynajmniej jednego klucza głównego (klucze obce będą określane w kolejnych etapach). Aby określić klucz główny: 1. Wyszukaj dowolne pole, które spełnia zało enia klucza głównego. W przedstawionym przykładzie jedynymi danymi, które zawsze są niepowtarzalne, posiadają wartość i ich wartość nie mo e być zmieniana, są numery faktur. Pole to zostanie oznaczone jako klucz główny Rysunek 3.1. Pierwszy krok w procesie normalizacji bazy danych polega na określeniu klucza głównego (ang. primary key), do czego posłu y — numeru faktury symbol (PK) (rysunek 3.1). 2. Jeśli nie istnieje naturalny klucz główny, nale y go wymyślić. Czasami jest konieczne utworzenie klucza głównego, gdy nie istnieje wśród danych pole nadające się do tego celu. Nawet Klucze w przypadku stosowania identyfikatorów PESEL czy oznaczania ksią ek numerem ISBN (ang. International Standardized Book Number — standardowy znormalizowany numer ksią ki), które spełniają podane kryteria, dobrym rozwiązaniem jest utworzenie dodatkowego pola, przeznaczonego jednoznacznie na klucz główny. Wskazówki MySQL dopuszcza u ycie tylko jednego klucza głównego w tabeli, choć mo na go oprzeć na wielu kolumnach (zagadnienie to wykracza tematycznie poza zakres niniejszej ksią ki). MySQL osiąga największą wydajność w przypadku, gdy kluczem głównym jest wartość ze zbioru liczb całkowitych. Jest to kolejny powód, dla którego identyfikatory ISBN, zawierające znaki myślnika, niezbyt dobrze nadają się do pełnienia funkcji klucza głównego. 54
  • 10. Projektowanie bazy danych Relacje Mówiąc o relacjach w bazie danych, mamy na myśli zale ności danych jednej tabeli od danych drugiej. Relacje pomiędzy dwoma tabelami mogą mieć postać jeden-do-jeden, jeden-do-wielu lub wiele-do-wielu. Zale ność typu jeden-do-jeden występuje wtedy, gdy jedna i tylko jedna pozycja w tabeli A odnosi się do jednej i tylko jednej pozycji w tabeli B (np. ka dy obywatel Polski posiada jeden identyfikator PESEL, a ka dy identyfikator PESEL jest przypisany tylko do jednego obywatela. aden obywatel nie mo e posiadać dwóch numerów PESEL i aden numer PESEL nie mo e być przydzielony dwóm obywatelom). Relacja jeden-do-wielu ma miejsce wówczas, gdy jedna i tylko jedna pozycja w tabeli A dotyczy wielu pozycji w tabeli B. Określenie kobieta lub mę czyzna odnosi się do wielu osób, ale ka da z osób mo e być tylko mę czyzną lub kobietą. Relacja jeden-do-wielu Relacje jest najczęściej spotykaną relacją pomiędzy tabelami bazy danych. W końcu, zale ność wiele-do-wielu występuje wtedy, gdy wiele pozycji w tabeli A mo e odnosić się do wielu pozycji w tabeli B. Przykładowo, album płytowy mo e zawierać piosenki wykonywane przez wielu artystów, a artyści mogą być autorami wielu albumów płytowych. Projektując bazę danych nale y unikać relacji wiele-do-wielu, gdy są one przyczyną powstawania redundancji danych i problemów związanych z ich integralnością. Współzale ność relacji i kluczy polega na tym, e klucz w jednej tabeli odnosi się zazwyczaj do pola danych w innej, o czym ju wspominano. Zrozumienie zasad posługiwania się unikatowymi identyfikatorami oraz relacjami pozwala na przystąpienie do normalizowania bazy danych. 55
  • 11. Rozdział 3. Wskazówki Modelowanie bazy danych opiera się na pewnej konwencji reprezentowania jej struktury. Zostanie ona zaprezentowana za pomocą szeregu rysunków, zaprezentowanych w niniejszym rozdziale. Symbole wspomnianych rodzajów relacji pokazano na rysunku 3.2. Wynikiem procesu projektowania bazy Rysunek 3.2. Prezentowane oznaczenia danych jest diagram element-związek reprezentują relacje pomiędzy tabelami (ang. entity reletionship diagram), w procesie modelowania bazy danych uwzględniający reprezentację obramowanych tabel i symboli przedstawionych na rysunku 3.2. Słowo „relacyjny” w skrócie RDBMS pochodzi od tabel, które z technicznego punktu widzenia nazywają się relacjami. Relacje 56
  • 12. Projektowanie bazy danych Pierwsza postać normalna Pierwsza postać normalna bazy danych zakłada, e ka da kolumna mo e zawierać tylko jedną wartość (kolumna jest wtedy czasami nazywana atomową). Tabela, która posiada jedno pole przeznaczone do przechowywania danych adresowych nie spełnia tego kryterium, gdy przechowuje w pojedynczym polu pięć ró nych danych — ulicę, miasto, województwo, kod pocztowy i czasami kraj. Podobnie, niezgodne z zało eniem byłoby przechowywanie w jednym polu imienia i nazwiska osoby (choć niektórzy mogliby twierdzić, e imię i nazwisko stanowią całość, będąc elementem niepodzielnym). W ramach prowadzonego procesu normalizacji zostanie dokonane sprawdzenie istniejącej struktury pod kątem zgodności z pierwszą Pierwsza postać normalna postacią normalną. Aby uczynić bazę danych zgodną Rysunek 3.3. Zgodnie z zało eniami pierwszej z pierwszą postacią normalną: postaci normalnej dwie kolumny, które nie spełniały jej kryteriów, zostały podzielone 1. Wyszukuj pola, które zawierają więcej ni na większą liczbę pól jedną informację. Analizując tabelę 3.1 mo na zauwa yć, e z kryteriami pierwszej postaci normalnej nie są zgodne dwie kolumny: Informacje o kliencie oraz Kategoria wydatku i opis. Pola dotyczące dat zawierają, co prawda, informacje o dniu, miesiącu i roku, jednak ich dalsze rozdzielanie nie byłoby uzasadnione. 2. Dokonaj podziału pól wybranych w pierwszym kroku (rysunek 3.3). Rozwiązanie problemu polega na wydzieleniu z Informacji o kliencie pól: Nazwisko klienta, Ulica klienta, Stan klienta, Kod pocztowy klienta i Telefon klienta, a następnie z Kategorii wydatków i opisu pól: Kategoria wydatku, Opis wydatku. 3. Upewnij się, e wszystkie utworzone w kroku 2. pola spełniają kryteria pierwszej postaci normalnej. 57
  • 13. Rozdział 3. Druga postać normalna Baza danych ma drugą postać normalną, je eli spełnia zało enia pierwszej postaci normalnej (normalizacja przebiega stopniowo), a ka da kolumna w tabeli, która nie jest kluczem, pozostaje w relacji tylko z kluczem głównym. Najbardziej oczywisty wniosek, jaki płynie z powy szego zało enia jest taki, e baza danych nie ma drugiej postaci normalnej, je eli kilka rekordów tabeli posiada dokładnie taką samą wartość w danej Rysunek 3.4. Normalizacja bazy danych wymaga przeniesienia informacji kolumnie. Przykładowo, zamieszczenie listy nadmiarowych — takich jak dane producentów muzycznych wraz z nazwami ich klienta i informacje o wydatkach albumów, spowodowałoby występowanie tych samych — do oddzielnych tabel wartości w ramach jednej tabeli albumów. Przyglądając się bazie danych finansów (rysunek 3.3) mo na zauwa yć szereg niezgodności. Na początek, informacje na temat klienta nie zawsze będą się odnosiły tylko do jednej faktury (klient mo e dokonać kilku transakcji). Po drugie, informacje o wydatkach nie Druga postać normalna wią ą się z fakturami. Przekształcenie bazy danych do drugiej postaci normalnej wymaga przeniesienia wymienionych kolumn do oddzielnych tabel, gdzie ka da z wartości będzie zamieszczona tylko raz. W rzeczywistości normalizacja mo e być rozumiana jako proces tworzenia coraz większej liczby tabel, a do momentu usunięcia wszystkich mo liwych redundancji danych. Aby uczynić bazę danych zgodną z drugą postacią normalną: 1. Wyszukaj wszystkie pola, które nie zale ą bezpośrednio od klucza głównego. Jak ju wspomniano, informacjami, które nie dotyczą bezpośrednio konkretnych faktur, są informacje o kliencie oraz dane na temat wydatków. 2. Utwórz nowe tabele (rysunek 3.4). Najbardziej racjonalnym sposobem modyfikacji istniejącej struktury będzie utworzenie oddzielnych tabel Klienci, Faktury i Wydatki. Zgodnie z przyjętymi w ksią ce regułami wizualizacji, reprezentacja bazy danych składa się z obramowanych tabel. W ka dym bloku tabeli znajduje się nagłówek, który zawiera nazwę tabeli oraz cześć składającą się z nazw wszystkich kolumn. 58
  • 14. Projektowanie bazy danych 3. Przydziel lub utwórz nowe klucze główne (rysunek 3.5). Do zapewnienia, e wszystkie nowo utworzone tabele posiadają klucz główny, słu y technika opisana w wcześniejszej części tego rozdziału. Z uwagi na fakt, e zarówno tabela Klienci, jak i Wydatki nie posiada właściwego, unikatowego identyfikatora, konieczne było sztuczne jego utworzenie — Klient ID oraz Wydatek ID. Nazwa klienta byłaby być mo e niepowtarzalną wartością, Rysunek 3.5. Ka da tabela bazy danych a tym samym mogłaby być kluczem głównym, powinna posiadać własny klucz główny, niezale nie od tego, czy jest to pole niemniej korzystniej jest zawsze posłu yć się w tym nadmiarowe — jak Klient ID — czy pole celu wartościami ze zbioru liczb całkowitych. znaczące — jak Numer faktury 4. Powtórz kroki 1 – 3. Z uwagi na fakt, e zostały utworzone nowe tabele z nowymi kluczami, nale y się upewnić, e w efekcie wykonania tej operacji powstała baza zgodna z drugą postacią normalną. W prezentowanym Druga postać normalna przykładzie (rysunek 3.5) pozostaje jeden istotny problem — pole Kategoria wydatku mo e się odnosić do wielu rodzajów wydatków. Dlatego te zostanie utworzona nowa tabela o nazwie Kategorie wydatków (rysunek 3.6). Rysunek 3.6. Wchodzące w skład tabeli 5. Utwórz niezbędne klucze obce, które określą Wydatki pole Kategoria wydatku powinno właściwe relacje (rysunek 3.7). zostać wydzielone w postaci odrębnej tabeli Ostatnim krokiem na drodze do uzyskania zgodności z drugą postacią normalną jest uwzględnienie kluczy obcych i relacji, które będą określały sposób wzajemnego powiązania danych i tabel. Nale y pamiętać, e klucz główny jednej tabeli stanowi z reguły klucz obcy innej tabeli. Je eli oka e się, e klucz główny danej tabeli nie funkcjonuje jako klucz obcy w innej, prawdopodobnie coś zostało pominięte (choć nie zawsze jest to prawdą). Wskazówka Rysunek 3.7. Nowym kluczom głównym Innym sposobem sprawdzenia zgodności z drugą zostały przypisane odpowiednie klucze postacią normalną jest przeanalizowanie relacji obce (FK — ang. foreign key) oraz pomiędzy tabelami. Najlepszym rozwiązaniem określony został charakter relacji (w obu przypadkach jeden-do-wielu) jest utworzenie zale ności typu jeden-do-wielu. Tablice, w których występują relacje wiele-do-wielu prawdopodobnie wymagają przekształcenia. 59
  • 15. Rozdział 3. Trzecia postać normalna Baza danych ma trzecią postać normalną, je eli jest zgodna z drugą postacią normalną i je eli ka da kolumna, która nie jest kluczem, pozostaje niezale na od innych kolumn niebędących kluczami. Innymi słowy, wszystkie pola tabeli, które nie są kluczami, powinny być wzajemnie niezale ne. W przypadku poprawnego zrealizowania dwóch pierwszych kroków normalizacyjnych mo e się Rysunek 3.8. Modyfikowanie struktury bazy okazać, e wprowadzanie zmian na tym etapie danych mo e wprowadzać nieco zmieszania nie będzie konieczne. Z drugiej strony, je eli do projektu, który przestaje spełniać kryteria w ramach wspomnianych działań zostało normalizacji ze względu na pola: osoba dokonanych wiele zmian, krok ten dostarcza kontaktowa i adres e-mail mo liwości ostatecznego sprawdzenia projektu. Załó my przykładowo, e do ka dej faktury przypisywane jest nazwisko osoby Trzecia postać normalna odpowiedzialnej za kontakt oraz adres jej poczty elektronicznej (rysunek 3.8). Rzecz w tym, e wspomniane informacje odnoszą się do klienta, a nie do faktury, tym samym baza danych nie spełnia kryteriów trzeciej postaci normalnej. Prawidłowe rozwiązanie polega na dodaniu tych pól do tabeli Klienci (rysunek 3.9). Rysunek 3.9. Prawidłowe umiejscowienie danych z pól: osoba kontaktowa i adres e-mail wymaga przeniesienia ich do tabeli Klienci 60
  • 16. Projektowanie bazy danych Wskazówki Po zakończeniu szkicowania bazy danych na kartce dobrym pomysłem jest przeniesienie go do arkusza kalkulacyjnego, który odwzoruje powstały projekt (mo na te posłu yć się specjalnie utworzonym do tego celu narzędziem). Taki dokument mógłby słu yć jako dobre źródło informacji dla projektantów witryny internetowej, a tak e jako dokument przekazywany klientowi po zakończeniu projektu. Normalizacja stanie się jeszcze czynnością o jeszcze większym znaczeniu z chwilą, gdy MySQL zacznie wymuszać stosowanie kluczy obcych (w wersjach 4.1 i późniejszych). Zaniechanie normalizacji Trzecia postać normalna Mimo i zapewnienie, e baza danych spełnia kryteria trzeciej postaci normalnej zapewnia jej stabilność i trwałość, nie istnieje konieczność normalizowania ka dej bazy danych, z jaką będziemy pracować. Jednak zanim podwa ymy słuszność tej metody, nale y pamiętać, e takie działanie mo e mieć powa ne konsekwencje w dłu szej perspektywie. Dwoma zasadniczymi przyczynami zaniechania normalizacji są wygoda i wydajność. Mniejszą liczbą tabel łatwiej się manipuluje i łatwiej jest te wtedy zrozumieć strukturę bazy danych. Co więcej, ze względu na ich zło oną naturę, znormalizowane bazy danych stają się zazwyczaj wolniejsze w trakcie uaktualniania, pobierania i modyfikowania danych. Normalizacja oznacza wybranie większego poziomu integralności danych i skalowalności kosztem prostoty i szybkości działania. Z drugiej strony, istnieje wiele sposobów poprawienia wydajności baz danych, podczas gdy metod przeciwdziałania utracie danych, wynikającej z zastosowania wadliwego projektu, jest niewiele. 61
  • 17. Rozdział 3. Typy danych MySQL Po zdefiniowaniu wszystkich wymaganych tabel i kolumn konieczne jest określenie typu danych przechowywanych w ka dym z pól. Podczas tworzenia bazy danych (co zostanie przedstawione w następnym rozdziale) będzie wymagane określenie rodzaju informacji, które będą przechowywane w ka dym z pól. Niemal ka da baza danych opiera się na trzech ich kategoriach: u tekst; u liczby; u data i czas. W ka dej z wymienionych grup wyró nia się kilka odmian typów danych, z których pewne są charakterystyczne jedynie dla MySQL. Właściwy wybór typu dla danej kolumny wpływa nie tylko na rodzaj informacji, jakie mogą być w niej gromadzone Typy danych MySQL oraz na sposób ich przechowywania, ale równie na całkowitą wydajność bazy danych. Większość dostępnych w MySQL typów danych została zestawiona w tabeli 3.2. Zamieszczono tam tak e informacje o rozmiarze oraz krótki opis ka dego z nich. Wiele typów pozwala na określenie opcjonalnego atrybutu & WIQ è (nawiasy kwadratowe — =? — oznaczają, e pomiędzy nimi mo na wstawić parametr opcjonalny, tymczasem nawiasy okrągłe odpowiadają argumentom obowiązkowym). Typy liczbowe mogą być definiowane jako 705+)0'& — co ogranicza wartości kolumny do liczb dodatnich i zera — lub <'41(+.., co oznacza, e wolne miejsce zostanie wypełnione zerami (typy <'41(+.. są jednocześnie typami 705+)0'&). Z kolei z poszczególnymi typami dat są związane ró ne sposoby ich wykorzystania. Opis zagadnienia znajduje się w podręczniku dostępnym pod adresem www.mysql.com/doc/D/A/ DATETIME.html. Zazwyczaj jednak są stosowane podstawowe pola typu 6+/' i &#6', nie ma więc potrzeby analizowania ich zawiłości. Omówienia wymagają tak e dwa rozszerzenia typu 6':6 — '07/ i 5'6. Oba pozwalają na zdefiniowanie w trakcie tworzenia tabeli serii akceptowalnych wartości. 62
  • 18. Projektowanie bazy danych Pole typu '07/ mo e zawierać tylko jedną z kilku tysięcy mo liwych wartości, podczas gdy pole 5'6 mo e się składać z kilku wartości, przy czym ich liczba nie mo e przekraczać 64. Z typami '07/ i 5'6 wią ą się dwa problemy — nie są one obsługiwane przez inne bazy danych, a ich u ycie jest niezgodne z zasadami normalizacji. Tabela 3.2. Większość typów kolumn dostępnych w bazach danych MySQL Typy danych MySQL Typ Rozmiar Opis %*#4=& WIQ è? Liczba bajtów Pole o stałej długości; długość: 0 – 255 znaków. 8#4%*#4 & WIQ è Długość ciągu + 1 bajt Pole o stałej długości; długość: 0 – 255 znaków. 6+0;6':6 Długość ciągu + 1 bajt Ciąg tekstowy o maksymalnej długości 255 znaków. 6':6 Długość ciągu + 2 bajty Ciąg tekstowy o maksymalnej długości 65.536 znaków. /'+7/6':6 Długość ciągu + 3 bajty Ciąg tekstowy o maksymalnej długości 16.777.215 znaków. .10)6':6 Długość ciągu + 4 bajty Ciąg tekstowy o maksymalnej długości 4.294.967.295 znaków. Typy danych MySQL 6+0;+06= WIQ è? 1 bajt Liczba z zakresu od –128 do 128 lub 0 do 255 je eli jest typu 705+)0'. 5/#..+06= WIQ è? 2 bajty Liczba z zakresu od –32768 do 32768 lub 0 do 65535 je eli jest typu 705+)0'. /'+7/+06= WIQ è? 3 bajty Liczba z zakresu od –8.388.608 do 8.388.607 lub 0 do 16.777.215 je eli jest typu 705+)0'. +06= WIQ è? 4 bajty Liczba z zakresu od –2.147.483.648 do 2.147.483.647 lub 0 do 4.294.967.295 je eli jest typu 705+)0'. $+)+06= WIQ è? 8 bajtów Liczba z zakresu od –9.223.372.036.854.775.808 do 9.223.372.036.854.775.807 lub 0 do 18.446.744.073.709.551.615 je eli jest typu 705+)0'. (.1#6 4 bajty Mała wartość zmiennoprzecinkowa. 17$.'= WIQ è2Q[ELG? 8 bajtów Du a wartość zmiennoprzecinkowa. '%+/#.= WIQ è2Q[ELG? Długość + 1 Wartość typu 17$.' zapisana jako ciąg tekstowy, dla lub Długość + 2 bajty którego mo liwe jest ustalenie liczby pozycji po przecinku. #6' 3 bajty Data w formacie: RRRR-MM-DD. #6'6+/' 8 bajtów Data i czas w formacie: RRRR-MM-DD GG:MM:SS. 6+/'56#/2 4 bajty Znacznik czasowy w formacie: GG:MM:SS. 6+/' 3 bajty Znacznik czasowy w formacie GG:MM:SS. '07/ 1 lub 2 bajty Wyliczenie, które pozwala na to, by ka da kolumna posiadała jedną z kilku mo liwych wartości. 5'6 1,2,3,4 lub 8 bajtów Typ podobny do '07/ z tą ró nicą, e mo e posiadać więcej ni jedną dopuszczalną wartość. 63
  • 19. Rozdział 3. Aby wybrać typ danych: 1. Określ czy kolumna będzie przechowywała dane tekstowe, liczbowe czy te daty. CHAR a VARCHAR Zazwyczaj jest to prosty i oczywisty etap. Co do przewagi któregokolwiek Do przechowywania wartości liczbowych, takich z tych dwóch podobnych jak kody pocztowe czy sumy pienię ne, które będą do siebie typów wcią trwają przechowywane wraz z dodatkowymi znakami dyskusje. Oba przechowują (jak znak myślnika czy oznaczenie waluty), u ywa się ciągi tekstowe i mogą być pól tekstowych, choć zapisanie ich jako wartości definiowane z podaniem maksymalnej jego długości. liczbowych daje lepsze rezultaty. Problem formatowania Podstawowa ró nica polega mo e być rozwiązywany w innymi miejscu. na tym, e jakiekolwiek dane 2. Wybierz dla danej kolumny odpowiedni typ z danej zapisane jako %*#4 zawsze kategorii. będą zapisywane jako ciąg tekstowy o długości określonej Mając na uwadze wysoką wydajność bazy danych, dla danej kolumny (wypełnienie warto pamiętać, e: znakami spacji). Z kolei długość ciągów tekstowych s pola o stałej długości (jak %*#4) są zazwyczaj typu 8#4%*#4 jest równa szybciej przetwarzane ni pola o zmiennej długości długości przechowywanego (jak 8#4%*#4), choć z drugiej strony zajmują więcej Typy danych MySQL ciągu danych. przestrzeni dyskowej. Więcej informacji na ten Wynika z tego, e: temat zamieszczono we wskazówce; kolumny 8#4%*#4 zajmują s rozmiar ka dego z pól powinien być ograniczony mniej miejsca na dysku; do najmniejszej mo liwej wartości, którą mo na kolumny %*#4 są wyznaczyć określając największą mo liwą wartość przetwarzane szybciej wprowadzaną do danego pola. Przykładowo, je eli ni 8#4%*#4, o ile nie są największa wartość pola Klient ID będzie rzędu stosowane typy tabel setek, to dla danej kolumny powinno się wybrać InnoDB (więcej informacji trzycyfrowy typ 5/#..+06 bez znaku (705+)0') na ten temat zamieszczono — pozwoli on na wprowadzenie wartości od 0 do 999. w rozdziale 11. MySQL dla zaawansowanych). Nale y pamiętać, e wprowadzenie pięcioznakowego Trzeba przyznać, e ciągu tekstowego do pola typu %*#4 spowoduje w większości przypadków obcięcie trzech ostatnich znaków. Ta prawidłowość ró nica w wielkości znajduje zastosowanie we wszystkich typach zajmowanego miejsca o określonej długości (%*#4, 8#4%*#4, +06 itp.). na dysku oraz w szybkości pomiędzy oboma typami 3. Ustal maksymalną długość kolumn tekstowych jest niezauwa alna, przez co lub liczbowych oraz dołącz, jeśli to konieczne, rozwa anie tego problemu nie inne atrybuty (jak np. 705+)0') (tabela 3.3). ma szczególnego znaczenia. Zamiast rozpisywania się o sposobach i przyczynach Istnieje jeszcze jedna, mniej takiego, a nie innego zdefiniowania wszystkich 21 istotna ró nica pomiędzy przykładowych kolumn, wszystkie ich własności omawianymi typami danych — MySQL usuwa nadmiarowe zestawiono w tabeli 3.3. Niektórzy programiści znaki spacji z kolumn %*#4 mogą mieć odmienne propozycje. Najistotniejsze podczas pobierania danych jest jednak, aby dostosować ka dy typ do rozmiarów a z kolumn 8#4%*#4 podczas przechowywanych informacji, zamiast korzystać zawsze ich wstawiania. z podstawowych (nieefektywnych) typów 6':6 i +06. 64
  • 20. Projektowanie bazy danych Wskazówki Wiele z nazw typów posiada synonimy, np. +06 — +06')'4, '% — '%+/#. itd. Pole typu 6+/'56#/2 jest uaktualniane automatycznie podczas wykonywania polecenia +05'46 czy 72#6', nawet je eli dla danego pola nie określono adnej wartości. W przypadku, gdy tabela zawiera więcej pól typu 6+/'56#/2, podczas realizacji polecenia +05'46 lub 72#6' uaktualniane jest tylko pierwsze z nich. Dostępny jest równie typ $.1$, będący odmianą typu 6':6, który pozwala na przechowywanie w tabeli plików binarnych. Przykład u ycia zostanie zaprezentowany w rozdziale 9. Techniki programowania baz danych. Tabela 3.3. Dobór optymalnego typu danych Typy danych MySQL dla ka dego z pól jest często zaniedbywaną czynnością Baza danych finansów Nazwa kolumny Tabela Typ kolumny Numer faktury Faktury 5/#..+06 705+)0' Klient ID Faktury 5/#..+06 705+)0' Data wystawienia faktury Faktury FCVG Wartość faktury Faktury FGEKOCN WPUKIPGF Opis faktury Faktury VKP[VGZV Klient ID Klienci UOCNNKPV WPUKIPGF Nazwa klienta Klienci XCTEJCT Ulica klienta Klienci XCTEJCT Miasto klienta Klienci XCTEJCT Stan klienta Klienci %*#4 Kod pocztowy klienta Klienci OGFKWOKPV WPUKIPGF Telefon klienta Klienci XCTEJCT Osoba kontaktowa Klienci XCTEJCT Adres e-mail kontaktowy Klienci XCTEJCT Wydatek ID Wydatki UOCNNKPV WPUKIPGF Kategoria wydatku ID Wydatki VKP[KPV WPUKIPGF Wartość wydatku Wydatki FGEKOCN WPUKIPGF Opis wydatku Wydatki VKP[VGZV Data zapłaty Wydatki FCVG Kategoria wydatku ID Kategorie wydatków VKP[KPV WPUKIPGF Kategoria wydatku Kategorie wydatków XCTEJCT 65
  • 21. Rozdział 3. Wartości domyślne i NULL Zgodnie z przedstawionymi wcześniej informacjami, definiując typy danych jest mo liwe dołączanie atrybutów, takich jak 705+)0' czy '41(+... Istnieją jeszcze dwie wartości, z których jedna informuje, czy w kolumnie dopuszcza się wartości 07.., a druga wskazuje domyślną wartość danego pola. W przypadku programowania lub tworzenia bazy danych u ycie 07.. jest jednoznaczne z poinformowaniem, e dane pole nie przechowuje adnej wartości (lub wartość jest nieznana). Rozwiązaniem idealnym byłoby oczywiście przypisanie ka demu rekordowi bazy danych pewnej konkretnej wartości. W rzeczywistości jednak takie sytuacje zdarzają się rzadko. Dołączając do deklaracji typu ciąg 016 07.. mo liwe jest wymuszenie takiego ograniczenia na danym polu. Przykładowo, deklaracja klucza głównego mogłaby wyglądać następująco: MNKGPVAKF 5/#..+06 705+)0' 016 07.. Wartości domyślne i NULL Tabela 3.4. W wyniku dalszych prac nad projektem bazy danych niektóre kolumny zostały uzupełnione o wartości NOT NULL i DEFAULT Baza danych finansów Nazwa kolumny Tabela Typ kolumny Numer faktury Faktury 5/#..+06 705+)0' 016 07.. '(#7.6 Klient ID Faktury 5/#..+06 705+)0' Data wystawienia faktury Faktury FCVG 016 07.. Wartość faktury Faktury FGEKOCN WPUKIPGF 016 07.. Opis faktury Faktury VKP[VGZV Klient ID Klienci UOCNNKPV WPUKIPGF 016 07.. '(#7.6 Nazwa klienta Klienci XCTEJCT 016 07.. Ulica klienta Klienci XCTEJCT Miasto klienta Klienci XCTEJCT Stan klienta Klienci EJCT Kod pocztowy klienta Klienci OGFKWOKPV WPUKIPGF Telefon klienta Klienci XCTEJCT Osoba kontaktowa Klienci XCTEJCT Adres e-mail kontaktowy Klienci XCTEJCT Wydatek ID Wydatki UOCNNKPV WPUKIPGF 016 07.. '(#7.6 Kategoria wydatku ID Wydatki VKP[KPV WPUKIPGF Wartość wydatku Wydatki FGEKOCN WPUKIPGF 016 07.. Opis wydatku Wydatki VKP[VGZV Data zapłaty Wydatki FCVG Kategoria wydatku ID Kategorie wydatków VKP[KPV WPUKIPGF Kategoria wydatku Kategorie wydatków XCTEJCT 66
  • 22. Projektowanie bazy danych Podczas budowania tabeli mo liwe jest tak e przypisywanie wartości domyślnych. W sytuacjach, gdy du a część rekordów posiadać będzie tę samą zawartość, wcześniejsze ustalenie wartości domyślnych pozwoli na wyeliminowanie konieczności wprowadzania pewnych danych w trakcie uzupełniania bazy danych, o ile oczywiście nie odbiegają one od wartości standardowych. Przykładem mo e być: RNGE '07/ / - '(#7.6 - Obie techniki zostały uwzględnione w tabeli 3.4. Wskazówki Zgodnie ze sztuką projektowania bazy danych oraz zasadami funkcjonowania MySQL klucze główne nie mogą zawierać wartości 07... Wartości domyślne i NULL Je eli kolumna '07/ zostanie określona jako 016 07.., wówczas pierwsza dopuszczalna wartość stanie się wartością domyślną. Istotnym jest, aby mieć świadomość, e 07.. nie jest wartością równoznaczną z zerem, pustym ciągiem ( ) czy znakiem spacji ( ). 67
  • 23. Rozdział 3. Tabela 3.5. W celu zwiększenia wydajności Indeksy baza danych została wzbogacona o kilka Indeksy składają się na szczególny system, (choć nie jest ich zbyt wiele) indeksów, które pozwolą jej na efektywniejsze pobieranie wykorzystywany do poprawienia całościowej przechowywanych informacji wydajności bazy danych. Ustalając indeksy w ramach tabeli wskazuje się kolumny, Indeksy bazy danych finansów które są w danej tabeli wa niejsze od innych Kolumna Typ indeksu kolumn tej samej tabeli (definicja dla laików). Numer faktury 24+/#4; -'; W rzeczywistości, do przechowywania Klient ID 24+/#4; -'; indeksów i efektywnego nimi zarządzania Wydatek ID 24+/#4; -'; MySQL tworzy oddzielne pliki. Kategoria wydatku ID 24+/#4; -'; MySQL pozwala na utworzenie maksymalnie Data wystawienia faktury +0': 32 indeksów dla jednej tabeli, a ka dy z nich Nazwa klienta +0': (lub 70+37') mo e obejmować do 16 kolumn. Wykorzystanie indeksów wielokolumnowych nie musi się wydawać takie oczywiste, jednak stają się u yteczne w przypadku częstego przeszukiwania grupy tych samych kolumn (np. zawierających dane na temat imienia, nazwiska, miasta i województwa). Z drugiej strony, w stosowaniu indeksów wskazany jest umiar. Zwiększają one co Indeksy prawda szybkość odczytu danych z bazy, ale spowalniają proces ich modyfikacji (z uwagi na fakt, e zmiany muszą być odwzorowane tak e w indeksach). Najlepszym zastosowaniem dla indeksów jest u ycie ich w kolumnach, które: u są często wykorzystywane w części 9*'4' zapytań; u są często wykorzystywane w części 14'4 $; zapytań; u cechują się ró norodnością wartości (kolumny, w których wartości powtarzają się wielokrotnie nie powinny być indeksowane). W celu zwiększenia wydajności kolumna klucza głównego jest indeksowana automatycznie przez MySQL. W MySQL wyró nia się trzy typy indeksów: +0':, 70+37' (narzucający konieczność wprowadzania unikatowej wartości w ka dym wierszu) oraz 24+/#4; -'; (będący szczególną postacią indeksu 70+37'). Propozycje indeksów dla bazy danych finansów zestawiono w tabeli 3.5. 68
  • 24. Projektowanie bazy danych Ostatnim atrybutem kolumny, który często wykorzystuje się w połączeniu z indeksem, jest #761A+0%4'/'06. Definicja pola zawierającego tę własność wygląda następująco: MNKGPVAKF 5/#..+06 705+)0' 016 07.. #761A+0%4'/'06 Określa ona obowiązek wprowadzania w danym polu kolejnej logicznej wartości z danej serii. Jeśli kolumna jest kolumną przechowującą wartości typu liczb całkowitych, to w trakcie dodawania do tabeli nowego rekordu w danym polu zostanie wprowadzona kolejna liczba całkowita. Wskazówki #761A+0%4'/'06 w MySQL jest odpowiednikiem sekwencji w Oracle. Indeksy stosowane w kolumnach o zmiennej długości cechuje mniejsza wydajność. Ogólnie, stosowanie pól, których długość nie jest stała, spowalnia pracę MySQL. Indeksy W trakcie tworzenia indeksów mo na im nadawać nazwy (zobacz rozdział 4. SQL). Je eli jednak nie zostaną one określone, nazwą indeksu stanie się nazwa kolumny, której dotyczy. 69
  • 25. Rozdział 3. Końcowy etap projektu Ostatnim etapem projektowania bazy danych jest zastosowanie odpowiedniej konwencji nazewnictwa. Co prawda, MySQL nie narzuca zasad nazywania baz danych, tabel czy kolumn, istnieją jednak pewne sprawdzone reguły, których nale y przestrzegać (niektóre z nich są nawet obowiązkowe): u u ywanie znaków alfanumerycznych; u ograniczenie maksymalnej długości nazw do 64 znaków (jest to wymóg MySQL); u u ywanie znaków podkreślenia (A) w celu rozdzielania wyrazów; u korzystanie tylko z małych liter (choć nie jest to rzecz obowiązkowa); u u ywanie liczby mnogiej w oznaczaniu tabel Końcowy etap projektu i pojedynczej w definiowaniu kolumn; u dołączanie KF (lub +) do nazw kolumn kluczy głównych i obcych; u umieszczanie kluczy głównych w początkowej części tabeli, a w dalszej kolejności kluczy obcych; u nazwy pól powinny mieć charakter opisowy; u nazwy pól, z wyjątkiem kluczy, powinny być unikatowe w obrębie wszystkich tabel. Zamieszczone powy ej reguły mają jedynie charakter zalecenia, ich przestrzeganie, poza koniecznością posługiwania się znakami alfanumerycznymi bez znaków spacji, nie jest zatem obowiązkowe. Część programistów preferuje u ywanie wielkich liter do rozdzielania wyrazów (zamiast znaku podkreślenia). Inni z kolei uwzględniają w nazwie kolumny jej typ. Najistotniejszym jest jednak to, by przestrzegać ustalonej konwencji. 70
  • 26. Projektowanie bazy danych Ostateczny projekt bazy danych przedstawiono w tabeli 3.6. Sposób jej utworzenia zostanie zaprezentowany w następnym rozdziale. Wskazówki Systemy Unix, w przeciwieństwie do systemów Windows, rozró niają w nazwach baz danych i tabel wielkość liter. W nazwach kolumn wielkość znaków jest zawsze rozró niana. Drobiazgowe przestrzeganie określonych zasad projektowania baz danych pozwala na ograniczenie liczby błędów, które mogą się pojawić w trakcie programowania interfejsu bazy danych, o czym będzie mowa w rozdziałach 6., 7. i 8. Końcowy etap projektu Tabela 3.6. Ostatni etap projektu polega na zastosowaniu odpowiedniej konwencji nazewnictwa Baza danych finansów Nazwa kolumny Tabela Typ kolumny faktura_id faktury 5/#..+06 705+)0' 016 07.. '(#7.6 klient_id faktury 5/#..+06 705+)0' data_faktury faktury FCVG 016 07.. wartosc_faktury faktury FGEKOCN WPUKIPGF 016 07.. opis_faktury faktury VKP[VGZV klient_id klienci UOCNNKPV WPUKIPGF 016 07.. '(#7.6 nazwa_klienta klienci XCTEJCT 016 07.. ulica_klienta klienci XCTEJCT miasto_klienta klienci XCTEJCT stan_klienta klienci EJCT kod_pocztowy_klienta klienci OGFKWOKPV WPUKIPGF telefon_klienta klienci XCTEJCT osoba_kontaktowa klienci XCTEJCT email_kontaktowy klienci XCTEJCT wydatek_id wydatki UOCNNKPV WPUKIPGF 016 07.. '(#7.6 kategoria_wydatku_id wydatki VKP[KPV WPUKIPGF wartosc_wydatku wydatki FGEKOCN WPUKIPGF 016 07.. opis_wydatku wydatki VKP[VGZV data_zaplaty wydatki FCVG kategoria_wydatku_id kategorie_wydatkow VKP[KPV WPUKIPGF kategoria_wydatku kategorie_wydatkow XCTEJCT 71