Upload
wydawnictwo-helion
View
1.110
Download
7
Embed Size (px)
DESCRIPTION
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ść 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 ustępuje znacznie droższym aplikacjom komercyjnym."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ć 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 Perl, Java, czy PHP.Dzięki tej książce: * 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
Citation preview
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: [email protected]
PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£
IDZ DOIDZ DO
ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG
KATALOG KSI¥¯EKKATALOG KSI¥¯EK
TWÓJ KOSZYKTWÓJ KOSZYK
CENNIK I INFORMACJECENNIK I INFORMACJE
ZAMÓW INFORMACJEO NOWO�CIACH
ZAMÓW INFORMACJEO NOWO�CIACH
ZAMÓW CENNIKZAMÓW CENNIK
CZYTELNIACZYTELNIA
FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE
SPIS TRE�CISPIS TRE�CI
DODAJ DO KOSZYKADODAJ DO KOSZYKA
KATALOG ONLINEKATALOG ONLINE
MySQL. Szybki start
Autor: Larry Ullman
T³umaczenie: Marek Pa³czyñski
ISBN: 83-7361-040-5
Tytu³ orygina³u: MySQL VQG
Format: B5, stron: 336
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�æ
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
ustêpuje znacznie dro¿szym aplikacjom komercyjnym.
„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æ
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
Perl, Java, czy PHP.
Dziêki tej ksi¹¿ce:
• 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
Spis treści
5
Spis tre
ści
Wprowadzenie 9
Rozdział 1. Instalowanie MySQL 17Instalacja 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 31Rozpoczęcie pracy MySQL ................................................................. 32
Zatrzymywanie MySQL...................................................................... 37
Wykorzystanie mysqladmin................................................................. 40
Klient MySQL.................................................................................... 43
Użytkownicy i ich prawa..................................................................... 46
Rozdział 3. Projektowanie bazy danych 51Normalizacja...................................................................................... 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 73Tworzenie baz danych i tabel .............................................................. 74
Wprowadzanie danych ........................................................................ 78
Pobieranie danych............................................................................... 81
Wyrażenia warunkowe........................................................................ 84
Użycie LIKE i NOT LIKE .................................................................. 87
Spis treści
Spis treści
6
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 105Funkcje 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
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 167Instalacja 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 193Instalacja sterownika MySQL dla Javy .............................................. 194
Łączenie z bazą danych..................................................................... 197
Proste zapytania................................................................................ 202
Przetwarzanie wyników zapytania ..................................................... 206
Pliki własności ................................................................................. 211
Spis treści
7
Spis tre
ści
Rozdział 9. Techniki programowania baz danych 215Zapisywanie i pobieranie danych binarnych........................................ 216
Tworzenie mechanizmów wyszukiwania............................................ 225
Tworzenie stron z wynikami zapytania............................................... 232
Zabezpieczanie bazy danych.............................................................. 242
Rozdział 10. Administrowanie MySQL 247Pliki 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 271Tabele InnoDB ................................................................................. 272
Transakcje w MySQL ....................................................................... 277
Blokowanie tabel.............................................................................. 280
Przeszukiwanie typu full-text............................................................. 283
Wyrażenia regularne ......................................................................... 287
Dodatek A Rozwiązywanie problemów 289Instalacja.......................................................................................... 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 301Podstawy SQL.................................................................................. 302
Administracyjne polecenia SQL......................................................... 306
Prawa dostępu MySQL ..................................................................... 307
Typy danych MySQL........................................................................ 308
Funkcje MySQL ............................................................................... 310
Pozostałe informacje......................................................................... 313
Spis treści
8
Spis treści
Dodatek C Źródła informacji 315MySQL............................................................................................ 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
Projektowanie bazy danych
51
Projektowanie bazy danychW pracy z systemem zarządzania relacyjnąbazą danych, takim jak MySQL, pierwszymetapem procesu tworzenia i wykorzystywaniabazy polega na zdefiniowaniu jej struktury.Projektowanie bazy danych, inaczejmodelowanie danych, ma zasadniczeznaczenie dla pomyślnego i długotrwałegozarządzania informacjami. Wykorzystanieprocesu zwanego normalizacją umożliwiacałkowite wyeliminowanie redundancjioraz innego typu problemów, które mogłybynaruszyć integralność danych.
Omówione w niniejszym rozdziale technikipomogą w zapewnieniu projektowanej baziedanych realności jej wykonania, wysokiejjakości i niezawodności. Zaprezentowanyprzykład — obsługa transakcji handlowych,w tym przechowywanie faktur i zapis wydatków— będzie wykorzystywany także w kolejnychrozdziałach niniejszej książki, a przedstawionezasady normalizacji znajdują zastosowaniew każdej nowo tworzonej bazie danych.
Projektowaniebazy danych 3
Projektowanie bazy danych
Rozdział 3.
52
Tabela 3.1. Bazując na założonym sposobiewykorzystywania bazy danych opracowano listęwszystkich niezbędnych informacji, które powinnybyć w niej przechowywane
Normalizacja
Zagadnieniem normalizacji jako pierwszy zająłsię — we wczesnych latach 70. — pracowniknaukowy firmy IBM, E.F. Codd (opracował onrównież podstawy teorii relacyjnych baz danych).Relacyjna baza danych jest jedynie zbiorem danych,ułożonych w określony sposób. Dr Codd opracowałnatomiast szereg zasad, zwanych postaciami
normalnymi, które ułatwiają zdefiniowaniewspomnianego ułożenia. W niniejszym rozdzialeprzedstawiono charakterystykę trzech postacinormalnych, które zazwyczaj są wystarczającedla większości projektów baz danych.
Przed rozpoczęciem normalizowania bazydanych konieczne jest określenie przeznaczeniabudowanej aplikacji. Oznacza to, że niezbędnejest wnikliwe przeanalizowanie tego zagadnieniaz klientem lub we własnym zakresie, gdyżsposób operowania danymi determinuje procesich modelowania. Dlatego podczas lekturyniniejszego rozdziału Czytelnik powinien zamiastoprogramowania MySQL korzystać z kartkii ołówka (dla jasności, projektowanie bazy danychjest niezbędnym etapem tworzenia wszystkichrelacyjnych baz danych, nie tylko w MySQL).
Publikacje związane z bazami danych opierają sięzazwyczaj na przykładach zbiorów muzycznychczy książkowych (drugi ich rodzaj byłwykorzystywany przez Autora w innej książce:Po prostu PHP. Techniki zaawansowane, Helion2002 (PHP Advanced for the World Wide Web:Visual QuickPro Guide)). Podczas lektury niniejszejksiążki Czytelnik zapozna się ze sposobemtworzenia bazy danych typu finansowo-księgowego.Zasadniczym jej zadaniem będzie rejestrowaniefaktur i wydatków, choć może być w prostysposób zmodyfikowana, tak by przechowywaćinformacje innego rodzaju, np. dane o czasiepracy nad projektem itp. W tabeli 3.1 zestawionowstępną listę danych, jakie powinny byćgromadzone w omawianej, przykładowejbazie danych.
Wskazówki
� Jednym z najlepszych sposobówokreślenia, jakiego typu informacjepowinny być przechowywane w baziedanych, jest ustalenie rodzajówzadawanych pytań i informacji, jakiepowinny się znaleźć w odpowiedziach.
� Choć niniejszy rozdział prezentujesposób manualnego projektowania bazydanych, należy pamiętać, że istniejągotowe aplikacje, przeznaczone do tegocelu. Ich lista znajduje się w dodatku CŹródła informacji.
Norm
aliza
cja
Baza danych finansów
Pozycja Przykład
Numer faktury 1
Data wystawienia faktury 2002-04-20
Wartość faktury 30,28 USD
Opis faktury Projekt HTML
Termin płatności 2002-05-11
Informacje o kliencie Acme Industries,
100 Main Street, Anytown,
NY 11111, (800) 555-1234
Wydatek 100 USD
Kategoria wydatku i opis Opłaty za utrzymywanie
serwisu internetowego
www.DMCinsights.com
Data zapłaty 2002-01-26
Projektowanie bazy danych
53
Klucze
Klucze stanowią tę część danych, która pomagaw identyfikowaniu danego wiersza informacjiw tabeli (inną nazwą wiersza jest rekord).Istnieją dwa rodzaje kluczy, którymi będziemyoperować: klucze główne i klucze obce. Kluczgłówny jest unikatowym identyfikatorem i musispełniać określone reguły. Musi:
� zawsze posiadać jakąś wartość (nie możemieć wartości ����);
� przechowywać stałą wartość (nigdyniezmienianą);
� posiadać niepowtarzalną wartość w każdymwierszu tabeli.
Najlepszym przykładem klucza głównego,który można spotkać w życiu codziennym, jestnumer PESEL. Idea polega na tym, że każdyobywatel otrzymuje niepowtarzalny numerPESEL, który nie podlega żadnym zmianom.PESEL jest sztuczną konstrukcją, służącądo identyfikowania osób. Łatwo się możnaprzekonać, że takie sztuczne narzucenieklucza głównego każdej tabeli stanowinajefektywniejszy sposób jej projektowania.
Drugim rodzajem kluczy są klucze obce.Stanowią one reprezentację kluczy Tabeli Aw Tabeli B. Załóżmy, że dysponujemy baządanych filmów, gdzie istnieją tabele filmi reżyser. Klucz publiczny tabeli reżysermógłby wówczas być odwzorowany w tabelifilm jako klucz obcy. Idea ta stanie się łatwiejszado zrozumienia po przeanalizowaniu założeńprocesu normalizacji.
Aktualnie, oficjalnie MySQL obsługuje kluczeobce tylko w przypadku wykorzystania tabeltypu InnoDB (więcej informacji na temat typówtabel zawarto w rozdziale 11. MySQL dlazaawansowanych), w przeciwnym razie jeignoruje. Dlatego też występowanie kluczyobcych w MySQL ma raczej charakterteoretyczny a nie użytkowy, co powinno uleczmianie w kolejnych wersjach oprogramowania.
Klucze
Rozdział 3.
54
W przedstawionej postaci baza danych finansestanowi pojedynczą tabelę. Rozpoczęcieprocesu normalizacji wymaga ustaleniaprzynajmniej 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łniazałożenia klucza głównego.
W przedstawionym przykładzie jedynymidanymi, które zawsze są niepowtarzalne,posiadają wartość i ich wartość nie możebyć zmieniana, są numery faktur. Pole tozostanie oznaczone jako klucz główny(ang. primary key), do czego posłużysymbol (PK) (rysunek 3.1).
2. Jeśli nie istnieje naturalny klucz główny,należy go wymyślić.
Czasami jest konieczne utworzenie kluczagłównego, gdyż nie istnieje wśród danychpole nadające się do tego celu. Nawetw przypadku stosowania identyfikatorówPESEL czy oznaczania książek numeremISBN (ang. International StandardizedBook Number — standardowyznormalizowany numer książki),które spełniają podane kryteria, dobrymrozwiązaniem jest utworzenie dodatkowegopola, przeznaczonego jednoznaczniena klucz główny.
Wskazówki
� MySQL dopuszcza użycie tylko jednegoklucza głównego w tabeli, choć można gooprzeć na wielu kolumnach (zagadnienie towykracza tematycznie poza zakresniniejszej książki).
� MySQL osiąga największą wydajnośćw przypadku, gdy kluczem głównym jestwartość ze zbioru liczb całkowitych. Jest tokolejny powód, dla którego identyfikatoryISBN, zawierające znaki myślnika, niezbytdobrze nadają się do pełnienia funkcji kluczagłównego.
Rysunek 3.1. Pierwszy krok w procesie normalizacjibazy danych polega na określeniu klucza głównego— numeru faktury
Klucze
Projektowanie bazy danych
55
Relacje
Mówiąc o relacjach w bazie danych, mamyna myśli zależności danych jednej tabeliod danych drugiej. Relacje pomiędzy dwomatabelami mogą mieć postać jeden-do-jeden,jeden-do-wielu lub wiele-do-wielu.
Zależność typu jeden-do-jeden występujewtedy, gdy jedna i tylko jedna pozycja w tabeliA odnosi się do jednej i tylko jednej pozycjiw tabeli B (np. każdy obywatel Polski posiadajeden identyfikator PESEL, a każdy identyfikatorPESEL jest przypisany tylko do jednegoobywatela. Żaden obywatel nie może posiadaćdwóch numerów PESEL i żaden numer PESELnie może być przydzielony dwóm obywatelom).
Relacja jeden-do-wielu ma miejsce wówczas,gdy jedna i tylko jedna pozycja w tabeli Adotyczy wielu pozycji w tabeli B. Określeniekobieta lub mężczyzna odnosi się do wieluosób, ale każda z osób może być tylkomężczyzną lub kobietą. Relacja jeden-do-wielujest najczęściej spotykaną relacją pomiędzytabelami bazy danych.
W końcu, zależność wiele-do-wielu występujewtedy, gdy wiele pozycji w tabeli A możeodnosić 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ówpłytowych. Projektując bazę danych należyunikać relacji wiele-do-wielu, gdyż są oneprzyczyną powstawania redundancji danychi problemów związanych z ich integralnością.
Współzależność relacji i kluczy polega na tym,że klucz w jednej tabeli odnosi się zazwyczajdo pola danych w innej, o czym już wspominano.Zrozumienie zasad posługiwania się unikatowymiidentyfikatorami oraz relacjami pozwala naprzystąpienie do normalizowania bazy danych.
Relacje
Rozdział 3.
56
Wskazówki
� Modelowanie bazy danych opiera sięna pewnej konwencji reprezentowania jejstruktury. Zostanie ona zaprezentowanaza pomocą szeregu rysunków,zaprezentowanych w niniejszym rozdziale.Symbole wspomnianych rodzajów relacjipokazano na rysunku 3.2.
� Wynikiem procesu projektowania bazydanych jest diagram element-związek(ang. entity reletionship diagram),uwzględniający reprezentacjęobramowanych tabel i symboliprzedstawionych na rysunku 3.2.
� Słowo „relacyjny” w skrócie RDBMSpochodzi od tabel, które z technicznegopunktu widzenia nazywają się relacjami.
Rysunek 3.2. Prezentowane oznaczeniareprezentują relacje pomiędzy tabelamiw procesie modelowania bazy danych
Relacje
Projektowanie bazy danych
57
Rysunek 3.3. Zgodnie z założeniami pierwszejpostaci normalnej dwie kolumny, którenie spełniały jej kryteriów, zostały podzielonena większą liczbę pól
Pierwsza postać normalna
Pierwsza postać normalna bazy danych zakłada,że każda kolumna może zawierać tylko jednąwartość (kolumna jest wtedy czasami nazywanaatomową). Tabela, która posiada jedno poleprzeznaczone do przechowywania danychadresowych nie spełnia tego kryterium, gdyżprzechowuje w pojedynczym polu pięć różnychdanych — ulicę, miasto, województwo, kodpocztowy i czasami kraj. Podobnie, niezgodnez założeniem byłoby przechowywanie w jednympolu imienia i nazwiska osoby (choć niektórzymogliby twierdzić, że imię i nazwisko stanowiącałość, będąc elementem niepodzielnym).
W ramach prowadzonego procesu normalizacjizostanie dokonane sprawdzenie istniejącejstruktury pod kątem zgodności z pierwsząpostacią normalną.
Aby uczynić bazę danych zgodnąz pierwszą postacią normalną:
1. Wyszukuj pola, które zawierają więcej niżjedną informację.
Analizując tabelę 3.1 można zauważyć,że z kryteriami pierwszej postaci normalnejnie są zgodne dwie kolumny: Informacjeo kliencie oraz Kategoria wydatku i opis.Pola dotyczące dat zawierają, co prawda,informacje o dniu, miesiącu i roku, jednakich dalsze rozdzielanie nie byłobyuzasadnione.
2. Dokonaj podziału pól wybranychw pierwszym kroku (rysunek 3.3).
Rozwiązanie problemu polega na wydzieleniuz Informacji o kliencie pól: Nazwisko klienta,Ulica klienta, Stan klienta, Kod pocztowyklienta i Telefon klienta, a następniez Kategorii wydatków i opisu pól:Kategoria wydatku, Opis wydatku.
3. Upewnij się, że wszystkie utworzonew kroku 2. pola spełniają kryteriapierwszej postaci normalnej.
Pierwsza
posta
ć normalna
Rozdział 3.
58
Druga postać normalna
Baza danych ma drugą postać normalną, jeżeli spełniazałożenia pierwszej postaci normalnej (normalizacjaprzebiega stopniowo), a każda kolumna w tabeli, któranie jest kluczem, pozostaje w relacji tylko z kluczemgłównym. Najbardziej oczywisty wniosek, jaki płyniez powyższego założenia jest taki, że baza danychnie ma drugiej postaci normalnej, jeżeli kilka rekordówtabeli posiada dokładnie taką samą wartość w danejkolumnie. Przykładowo, zamieszczenie listyproducentów muzycznych wraz z nazwami ichalbumów, spowodowałoby występowanie tych samychwartoś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łytylko do jednej faktury (klient może dokonać kilkutransakcji). Po drugie, informacje o wydatkach niewiążą się z fakturami.
Przekształcenie bazy danych do drugiej postacinormalnej wymaga przeniesienia wymienionych kolumndo oddzielnych tabel, gdzie każda z wartości będziezamieszczona tylko raz. W rzeczywistości normalizacjamoże być rozumiana jako proces tworzenia corazwiększej liczby tabel, aż do momentu usunięciawszystkich możliwych redundancji danych.
Aby uczynić bazę danychzgodną z drugą postacią normalną:
1. Wyszukaj wszystkie pola, które nie zależąbezpośrednio od klucza głównego.
Jak już wspomniano, informacjami, którenie 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 modyfikacjiistniejącej struktury będzie utworzenie oddzielnychtabel Klienci, Faktury i Wydatki. Zgodnie z przyjętymiw książce regułami wizualizacji, reprezentacja bazydanych składa się z obramowanych tabel. W każdymbloku tabeli znajduje się nagłówek, który zawiera nazwętabeli oraz cześć składającą się z nazw wszystkichkolumn.
Rysunek 3.4. Normalizacja bazydanych wymaga przeniesienia informacjinadmiarowych — takich jak daneklienta i informacje o wydatkach— do oddzielnych tabel
Dru
ga postać norm
alna
Projektowanie bazy danych
59
Rysunek 3.5. Każda tabela bazy danychpowinna posiadać własny klucz główny,niezależnie od tego, czy jest to polenadmiarowe — jak Klient ID — czy poleznaczące — jak Numer faktury
Rysunek 3.6. Wchodzące w skład tabeliWydatki pole Kategoria wydatku powinnozostać wydzielone w postaci odrębnej tabeli
Rysunek 3.7. Nowym kluczom głównymzostały przypisane odpowiednie kluczeobce (FK — ang. foreign key) orazokreślony został charakter relacji(w obu przypadkach jeden-do-wielu)
3. Przydziel lub utwórz nowe klucze główne(rysunek 3.5).
Do zapewnienia, że wszystkie nowo utworzonetabele posiadają klucz główny, służy technikaopisana w wcześniejszej części tego rozdziału.Z uwagi na fakt, że zarówno tabela Klienci, jaki Wydatki nie posiada właściwego, unikatowegoidentyfikatora, konieczne było sztuczne jegoutworzenie — Klient ID oraz Wydatek ID. Nazwaklienta byłaby być może niepowtarzalną wartością,a tym samym mogłaby być kluczem głównym,niemniej korzystniej jest zawsze posłużyć się w tymcelu wartościami ze zbioru liczb całkowitych.
4. Powtórz kroki 1 – 3.
Z uwagi na fakt, że zostały utworzone nowe tabelez nowymi kluczami, należy się upewnić, że w efekciewykonania tej operacji powstała baza zgodnaz drugą postacią normalną. W prezentowanymprzykładzie (rysunek 3.5) pozostaje jeden istotnyproblem — pole Kategoria wydatku może sięodnosić do wielu rodzajów wydatków. Dlategoteż zostanie utworzona nowa tabela o nazwieKategorie wydatków (rysunek 3.6).
5. Utwórz niezbędne klucze obce, które określąwłaściwe relacje (rysunek 3.7).
Ostatnim krokiem na drodze do uzyskania zgodnościz drugą postacią normalną jest uwzględnieniekluczy obcych i relacji, które będą określały sposóbwzajemnego powiązania danych i tabel. Należypamiętać, że klucz główny jednej tabeli stanowiz reguły klucz obcy innej tabeli. Jeżeli okaże się,że klucz główny danej tabeli nie funkcjonuje jakoklucz obcy w innej, prawdopodobnie coś zostałopominięte (choć nie zawsze jest to prawdą).
Wskazówka
� Innym sposobem sprawdzenia zgodności z drugąpostacią normalną jest przeanalizowanie relacjipomiędzy tabelami. Najlepszym rozwiązaniemjest utworzenie zależności typu jeden-do-wielu.Tablice, w których występują relacje wiele-do-wieluprawdopodobnie wymagają przekształcenia.
Druga posta
ć normalna
Rozdział 3.
60
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 kolumnniebędących kluczami. Innymi słowy,wszystkie pola tabeli, które nie są kluczami,powinny być wzajemnie niezależne.
W przypadku poprawnego zrealizowania dwóchpierwszych kroków normalizacyjnych może sięokazać, że wprowadzanie zmian na tym etapienie będzie konieczne. Z drugiej strony, jeżeliw ramach wspomnianych działań zostałodokonanych wiele zmian, krok ten dostarczamożliwości ostatecznego sprawdzeniaprojektu. Załóżmy przykładowo, że do każdejfaktury przypisywane jest nazwisko osobyodpowiedzialnej za kontakt oraz adres jejpoczty elektronicznej (rysunek 3.8). Rzeczw tym, że wspomniane informacje odnoszą siędo klienta, a nie do faktury, tym samym bazadanych nie spełnia kryteriów trzeciej postacinormalnej. Prawidłowe rozwiązanie polega nadodaniu tych pól do tabeli Klienci (rysunek 3.9).
Rysunek 3.8. Modyfikowanie struktury bazydanych może wprowadzać nieco zmieszaniado projektu, który przestaje spełniać kryterianormalizacji ze względu na pola: osobakontaktowa i adres e-mail
Rysunek 3.9. Prawidłowe umiejscowieniedanych z pól: osoba kontaktowa i adres e-mailwymaga przeniesienia ich do tabeli Klienci
Trze
cia postać norm
alna
Projektowanie bazy danych
61
Wskazówki
� Po zakończeniu szkicowania bazy danychna kartce dobrym pomysłem jestprzeniesienie go do arkusza kalkulacyjnego,który odwzoruje powstały projekt (możnateż posłużyć się specjalnie utworzonymdo tego celu narzędziem). Taki dokumentmógłby służyć jako dobre źródło informacjidla projektantów witryny internetowej,a także jako dokument przekazywanyklientowi po zakończeniu projektu.
� Normalizacja stanie się jeszcze czynnościąo jeszcze większym znaczeniu z chwilą,gdy MySQL zacznie wymuszać stosowaniekluczy obcych (w wersjach 4.1 i późniejszych).
Zaniechanie normalizacji
Mimo iż zapewnienie, że baza danych spełnia kryteria trzeciej postaci normalnej zapewniajej 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ę bazydanych. 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. Normalizacjaoznacza wybranie większego poziomu integralności danych i skalowalności kosztem prostotyi szybkości działania. Z drugiej strony, istnieje wiele sposobów poprawienia wydajności bazdanych, podczas gdy metod przeciwdziałania utracie danych, wynikającej z zastosowaniawadliwego projektu, jest niewiele.
Trzecia posta
ć normalna
Rozdział 3.
62
Typy danych MySQL
Po zdefiniowaniu wszystkich wymaganych tabeli kolumn konieczne jest określenie typu danychprzechowywanych w każdym z pól. Podczas tworzeniabazy danych (co zostanie przedstawione w następnymrozdziale) będzie wymagane określenie rodzajuinformacji, które będą przechowywane w każdymz pól. Niemal każda baza danych opiera się na trzechich kategoriach:
� tekst;
� liczby;
� 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ściwywybór typu dla danej kolumny wpływa nie tylkona rodzaj informacji, jakie mogą być w niej gromadzoneoraz 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 zestawionaw tabeli 3.2. Zamieszczono tam także informacjeo rozmiarze oraz krótki opis każdego z nich.
Wiele typów pozwala na określenie opcjonalnegoatrybutu ����� (nawiasy kwadratowe — ��— oznaczają, że pomiędzy nimi można wstawićparametr opcjonalny, tymczasem nawiasy okrągłeodpowiadają argumentom obowiązkowym). Typyliczbowe mogą być definiowane jako �� ����� — coogranicza wartości kolumny do liczb dodatnich i zera— lub ��������, co oznacza, że wolne miejsce zostaniewypełnione zerami (typy �������� są jednocześnietypami �� �����). Z kolei z poszczególnymi typamidat są związane różne sposoby ich wykorzystania.Opis zagadnienia znajduje się w podręcznikudostępnym pod adresem www.mysql.com/doc/D/A/DATETIME.html. Zazwyczaj jednak są stosowanepodstawowe pola typu ���� i ����, nie ma więcpotrzeby analizowania ich zawiłości. Omówieniawymagają także dwa rozszerzenia typu ���� — ����i ��. Oba pozwalają na zdefiniowanie w trakcietworzenia tabeli serii akceptowalnych wartości.
Typy danych
MySQ
L
Projektowanie bazy danych
63
Pole typu ���� może zawierać tylko jednąz kilku tysięcy możliwych wartości, podczasgdy pole �� może się składać z kilku wartości,przy czym ich liczba nie może przekraczać 64.Z typami ���� i �� wiążą się dwa problemy— nie są one obsługiwane przez inne bazydanych, a ich użycie jest niezgodne z zasadaminormalizacji.
Tabela 3.2. Większość typów kolumn dostępnych w bazach danych MySQL
Typy danych MySQL
Typy danych MySQL
Typ Rozmiar Opis
���������� Liczba bajtów Pole o stałej długości; długość: 0 – 255 znaków.
�������������� Długość ciągu + 1 bajt Pole o stałej długości; długość: 0 – 255 znaków.
�������� Długość ciągu + 1 bajt Ciąg tekstowy o maksymalnej długości 255 znaków.
���� Długość ciągu + 2 bajty Ciąg tekstowy o maksymalnej długości 65.536 znaków.
���������� Długość ciągu + 3 bajty Ciąg tekstowy o maksymalnej długości 16.777.215 znaków.
�������� Długość ciągu + 4 bajty Ciąg tekstowy o maksymalnej długości 4.294.967.295 znaków.
������������� 1 bajt Liczba z zakresu od –128 do 128 lub 0 do 255 jeżeli
jest typu ��������.
�������������� 2 bajty Liczba z zakresu od –32768 do 32768 lub 0 do 65535
jeżeli jest typu ��������.
��������������� 3 bajty Liczba z zakresu od –8.388.608 do 8.388.607
lub 0 do 16.777.215 jeżeli jest typu ��������.
��������� 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 ��������.
������������ 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 ��������.
����� 4 bajty Mała wartość zmiennoprzecinkowa.
������������� !"#$% 8 bajtów Duża wartość zmiennoprzecinkowa.
�������������� !"#$% Długość + 1
lub Długość + 2 bajty
Wartość typu ������ zapisana jako ciąg tekstowy, dla
którego możliwe jest ustalenie liczby pozycji po przecinku.
���� 3 bajty Data w formacie: RRRR-MM-DD.
�������� 8 bajtów Data i czas w formacie: RRRR-MM-DD GG:MM:SS.
�������� 4 bajty Znacznik czasowy w formacie: GG:MM:SS.
���� 3 bajty Znacznik czasowy w formacie GG:MM:SS.
���� 1 lub 2 bajty Wyliczenie, które pozwala na to, by każda kolumna
posiadała jedną z kilku możliwych wartości.
��� 1,2,3,4 lub 8 bajtów Typ podobny do ���� z tą różnicą, że może posiadaćwięcej niż jedną dopuszczalną wartość.
Rozdział 3.
64
Aby wybrać typ danych:
1. Określ czy kolumna będzie przechowywała danetekstowe, liczbowe czy też daty.
Zazwyczaj jest to prosty i oczywisty etap.Do przechowywania wartości liczbowych, takichjak kody pocztowe czy sumy pieniężne, które będąprzechowywane wraz z dodatkowymi znakami(jak znak myślnika czy oznaczenie waluty), używa siępól tekstowych, choć zapisanie ich jako wartościliczbowych daje lepsze rezultaty. Problem formatowaniamoże być rozwiązywany w innymi miejscu.
2. Wybierz dla danej kolumny odpowiedni typ z danejkategorii.
Mając na uwadze wysoką wydajność bazy danych,warto pamiętać, że:
� pola o stałej długości (jak ����) są zazwyczajszybciej przetwarzane niż pola o zmiennej długości(jak �������), choć z drugiej strony zajmują więcejprzestrzeni dyskowej. Więcej informacji na tentemat zamieszczono we wskazówce;
� rozmiar każdego z pól powinien być ograniczonydo najmniejszej możliwej wartości, którą możnawyznaczyć określając największą możliwą wartośćwprowadzaną do danego pola. Przykładowo, jeżelinajwiększa wartość pola Klient ID będzie rzędusetek, to dla danej kolumny powinno się wybraćtrzycyfrowy typ ������� bez znaku (�� �����)— pozwoli on na wprowadzenie wartości od 0 do 999.
Należy pamiętać, że wprowadzenie pięcioznakowegociągu tekstowego do pola typu ������� spowodujeobcięcie trzech ostatnich znaków. Ta prawidłowośćznajduje zastosowanie we wszystkich typacho określonej długości (����, �������, ��� itp.).
3. Ustal maksymalną długość kolumn tekstowychlub liczbowych oraz dołącz, jeśli to konieczne,inne atrybuty (jak np. �� �����) (tabela 3.3).
Zamiast rozpisywania się o sposobach i przyczynachtakiego, a nie innego zdefiniowania wszystkich 21przykładowych kolumn, wszystkie ich własnościzestawiono w tabeli 3.3. Niektórzy programiścimogą mieć odmienne propozycje. Najistotniejszejest jednak, aby dostosować każdy typ do rozmiarówprzechowywanych informacji, zamiast korzystać zawszez podstawowych (nieefektywnych) typów ���� i ���.
CHAR a VARCHAR
Co do przewagi któregokolwiekz tych dwóch podobnychdo siebie typów wciąż trwajądyskusje. Oba przechowująciągi tekstowe i mogą byćdefiniowane z podaniemmaksymalnej jego długości.Podstawowa różnica polegana tym, że jakiekolwiek dane
zapisane jako ���� zawszebędą zapisywane jako ciągtekstowy o długości określonejdla danej kolumny (wypełnienieznakami spacji). Z koleidługość ciągów tekstowych
typu ������� jest równadługości przechowywanegociągu danych.
Wynika z tego, że:
� kolumny ������� zajmująmniej miejsca na dysku;
� kolumny ���� sąprzetwarzane szybciej
niż �������, o ile nie sąstosowane typy tabelInnoDB (więcej informacjina ten temat zamieszczonow rozdziale 11. MySQLdla zaawansowanych).
Trzeba przyznać, żew większości przypadkówróżnica w wielkościzajmowanego miejscana dysku oraz w szybkościpomiędzy oboma typamijest niezauważalna, przez corozważanie tego problemu niema szczególnego znaczenia.
Istnieje jeszcze jedna, mniejistotna różnica pomiędzyomawianymi typami danych— MySQL usuwa nadmiarowe
znaki spacji z kolumn ����podczas pobierania danych
a z kolumn ������� podczasich wstawiania.
Typy danych
MySQ
L
Projektowanie bazy danych
65
Wskazówki
� Wiele z nazw typów posiada synonimy,np. ��� — �������, ��� — ������� itd.
� Pole typu ���� ���� jest uaktualnianeautomatycznie podczas wykonywaniapolecenia �� ��� czy ������, nawet jeżelidla danego pola nie określono żadnejwartości. W przypadku, gdy tabela zawierawięcej pól typu ���� ����, podczasrealizacji polecenia �� ��� lub ������uaktualniane jest tylko pierwsze z nich.
� Dostępny jest również typ �� , będącyodmianą typu ����, który pozwala naprzechowywanie w tabeli plików binarnych.Przykład użycia zostanie zaprezentowanyw rozdziale 9. Techniki programowaniabaz danych.
Tabela 3.3. Dobór optymalnego typu danychdla każdego z pól jest często zaniedbywaną czynnością
Typy danych MySQL
Baza danych finansów
Nazwa kolumny Tabela Typ kolumny
Numer faktury Faktury ���������&�'��������
Klient ID Faktury ���������(�'��������
Data wystawienia faktury Faktury )*+%
Wartość faktury Faktury )%#,-*.�/0�1�'�23,2%)
Opis faktury Faktury +,2"+%4+
Klient ID Klienci 3-*..,2+�(�'�23,2%)
Nazwa klienta Klienci 5*6#7*6�&0�
Ulica klienta Klienci 5*6#7*6�80�
Miasto klienta Klienci 5*6#7*6�(0�
Stan klienta Klienci �����1�
Kod pocztowy klienta Klienci -%),�-,2+�9�'�23,2%)
Telefon klienta Klienci 5*6#7*6�/&�
Osoba kontaktowa Klienci 5*6#7*6�&0�
Adres e-mail kontaktowy Klienci 5*6#7*6�:0�
Wydatek ID Wydatki 3-*..,2+�&�'�23,2%)
Kategoria wydatku ID Wydatki +,2",2+�(�'�23,2%)
Wartość wydatku Wydatki )%#,-*.�/0�1�'�23,2%)
Opis wydatku Wydatki +,2"+%4+
Data zapłaty Wydatki )*+%
Kategoria wydatku ID Kategorie wydatków +,2",2+�(�'�23,2%)
Kategoria wydatku Kategorie wydatków 5*6#7*6�(0�
Rozdział 3.
66
Wartości domyślne i NULL
Zgodnie z przedstawionymi wcześniej informacjami, definiując typydanych jest możliwe dołączanie atrybutów, takich jak �� ����� czy��������. Istnieją jeszcze dwie wartości, z których jedna informuje,czy w kolumnie dopuszcza się wartości ����, a druga wskazujedomyślną wartość danego pola.
W przypadku programowania lub tworzenia bazy danych użycie ����jest jednoznaczne z poinformowaniem, że dane pole nie przechowujeżadnej wartości (lub wartość jest nieznana). Rozwiązaniem idealnymbyłoby oczywiście przypisanie każdemu rekordowi bazy danych pewnejkonkretnej wartości. W rzeczywistości jednak takie sytuacje zdarzająsię rzadko. Dołączając do deklaracji typu ciąg ���!���� możliwejest wymuszenie takiego ograniczenia na danym polu. Przykładowo,deklaracja klucza głównego mogłaby wyglądać następująco:
;.,%2+<,)'���������(�'��������'���'����
Tabela 3.4. W wyniku dalszych prac nad projektem bazy danychniektóre kolumny zostały uzupełnione o wartości NOT NULL i DEFAULT
Wartości domyślne i N
ULL
Baza danych finansów
Nazwa kolumny Tabela Typ kolumny
Numer faktury Faktury ���������&�'��������'���'����'�������'0
Klient ID Faktury ���������(�'��������
Data wystawienia faktury Faktury )*+%'���'����
Wartość faktury Faktury )%#,-*.�/0�1�'�23,2%)'���'����
Opis faktury Faktury +,2"+%4+
Klient ID Klienci 3-*..,2+�(�'�23,2%)'���'����'�������'0
Nazwa klienta Klienci 5*6#7*6�&0�'���'����
Ulica klienta Klienci 5*6#7*6�80�
Miasto klienta Klienci 5*6#7*6�(0�
Stan klienta Klienci #7*6�1�
Kod pocztowy klienta Klienci -%),�-,2+�9�'�23,2%)
Telefon klienta Klienci 5*6#7*6�/&�
Osoba kontaktowa Klienci 5*6#7*6�&0�
Adres e-mail kontaktowy Klienci 5*6#7*6�:0�
Wydatek ID Wydatki 3-*..,2+�&�'�23,2%)'���'����'�������'0
Kategoria wydatku ID Wydatki +,2",2+�(�'�23,2%)
Wartość wydatku Wydatki )%#,-*.�/0�1�'�23,2%)'���'����
Opis wydatku Wydatki +,2"+%4+
Data zapłaty Wydatki )*+%
Kategoria wydatku ID Kategorie wydatków +,2",2+�(�'�23,2%)
Kategoria wydatku Kategorie wydatków 5*6#7*6�(0�
Projektowanie bazy danych
67
Podczas budowania tabeli możliwe jesttakże przypisywanie wartości domyślnych.W sytuacjach, gdy duża część rekordówposiadać będzie tę samą zawartość, wcześniejszeustalenie wartości domyślnych pozwoli nawyeliminowanie konieczności wprowadzaniapewnych danych w trakcie uzupełniania bazydanych, o ile oczywiście nie odbiegają one odwartości standardowych. Przykładem może być:
=.%#'�����>�>�>?>�'�������'>?>
Obie techniki zostały uwzględnione w tabeli 3.4.
Wskazówki
� Zgodnie ze sztuką projektowania bazydanych oraz zasadami funkcjonowaniaMySQL klucze główne nie mogą zawieraćwartości ����.
� Jeżeli kolumna ���� zostanie określona jako���!����, wówczas pierwsza dopuszczalnawartość stanie się wartością domyślną.
� Istotnym jest, aby mieć świadomość, że ����nie jest wartością równoznaczną z zerem,pustym ciągiem ("") czy znakiem spacji ("!").
Wartości d
omyślne i N
ULL
Rozdział 3.
68
Indeksy
Indeksy składają się na szczególny system,wykorzystywany do poprawienia całościowejwydajności bazy danych. Ustalając indeksyw ramach tabeli wskazuje się kolumny,które są w danej tabeli ważniejsze od innychkolumn tej samej tabeli (definicja dla laików).W rzeczywistości, do przechowywaniaindeksów i efektywnego nimi zarządzaniaMySQL tworzy oddzielne pliki.
MySQL pozwala na utworzenie maksymalnie32 indeksów dla jednej tabeli, a każdy z nichmoże obejmować do 16 kolumn. Wykorzystanieindeksów wielokolumnowych nie musi sięwydawać takie oczywiste, jednak stają sięużyteczne w przypadku częstego przeszukiwaniagrupy tych samych kolumn (np. zawierającychdane na temat imienia, nazwiska, miastai województwa).
Z drugiej strony, w stosowaniu indeksówwskazany jest umiar. Zwiększają one coprawda szybkość odczytu danych z bazy, alespowalniają proces ich modyfikacji (z uwagi nafakt, że zmiany muszą być odwzorowane takżew indeksach). Najlepszym zastosowaniem dlaindeksów jest użycie ich w kolumnach, które:
� są często wykorzystywane w części #����zapytań;
� są często wykorzystywane w części �����! $zapytań;
� 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 kluczagłównego jest indeksowana automatycznieprzez MySQL.
W MySQL wyróżnia się trzy typy indeksów:�����,!���%�� (narzucający koniecznośćwprowadzania unikatowej wartości w każdymwierszu) oraz ������$!&�$ (będący szczególnąpostacią indeksu ���%��). Propozycje indeksówdla bazy danych finansów zestawiono w tabeli 3.5.
Tabela 3.5. W celu zwiększenia wydajnościbaza danych została wzbogacona o kilka(choć nie jest ich zbyt wiele) indeksów,które pozwolą jej na efektywniejsze pobieranieprzechowywanych informacji
Indeksy
Indeksy bazy danych finansów
Kolumna Typ indeksu
Numer faktury ������'?��
Klient ID ������'?��
Wydatek ID ������'?��
Kategoria wydatku ID ������'?��
Data wystawienia faktury �����
Nazwa klienta ����� (lub ���@��)
Projektowanie bazy danych
69
Ostatnim atrybutem kolumny, który częstowykorzystuje się w połączeniu z indeksem,jest ����'���������. Definicja pola zawierającegotę własność wygląda następująco:
;.,%2+<,)'���������(�'��������'���'��������<���������
Określa ona obowiązek wprowadzania w danympolu kolejnej logicznej wartości z danej serii.Jeśli kolumna jest kolumną przechowującąwartości typu liczb całkowitych, to w trakciedodawania do tabeli nowego rekordu w danympolu zostanie wprowadzona kolejna liczbacałkowita.
Wskazówki
� ����'��������� w MySQL jestodpowiednikiem sekwencji w Oracle.
� Indeksy stosowane w kolumnach o zmiennejdługości cechuje mniejsza wydajność.Ogólnie, stosowanie pól, których długośćnie jest stała, spowalnia pracę MySQL.
� W trakcie tworzenia indeksów można imnadawać nazwy (zobacz rozdział 4. SQL).Jeżeli jednak nie zostaną one określone,nazwą indeksu stanie się nazwa kolumny,której dotyczy.
Indeksy
Rozdział 3.
70
Końcowy etap projektu
Ostatnim etapem projektowania bazy danychjest zastosowanie odpowiedniej konwencjinazewnictwa. Co prawda, MySQL nie narzucazasad 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żywanie znaków alfanumerycznych;
� ograniczenie maksymalnej długości nazwdo 64 znaków (jest to wymóg MySQL);
� używanie znaków podkreślenia (') w celurozdzielania wyrazów;
� korzystanie tylko z małych liter(choć nie jest to rzecz obowiązkowa);
� używanie liczby mnogiej w oznaczaniu tabeli pojedynczej w definiowaniu kolumn;
� dołączanie () (lub ��) do nazw kolumnkluczy głównych i obcych;
� umieszczanie kluczy głównychw początkowej części tabeli,a w dalszej kolejności kluczy obcych;
� nazwy pól powinny mieć charakter opisowy;
� nazwy pól, z wyjątkiem kluczy, powinnybyć unikatowe w obrębie wszystkich tabel.
Zamieszczone powyżej reguły mają jedyniecharakter zalecenia, ich przestrzeganie,poza koniecznością posługiwania się znakamialfanumerycznymi bez znaków spacji, nie jestzatem obowiązkowe. Część programistówpreferuje używanie wielkich liter do rozdzielaniawyrazów (zamiast znaku podkreślenia). Inniz kolei uwzględniają w nazwie kolumny jej typ.Najistotniejszym jest jednak to, by przestrzegaćustalonej konwencji.
Końco
wy eta
p pro
jektu
Projektowanie bazy danych
71
Ostateczny projekt bazy danych przedstawionow tabeli 3.6. Sposób jej utworzenia zostaniezaprezentowany w następnym rozdziale.
Wskazówki
� Systemy Unix, w przeciwieństwiedo 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ślonychzasad projektowania baz danych pozwalana ograniczenie liczby błędów, które mogąsię pojawić w trakcie programowaniainterfejsu bazy danych, o czym będziemowa w rozdziałach 6., 7. i 8.
Tabela 3.6. Ostatni etap projektu polega na zastosowaniu odpowiedniej konwencji nazewnictwa
Końcowy etap projektu
Baza danych finansów
Nazwa kolumny Tabela Typ kolumny
faktura_id faktury ���������&�'��������'���'����'�������'0
klient_id faktury ���������(�'��������
data_faktury faktury )*+%'���'����
wartosc_faktury faktury )%#,-*.�/0�1�'�23,2%)'���'����
opis_faktury faktury +,2"+%4+
klient_id klienci 3-*..,2+�(�'�23,2%)'���'����'�������'0
nazwa_klienta klienci 5*6#7*6�&0�'���'����
ulica_klienta klienci 5*6#7*6�80�
miasto_klienta klienci 5*6#7*6�(0�
stan_klienta klienci #7*6�1�
kod_pocztowy_klienta klienci -%),�-,2+�9�'�23,2%)
telefon_klienta klienci 5*6#7*6�/&�
osoba_kontaktowa klienci 5*6#7*6�&0�
email_kontaktowy klienci 5*6#7*6�:0�
wydatek_id wydatki 3-*..,2+�&�'�23,2%)'���'����'�������'0
kategoria_wydatku_id wydatki +,2",2+�(�'�23,2%)
wartosc_wydatku wydatki )%#,-*.�/0�1�'�23,2%)'���'����
opis_wydatku wydatki +,2"+%4+
data_zaplaty wydatki )*+%
kategoria_wydatku_id kategorie_wydatkow +,2",2+�(�'�23,2%)
kategoria_wydatku kategorie_wydatkow 5*6#7*6�(0�