MySQL. Szybki start

26
Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: [email protected] PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ IDZ DO IDZ DO ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG KATALOG KSI¥¯EK KATALOG KSI¥¯EK TWÓJ KOSZYK TWÓJ KOSZYK CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW CENNIK ZAMÓW CENNI K CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE SPIS TRECI SPIS TRECI DODAJ DO KOSZYKA DODAJ DO KOSZYKA KATALOG ONLINE KATALOG 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. Jeli 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. Jednoczenie 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

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

Transcript of MySQL. Szybki start

Page 1: MySQL. Szybki start

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

Page 2: MySQL. Szybki start

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

Page 3: MySQL. Szybki start

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

Page 4: MySQL. Szybki start

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

Page 5: MySQL. Szybki start

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

Page 6: MySQL. Szybki start

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

Page 7: MySQL. Szybki start

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

Page 8: MySQL. Szybki start

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

Page 9: MySQL. Szybki start

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

Page 10: MySQL. Szybki start

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

Page 11: MySQL. Szybki start

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

Page 12: MySQL. Szybki start

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

Page 13: MySQL. Szybki start

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

Page 14: MySQL. Szybki start

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

Page 15: MySQL. Szybki start

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

Page 16: MySQL. Szybki start

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

Page 17: MySQL. Szybki start

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

Page 18: MySQL. Szybki start

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ść.

Page 19: MySQL. Szybki start

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

Page 20: MySQL. Szybki start

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�

Page 21: MySQL. Szybki start

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�

Page 22: MySQL. Szybki start

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

Page 23: MySQL. Szybki start

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 ���@��)

Page 24: MySQL. Szybki start

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

Page 25: MySQL. Szybki start

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

Page 26: MySQL. Szybki start

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�