You are on page 1of 54

Id do

Spis treci
Przykadowy rozdzia
Katalog ksiek
Katalog online
Zamw drukowany
katalog
Twj koszyk
Dodaj do koszyka
Cennik i informacje
Zamw informacje
o nowociach
Zamw cennik
Czytelnia
Fragmenty ksiek
online

Kontakt
Helion SA
ul. Kociuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
Helion 19912010

SQL. Rusz
gow!
Autor: Lynn Beighley
Tumaczenie: Piotr Rajca
ISBN: 978-83-246-2828-5
Tytu oryginau: Head First SQL: Your Brain on SQL A Learner
Format: 200230, stron: 592
Teraz i Ty moesz doczy do grona osb znajcych SQL.
Wystarczy, e signiesz po nasz bestseller
Co w nim znajdziesz? Wszystko co najlepsze w serii Rusz gow! Konkretna wiedza,
duo humoru oraz wszystko wyjaniajce rysunki. Na sam pocztek dowiesz si co
to jest jzyk SQL oraz stworzysz swoj pierwsz baz danych (polecenie CREATE).
W kolejnych rozdziaach nauczysz si uzupenia te bazy danymi, usuwa je oraz
modyfikowa (polecenia INSERT, UPDATE oraz DELETE). Jak ju przebrniesz przez
podstawy, zabierzesz si za to co bazodanowcy lubi najbardziej - indeksy, klucze,
zczenia oraz podzapytania. Na sam koniec sprawdzisz jak zagwarantowa swojej
bazie bezpieczestwo oraz wykrzesa z niej jeszcze wicej moliwoci. Brzmi
skomplikowanie? Nie martw si, jeste w dobrych rkach! A wic
Naprzd, gowo!
Nikt ci tego nie potrafi wytumaczy? Nie potrzebujesz elektrowstrzsw, eby
pobudzi swj mzg do aktywnego dziaania. Tylko adnych gwatownych gestw!
Usid wygodnie, otwrz ksik, dopiero teraz si zacznie. Na pocztek rusz gow!
Precz z nudnymi wykadami i zakuwaniem bez zrozumienia!
Nauka to znacznie wicej ni tylko czytanie suchego tekstu. Twj mzg jest niczym
godny rekin, cay czas prcy naprzd w poszukiwaniu nowej, apetycznej przekski.
Jak karmimy Twj wygodniay umys?
Uywamy rysunkw, bo obraz wart jest 1024 sw. Stosujemy powtrzenia, by zakodowa
na stae dane w Twojej chonnej gowie. Oddziaujemy na emocje, jestemy nieprzewidywalni,
zaskakujcy i zabawni. Cay czas pobudzamy Twj umys do aktywnego dziaania,
zmuszamy go do posuszestwa a za cik prac nagrodzimy go smakowitym
ciasteczkiem w postaci wiedzy wisienka gratis!
Rozgry to sam!
Tworzenie bazy danych i tabel (CREATE)
Pobieranie danych (SELECT)
Usuwanie (DELETE) i aktualizowanie danych (UPDATE)
Wykorzystywanie kluczy i indeksw
Sortowanie danych
Operacje na danych sumy, rednie, elementy maksymalne i minimalne
Pobieranie unikalnych danych
Sposb pobierania okrelonej liczby wierszy
Stosowanie podzapyta
Zapewnianie spjnoci danych
Ograniczanie dostpu do zgromadzonych danych
Zapewnianie bezpieczestwa bazie danych

Spis treci

Spis treci (skrcony)


Wprowadzenie

25

Dane i tabele: Na wszystko znajdzie si odpowiednie miejsce

37

Polecenie SELECT: Pobieranie podarowanych danych

87

DELETE i UPDATE: S szanse, e wszystko bdzie w porzdku

153

Projektowanie dobrych tabel: Po co by normalnym?

193

Polecenie ALTER: Korygowanie przeszoci

231

Zaawansowane zastosowanie polecenia SELECT: Nowy sposb spojrzenia na dane

267

Projektowanie baz danych skadajcych si z wielu tabel:


Wyrastamy z naszych starych tabel

311

Zczenia i operacje na wielu tabelach: Czy nie moemy si wszyscy dogada?

373

Podzapytania: Zapytania w zapytaniach

409

10

Zczenia zewntrzne, zczenia zwrotne oraz unie: Nowe manewry

447

11

Ograniczenia, widoki i transakcje: Zbyt wielu kucharzy psuje baz danych

483

12

Bezpieczestwo: Zabezpieczanie swych dbr

521

Dodatek A Pozostaoci

551

Dodatek B Instalacja MySQL-a

569

Dodatek C Przypomnienie narzdzi

575

Skorowidz

583

Spis treci (z prawdziwego zdarzenia)


Wprowadzenie
Twj mzg myli o SQL-u. Czytajc ksik, Ty starasz si czego nauczy, natomiast Twj mzg

wywiadcza Ci przysug, dbajc o to, by te informacje nie zostay zbyt dugo w Twej gowie. Twj mzg
myli sobie: Lepiej zostawi miejsce na jakie wane rzeczy, takie jak: ktrych dzikich zwierzt naley unika
albo czy jedenie nago na snowboardzie jest dobrym pomysem, czy nie. Zatem w jaki sposb moesz
przekona swj mzg, by uzna, e poznanie SQL-a to dla Ciebie kwestia ycia lub mierci?
Dla kogo jest ta ksika

26

Wiemy, co sobie mylisz

27

Metapoznanie: myslenie o myleniu

29

Oto co moesz zrobi, aby zmusi swj mzg do posuszestwa

31

Przeczytaj to

32

Nasi wspaniali recenzenci

34

Podzikowania

35

Spis treci

Dane i tabele

Na wszystko znajdzie si odpowiednie miejsce


Czy take i Ty nie cierpisz gubienia czegokolwiek? Niezalenie od tego, czy s to kluczyki
do samochodu, bon uprawniajcy do zakupu mieszkania z 25-procentow znik, dane uywanej
aplikacji, nie ma nic gorszego ni niemono sprostania wasnym potrzebom wtedy gdy tego
najbardziej potrzebujemy. A jeli chodzi o uywane aplikacje, to trzeba wiedzie, e nie ma lepszego
miejsca na przechowywanie wanych informacji ni tabele. A zatem przewr kartk i zacznij, krok
za krokiem, poznawa wiat relacyjnych baz danych.

Twoja baza danych widziana


przez rentgenowskie okulary
Wyobra sobie baz
danych jako pojemnik
zawierajcy informacje

Tabela.

kolumna1

kolumna2

dane

kolumna3

dane

dane

dane

dane

dane

kolumna4

kolumna5

dane

kolumna6

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

To s kolumny.

Jeszcze
la.
inna tabe

kolumna1

kolumna2

kolumna3

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

A to s
wiersze.

kolumna1
dane
dane
dane
dane

kolumna4
dane
dane
dane
dane

kolumna2
dane
dane
dane

dane
dane

kolumna2
dane
dane

dane

dane

dane

dane

kolumna3
dane
dane
dane
dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

dane

Jeszcze inna tabela.

10

kolumna1

I kolejna tabela.

Definiowanie danych

38

Przeanalizuj swoje dane pod wzgldem kategorii

43

Co znajduje si w bazie danych?

44

Twoja baza danych widziana przez rentgenowskie okulary

46

Bazy danych zawieraj powizane ze sob informacje

48

Tabele w zblieniu

49

Przejmij kontrol!

53

Tworzenie tabeli: Polecenie CREATE TABLE

55

Tworzenie bardziej zoonych tabel

56

Przekonajmy si, jak atwo mona pisa kod SQL

57

Utwrzmy w kocu tabel moje_kontakty

58

Twoja tabela jest gotowa

59

Spotkajmy si z niektrymi typami danych SQL

60

Twoja tabela bez tajemnic

64

Nie mona ponownie stworzy ju istniejcej bazy danych lub tabeli!

66

Do kosza ze star tabel czas na now

68

Aby doda dane do tabeli, bdziesz musia skorzysta z polecenia INSERT

70

Utworzenie polecenia INSERT

73

Wariacje na temat polecenia INSERT

77

Kolumny bez wartoci

78

Zerknij na swoj tabel, uywajc polecenia SELECT

79

SQL bez tajemnic: Wyznania wartoci NULL

80

Kontrola wewntrznych wartoci NULL

81

NOT NULL pojawia si w wynikach polecenia DESC

83

Wypenij pustk sowem kluczowym DEFAULT

84

Przybornik SQL

86

Spis treci

Polecenie SELECT

Pobieranie podarowanych danych


Czy naprawd lepiej jest dawa, ni bra? W przypadku korzystania z baz danych
najprawdopodobniej czciej bdziesz musia pobiera z nich dane, ni je zapisywa. I wanie w tych
wszystkich sytuacjach przydadz Ci si informacje przedstawione w tym rozdziale: poznasz w nim
bardzo przydatne polecenie SELECT i dowiesz si, jak uzyska dostp do tych wszystkich wanych
informacji, ktre wczeniej zapisywae w swoich tabelach. Co wicej, dowiesz si take, jak stosowa
klauzul WHERE i operatory AND i OR, by nie tylko pobiera dane, lecz wywietla te, ktre s Ci
potrzebne.
Pobiera dane czy nie pobiera?

88

Lepsza posta polecenia SELECT

91

Co oznacza gwiazdka (*)

92

Jak poszukiwa wartoci rnych typw?

98

Kolejne problemy ze znakami przestankowymi

Jestem
gwiazd!

99

Niedopasowane apostrofy

100

Polecenia INSERT z danymi zawierajcymi apostrofy

102

Pobieranie konkretnych kolumn w celu ograniczenia wynikw

107

Okrelanie kolumn w celu zwikszenia szybkoci zapytania

107

czenie zapyta

114

Odnajdywanie wartoci liczbowych

117

agodne operatory porwnania

120

Odnajdywanie wartoci liczbowych przy uyciu operatorw porwnania

122

Odnajdywanie danych tekstowych przy uyciu operatorw porwnania

125

By ALBO nie by

127

Rnica pomidzy operatorem AND a OR

130

By odszuka NULL, uyj operatora IS NULL

133

Jak mona zaoszczdzi czas dziki jednemu sowu: LIKE

135

Zew wieloznacznoci

135

Pobieranie zakresw przy uyciu operatora AND


i operatorw porwnania

139

Lepszy sposb operator BETWEEN

140

Operator IN w krgu zainteresowania

143

lub poza nim NOT IN

144

Wicej o operatorze NOT

145

Przybornik SQL

150

11

Spis treci

DELETE iUPDATE

S szanse, e wszystko bdzie wporzdku


Cay czas zmieniasz zdanie? Teraz nie przysporzy Ci to najmniejszego problemu!
Dziki poleceniom DELETE iUPDATE, ktre poznasz wtym rozdziale, nie bdziesz ju duej musia
ponosi konsekwencji decyzji podjtych p roku temu, kiedy to zapisae wbazie dane ospodniach
wksztacie dzwonw, ktre wanie zpowrotem zaczynay by modne. Dziki poleceniu UPDATE
bdziesz mg zmienia dane, natomiast polecenie DELETE pozwoli usn zbazy dane, ktre nie
bd Ci ju duej potrzebne. Jednak wtym rozdziale nie tylko pokaemy Ci te dwa nowe polecenia
SQL, lecz take nauczymy, jak mona uywa ich wprecyzyjny sposb, by przez przypadek nie usun
danych, ktre cay czas s potrzebne.

Czy ci
przeraamy?

12

Klowni s przeraajcy

154

ledzenie klownw

155

Klowni s w cigym ruchu

156

Jak s zapisywane informacje o klownach?

160

Gonzo, mamy problem

162

Jak pozby si rekordu polecenie DELETE

163

Stosowanie naszego nowego polecenia DELETE

165

Reguy polecenia DELETE

166

Dwa kroki INSERT i DELETE

169

Stosuj polecenie DELETE rozwanie

174

Problemy z nieprecyzyjnymi poleceniami DELETE

178

Modyfikowanie danych przy uyciu polecenia UPDATE

180

Reguy stosowania polecenia UPDATE

181

UPDATE odpowiada kombinacji INSERT-DELETE

182

Polecenie UPDATE w akcji

183

Aktualizacja miejsc wystpie klownw

186

Zaktualizuj ceny drinkw

188

A chcemy tylko jednego polecenia UPDATE

190

Przybornik SQL

192

Spis treci

Projektowanie dobrych tabel

Po co by normalnym?
Dotychczas tworzye tabele bez zwracania na nie szczeglnej uwagi.
Iwszystko byo wporzdku, tabele dziaay bez problemw. Moge wnich zapisywa,
modyfikowa, usuwa ipobiera dane. Jednak wraz ze zwikszaniem si iloci danych wtabelach
zaczniesz zauwaa, e s rzeczy, ktre moge zrobi wczeniej, by uatwi sobie wprzyszoci
tworzenie klauzul WHERE. Innymi sowy, musisz znormalizowa swoje tabele.
Dwie wdkarskie tabele

194

Tabele dotycz zwizkw

198

Dane atomowe

202

Dane atomowe a Twoje tabele

204

Reguy danych atomowych

205

Dlaczego warto by normalnym?

208

Zalety normalizacji tabel

209

Klowni nie s normalni

210

W poowie drogi do 1NF

211

Reguy KLUCZA GWNEGO

212

Denie do pierwszej postaci NORMALNEJ

215

Poprawianie tabeli Grzeka

216

Oryginalna posta polecenia CREATE TABLE


tabel
Pokacie mi moj kas

217

Polecenie oszczdzajce czas

219

Tworzenie tabeli z KLUCZEM GWNYM

220

1, 2, 3 automatycznie inkrementowane

222

Dodawanie KLUCZA GWNEGO do istniejcej tabeli

226

Modyfikacja tabeli i dodanie KLUCZA GWNEGO

227

Przybornik SQL

228

218

Chwileczk, ale ja ju mam tabel


z ca mas informacji. Chyba nie jestecie
powani, jeli oczekujecie, e usun tabel
jak w pierwszym rozdziale i bd ponownie
wpisywa ca jej zawarto tylko i wycznie
po to, eby stworzy kolumn klucza
gwnego.

13

Spis treci

Polecenie ALTEr

Korygowanie przeszoci
Czy kiedykolwiek marzye, by mie moliwo naprawiania bdw
popenionych w przeszoci? C, teraz masz tak moliwo. Dziki poleceniu ALTER
moesz zastosowa wszystkie nowe wiadomoci i dowiadczenia, by zmodyfikowa struktur tabel
utworzonych kilka dni, miesicy lub nawet lat wczeniej. Ale to jeszcze nie wszystko moesz
to zrobi bez wprowadzania jakichkolwiek zmian w istniejcych danych. Skoro tu dotare,
zapewne ju wiesz, co naprawd oznacza normalizacja, i bdziesz mg zastosowa t wiedz
do zapewnienia odpowiedniej struktury swym tabelom; tym starym i nowym.

Nadszed czas,
by zmieni Twoj wyprbowan,
lecz przestarza tabel na cudeko,
jakiemu nie opr si adne informacje,
i przenie j na taki poziom
bazodanowego odpicowania, o ktrym
nawet Ci si nie nio.

14

Musimy wprowadzi kilka zmian

232

Modyfikowanie tabel

237

Ekstremalne metamorfozy tabel

238

Zmiana nazwy tabeli

239

Musimy poczyni pewne plany

241

Przezbrajanie kolumn

242

Zmiany strukturalne

243

Polecenia ALTER i CHANGE

244

Zmiana dwch kolumn przy uyciu jednego polecenia SQL

245

Szybko! Usu t kolumn

249

Dokadniejsza analiza nieatomowej kolumny lokalizacji

256

Poszukaj wzorca

257

Kilka wygodnych funkcji acuchowych

258

Uyj biecej kolumny do zapisania wartoci w innej kolumnie

263

Sposb dziaania poczonych polece UPDATE i SET

264

Przybornik SQL

266

Spis treci

Zaawansowane zastosowanie polecenia SELECT

Nowy sposb spojrzenia na dane


Nadszed czas, by doda do swojego SQL-owego przybornika nieco finezji.
Ju wiesz, jak pobiera dane przy uyciu polecenia SELECT i klauzuli WHERE. Jednak czasami
bdziesz potrzebowa nieco wikszej precyzji ni ta, jak one zapewniaj. W tym rozdziale dowiesz
si o okrelaniu kolejnoci oraz grupowaniu danych, jak rwnie o wykonywaniu operacji
matematycznych na wynikach zapyta.
Reorganizacja Filmoteki Bazodanowa

268

Kilka problemw z biec tabel

269

Dopasowywanie istniejcych danych

270

Okrelanie zawartoci nowej kolumny

271

Polecenie UPDATE z wyraeniem CASE

274

Wyglda na to, e mamy problem

276

Do tabel moe si wkra baagan

281

Potrzebujemy moliwoci organizowania danych


zwracanych przez polecenie SELECT

282

Wyprbuj klauzul ORDER BY

285

Sortowanie wedug jednej kolumny

286

Klauzula ORDER z dwoma kolumnami

289

Klauzula ORDER operujca na wielu kolumnach

290

Uporzdkowana tabela filmw

291

Zmiana kolejnoci dziki uyciu DESC

293

Problem najlepszej sprzedawczyni grupy Mode Gosposie

295

Funkcja SUM zsumuje wszystko za nas

297

Zsumuj wszystko za jednym razem dziki uyciu GROUP BY

298

Funkcja AVG z klauzul GROUP BY

299

Funkcje MIN i MAX

300

Liczymy dni

301

Pobieranie unikalnych wartoci

303

LIMIT-owanie iloci wynikw

306

Ograniczenie tylko do drugiego miejsca

307

Przybornik SQL

310

15

Spis treci

Projektowanie baz danych skadajcych si zwielu tabel

Wyrastamy znaszych starych tabel


Kiedy moe nadej moment, kiedy pojedyncza tabela przestanie Ci
wystarcza. Twoje dane stay si bardziej zoone ijedna tabela, ktrej do tej pory uywae, nie jest
ju wstanie sprosta Twoim potrzebom. Wtabeli jest bardzo duo powtarzajcych si, nadmiarowych
informacji, ktre niepotrzebnie zajmuj miejsce na dysku ispowalniaj zapytania. Wytrwae, uywajc
tej jednej tabeli, tak dugo, jak to byo moliwe. Jednak wiat, wktrym yjemy, jest ogromny
iczasami potrzeba bdzie wicej ni jednej tabeli, by zapisa wszystkie dane, zapanowa nad nimi
iwostatecznym rozrachunku cay czas by panem wasnej bazy danych.

klowni_informacje
imi

ostatnio_widziano

wygld

aktywnoci

Eklerka

Dom opieki Spokojna Ostoja

K, czerwone wosy, zielona sukienka, ogromne stopy

balony, may samochodzik

Pan Pimpu

Urodziny u Jacka Zieliskiego

M, pomaraczowe wosy, niebieski garnitur, ogromne stopy

mim

Pani Smyk

MegaStragan

K, ta koszula, workowate czerwone spodnie

trbka, parasolka

Pan Hobo

Cyrk Koloseum

M, cygaro, czarne wosy, niewielki kapelusz

skrzypce

Klarabela

Dom opieki Wesoa Wdwka

K, rowe wosy, ogromny kwiat, niebieska sukienka

krzyk, taniec

info_aktywnosci
id

aktywnosci
id_aktywnosci

id_aktywnosci

aktywnosc

klowni_informacje
id
imie
plec
opis

info_lokalizacja
id
id_lokalizacji

lokalizacja
id_lokalizacji
lokalizacja

kiedy

zainteresowania

zainteresowania

id_zainteresowania
zainteresowanie

16

Szukamy partnerki na randk dla Wieka

312

Wszystko stracone ale zaraz

323

Wyobra sobie dodatkow tabel

324

Nowe tabele wbazie danych zinformacjami oklownach

325

Schemat bazy danych klowni_informacje

326

Wjaki sposb zjednej tabeli zrobi dwie

328

czenie tabel

330

Ograniczanie klucza obcego

335

Dlaczego naley zawraca sobie gow kluczami obcymi?

336

TWORZENIE tabeli zKLUCZEM OBCYM

337

Zalenoci pomidzy tabelami

339

Wzorce danych: jeden-do-jednego

339

Wzorce danych: kiedy uywa tabel poczonych zalenoci


jeden-do-jednego

340

Wzorce danych: jeden-do-wielu

341

Wzorce danych: dochodzimy do zalenoci wiele-do-wielu

342

Wzorce danych: potrzebujemy tabeli czcej

345

Wzorce danych: wiele-do-wielu

346

Wkocu w1NF

351

Klucz zoony korzysta zwielu kolumn

352

Zapis uproszczony

354

Czciowa zaleno funkcjonalna

355

Przechodnia zaleno funkcjonalna

356

Druga posta normalna

360

Trzecia posta normalna (wkocu)

366

Itak oto Robert (ilista_grzesia) yli od tej pory dugo iszczliwie

369

Przybornik SQL

372

Spis treci

Zczenia i operacje na wielu tabelach

Czy nie moemy si wszyscy dogada?


Witam w skomplikowanym wiecie wielu tabel. Wspaniale jest mie w bazie wicej
ni jedn tabel, jednak aby mg si nimi posugiwa, bdziesz musia pozna nowe narzdzia
i techniki. Jednoczesne korzystanie z wielu tabel moe by kopotliwe, dlatego te, by wszystko
byo jasne, bdziesz potrzebowa nazw zastpczych (nazywanych take aliasami). Oprcz tego
zczenia pomog Ci poczy tabele, dziki czemu bdziesz mg korzysta ze wszystkich danych,
zapisanych w wielu rnych miejscach. Przygotuj si teraz ponownie odzyskasz pen kontrol
nad swoj baz danych.

i tak naprawd
to wanie std si
bior malutkie tablice
z wynikami.

Powtarzamy si, cay czas si powtarzamy

374

Wypenianie tabel

375

Zainteresowania kopotliwa kolumna

378

Wci wykazujemy zainteresowanie

379

Aktualizacja wszystkich zainteresowa

380

Pobieranie wszystkich zainteresowa

381

Wiele drg prowadzcych w to samo miejsce

382

CREATE, SELECT oraz INSERT (prawie) jednoczenie

382

CREATE, SELECT i INSERT jednoczenie

383

O co chodzi z tym AS?

384

Nazwy zastpcze kolumn

385

Nazwy zastpcze, a kto by ich potrzebowa?

386

Wszystko co chciaby wiedzie o zczeniach wewntrznych

387

Zczenie kartezjaskie

388

Zrozumienie zcze wewntrznych

393

Zczenie wewntrzne w akcji: zczenie rwnociowe

394

Zczenia wewntrzne w akcji: zczenie rnociowe

397

Ostatni rodzaj zcze wewntrznych: zczenia naturalne

398

Zczone zapytania?

405

Nazwy zastpcze tabel i kolumn bez tajemnic: Dlaczego si ukrywacie?

406

Przybornik SQL

408

17

Spis treci

Podzapytania

Zapytania wzapytaniach
Janie, dwuczciowe zapytanie, prosz. Zczenia s wspaniae, jednak czasami musisz
zada swojej bazie danych wicej ni jedno zapytanie. Bd uy wynikw jednego zapytania
jako danych wejciowych dla drugiego. Iwanie wtakich sytuacjach przydaj si podzapytania.
Pozwol Ci one unikn powielania danych, sprawi, e Twoje zapytania stan si bardziej
dynamiczne, amoe nawet pozwol si wkrca na koncerty iprzyjcia dla wyszych sfer.
(No, na to ostatnie bym nie liczya, ale dwa punkty ztrzech to itak niele).

zapytanie ZEWNTRZNE
zapytanie WEWNTRZNE

Grzesiek wchodzi na rynek pracy

410

Baza Grzeka wzbogacona onowe tabele

411

Grzesiek uywa zczenia wewntrznego

412

Ale Grzesiek chce uy innych zapyta

414

Podzapytania

416

czymy dwa zapytania wzapytanie zpodzapytaniem

417

Jakby jedno pytanie nie wystarczao: poznajcie podzapytanie

418

Podzapytanie wdziaaniu

419

Podzapytania iich reguy

421

Podstawowe informacje otworzeniu podzapyta

424

Podzapytanie jako kolumna polecenia SELECT

427

Inny przykad: Podzapytanie ze zczeniem naturalnym

428

Podzapytania nieskorelowane

429

SQL bez tajemnic: Wybr optymalnego sposobu realizacji zapytania,


jeli dostpna jest wiksza ilo moliwoci

430

Nieskorelowane podzapytania zwracajce wiele wartoci:


IN oraz NOT IN

433

Podzapytania skorelowane

438

(Przydatne) Podzapytanie skorelowane uywajce operatora


NOT EXISTS

439

EXISTS iNOT EXISTS

440

Usugi porednictwa pracy Grzeka zaproszenie do wsppracy!

442

Wdrodze na imprez

443

Przybornik SQL

444

Zapytanie zewntrzne.

SELECT jakas_kolumna, inna_kolumna


FROM tabela
WHERE kolumna = (SELECT kolumna FROM tabela );

18

Zapytanie wewntr
zne.

Spis treci

10
Polecenie UNION
i
pozwoli Grzekow
poczy wyniki
ech
trz
z
pochodzce
yta
niezalenych zap
taci
i zwrci je w pos
jednej tabeli.
z tabeli
Stanowiska a.
aln
praca_aktu

z tabeli
Stanowiska a.
aln
praca_aktu

W wynikach caego
polecenia zostan
wywietlone
tylko te wiersze
z pierwszego
zapytania, ktre
nie wystpuj
w drugim zapyta
niu.

Zczenia zewntrzne, zczenia zwrotne oraz unie

Nowe manewry
To wszystko, czego do tej pory dowiedziae si o zczeniach, to jedynie
p prawdy na ich temat. Widziae ju zczenia krzyowe tworzce wszystkie moliwe pary
rekordw pochodzcych z dwch tabel oraz zczenia wewntrzne zwracajce jedynie pasujce
do siebie rekordy obu tabel. Nie spotkae si jeszcze natomiast ze zczeniami zewntrznymi,
zwracajcymi take te wiersze, ktre nie maj pasujcych odpowiednikw w drugiej tabeli,
zczeniami zwrotnymi, ktre cz tabel z ni sam, oraz uniami, ktre scalaj wyniki z kilku
rnych zapyta. Kiedy poznasz te wszystkie sztuczki, bdziesz w stanie pobiera dane z bazy
dokadnie w taki sposb, jaki bdzie Ci potrzebny. (Nie zapomnimy take ujawni caej szokujcej
prawdy o podzapytaniach!).

Stan
ow
praca iska z t
a
_pos
zukiw beli
ana.

Porzdki w starych danych

448

Kluczem s dwie strony zczenia lewa i prawa

449

Oto lewostronne zczenie zewntrzne

450

Zczenia zewntrzne i wielokrotne dopasowania

455

Prawostronne zczenie zewntrzne

456

Podczas gdy my radonie zczalimy zewntrznie

459

Moglibymy utworzy now tabel

460

Gdzie w schemacie umiecimy now tabel?

461

Klucz obcy odwoujcy si do tej samej tabeli

462

czenie tabeli z ni sam

463

Potrzebujemy zczenia zwrotnego

465

Inny sposb zwracania informacji z wielu tabel

466

Mona zastosowa polecenie UNION

467

Polecenie UNION ma swoje ograniczenia

468

Reguy stosowania polece UNION w dziaaniu

469

UNION ALL

470

Utworzenie tabeli na podstawie wynikw polecenia UNION

471

Aby tytu zosta wywietlony


w wynikach caego polecenia,
musi si pojawi w wynikach
obu zapyta

Polecenia INTERSECT i EXCEPT

472

Skoczylimy ze zczeniami, czas zaj si czym nowym

473

Podzapytania i zczenia studium porwnawcze

473

Stan
prac owiska
a_p
z
oszu tabeli
kiwa
na.

Zamiana podzapytania na zczenie

474

Zczenie zwrotne jako podzapytanie

479

Firma Grzeka rozwija si

480

Przybornik SQL

482

ktre
anowiska,
Wszelkie st
zwrconych
w wynikach

uj
p
st
wy
e zostan
ni
a,
ni
ta
py
go
przez oba za
nikach cae
wy
w
e
on
uwzgldni
.
ia
polecen

19

Spis treci

11

Ograniczenia, widoki itransakcje

Zbyt wielu kucharzy psuje baz danych


Twoje bazy danych rozrosy si imusz znich korzysta take inne osoby.
Problem polega na tym, e niektre znich nie bd znay jzyka SQL rwnie dobrze jak Ty. Musisz
zatem mie jakie sposoby, by uniemoliwi im wprowadzanie nieprawidowych danych, techniki
pozwalajce ukry przed nimi wybrane dane oraz mechanizmy, ktre uchroni te osoby przed
wzajemnym przeszkadzaniem sobie, gdy jednoczenie bd modyfikowa zawarto bazy.
Wtym rozdziale zaczniemy ochrania nasze dane przed bdami popenianymi przez inne osoby.
Witamy wBazie Obronnej, wczci 1.

Grzesiek zatrudni pomocnikw

484

Pierwszy dzie Kuby: Dopisywanie nowego klienta

485

Kuba unika wartoci NULL

486

Trzy miesice pniej

487

Uwaga, KONTROLA: dodawanie


OGRANICZE SPRAWDZAJCYCH

488

Sprawdzanie pci

489

Praca Franka staje si nuca

491

Tworzenie widoku

493

Ogldanie wasnych widokw

494

Jak waciwie dziaa widok?

495

Czym s widoki

496

Wstawianie, aktualizacja iusuwanie danych przy wykorzystaniu widokw 499

Bazodanowa Kasa
Oszczdnociowa

20

Sekret polega na tym, by udawa, e widok jest prawdziw tabel

500

Widoki zklauzul CHECK OPTION

503

Twj widok moe pozwala na aktualizacj danych, jeli

504

Kiedy widok przestanie by potrzebny

505

Kiedy dobrej bazie przydarzy si co zego

506

Co si stao wbankomacie

507

Kolejne kopoty zbankomatami

508

To nie marzenia, to transakcje

510

Klasyczny test ACID

511

SQL pomaga nam zarzdza swoimi transakcjami

512

Co powinno si sta wbankomacie

513

Jak umoliwi korzystanie ztransakcji wMySQL-u

514

Wyprbuj transakcje samodzielnie

515

Przybornik SQL

518

Spis treci

12

root

waniak

Bezpieczestwo

Zabezpieczanie swych dbr


Woye niezwykle duo wysiku iczasu wutworzenie swojej bazy danych.
Ina pewno byby zdruzgotany, gdyby przydarzyo si jej co zego. Jednak musisz zapewni dostp
do swoich danych innym osobom iobawiasz si, e mogyby zapisa wbazie niewaciwe dane lub,
co gorsza, usun nie te dane, ktre powinny. Na szczcie wtym rozdziale dowiesz si, wjaki
sposb mona dodatkowo zabezpieczy baz danych oraz obiekty wniej umieszczone oraz wjaki
sposb uzyska pen kontrol nad tym, kto ijakie operacje na bazie moe wykonywa.

doktorek

Problemy uytkownikw

522

Zapobieganie bdom wbazie klownw

523

Zabezpieczanie konta administratora

525

Dodanie nowego uytkownika

526

Dokadnie okrel, czego poszczeglni uytkownicy potrzebuj

527

Prosta posta polecenia GRANT

528

Rne wersje polecenia GRANT

531

Usuwanie uprawnie

532

Usuwanie uprawnie przydzielonych dziki GRANT OPTION

533

Precyzyjne usuwanie

534

Wspuytkowane konta przysparzaj problemw

538

Stosowanie roli

540

Usuwanie roli

540

Stosowanie roli zklauzul WITH ADIMIN OPTION

542

czenie polece CREATE USER iGRANT

547

Lista Grzeka staa si usug globaln!

548

Czy ju co wiesz ofilii Listy Grzesia wswoim miecie?

549

Korzystaj zSQL-awswoich wasnych projektach, poniewa take Ty


moesz odnie taki sukces jak Grzesiek

549

Przybornik SQL

550

gupek

pyskacz

szczciarz

pioch

ziewacz

21

Spis treci

Pozostaoci

Cz najwaniejszych zagadnie
(ktrych nie opisalimy wczeniej)
Nawet po tym wszystkim jest jeszcze co wicej. Jest jeszcze dosownie kilka rzeczy,
oktrych, jak sdzimy, powiniene wiedzie. Nie czulibymy si wporzdku, gdybymy je cakowicie
zignorowali inie powicili im choby krtkiej wzmianki. Azatem: nim bdziesz mg odoy t
ksik na pk, przeczytaj otych drobnych, lecz wanych sprawach.
Poza tym kiedy skoczysz lektur tego dodatku, pozostan Ci jeszcze dwa nastpne oraz indeks
no imoe jeszcze jakie reklamy apotem ju naprawd skoczysz. Obiecujemy!

A
B

D
E
F
G
H
I
J
K
L
M
N
O
P

r 1. Znajd izainstaluj graficzny program do obsugi


N

uywanego systemu zarzdzania bazami danych

552

Nr 2. Sowa zastrzeone iznaki specjalne

554

Nr 3. ALL, ANY oraz SOME

556

Nr 4. Dodatkowe informacje otypach danych

558

Nr 5. Tabele tymczasowe

560

Nr 6. Rzutowanie typw

561

Nr 7. Kim jeste? Ktra jest godzina?

562

Nr 8. Przydatne funkcje matematyczne

563

Nr 9. Indeksowanie dla poprawy szybkoci dziaania zapyta

565

Nr 10. Dwu-minutowy kurs PHP iMySQL-a

566

ABSOLUTE ACTION ADD ADMIN AFTER AGGREGATE ALIAS ALL ALLOCATE ALTER AND ANY ARE
ARRAY AS ASC ASSERTION AT AUTHORIZATION
BEFORE BEGIN BINARY BIT BLOB BOOLEAN BOTH BREADTH BY
CALL CASCADE CASCADED CASE CAST CATALOG CHAR CHARACTER CHECK CLASS CLOB CLOSE
COLLATE COLLATION COLUMN COMMIT COMPLETION CONNECT CONNECTION CONSTRAINT
CONSTRAINTS CONSTRUCTOR CONTINUE CORRESPONDING CREATE CROSS CUBE CURRENT
CURRENT_DATE CURRENT_PATH CURRENT_ROLE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_
USER CURSOR CYCLE
DATA DATE DAY DEALLOCATE DEC DECIMAL DECLARE DEFAULT DEFERRABLE DEFERRED DELETE
DEPTH DEREF DESC DESCRIBE DESCRIPTOR DESTROY DESTRUCTOR DETERMINISTIC DICTIONARY
DIAGNOSTICS DISCONNECT DISTINCT DOMAIN DOUBLE DROP DYNAMIC
EACH ELSE END END_EXEC EQUALS ESCAPE EVERY EXCEPT EXCEPTION EXEC EXECUTE EXTERNAL
FALSE FETCH FIRST FLOAT FOR FOREIGN FOUND FROM FREE FULL FUNCTION
GENERAL GET GLOBAL GO GOTO GRANT GROUP GROUPING
HAVING HOST HOUR
IDENTITY IGNORE IMMEDIATE IN INDICATOR INITIALIZE INITIALLY INNER INOUT INPUT
INSERT INT INTEGER INTERSECT INTERVAL INTO IS ISOLATION ITERATE
JOIN
KEY
LANGUAGE LARGE LAST LATERAL LEADING LEFT LESS LEVEL LIKE LIMIT LOCAL LOCALTIME
LOCALTIMESTAMP LOCATOR
MAP MATCH MINUTE MODIFIES MODIFY MODULE MONTH
NAMES NATIONAL NATURAL NCHAR NCLOB NEW NEXT NO NONE NOT NULL NUMERIC
OBJECT OF OFF OLD ON ONLY OPEN OPERATION OPTION OR ORDER ORDINALITY OUT OUTER
OUTPUT
PAD PARAMETER PARAMETERS PARTIAL PATH POSTFIX PRECISION PREFIX PREORDER PREPARE
PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURE PUBLIC

Q
R

T
U
V
W
X
Y
Z

22

READ READS REAL RECURSIVE REF REFERENCES REFERENCING RELATIVE RESTRICT RESULT
RETURN RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP ROUTINE ROW ROWS
SAVEPOINT SCHEMA SCROLL SCOPE SEARCH SECOND SECTION SELECT SEQUENCE SESSION
SESSION_USER SET SETS SIZE SMALLINT SOME SPACE SPECIFIC SPECIFICTYPE SQL
SQLEXCEPTION SQLSTATE SQLWARNING START STATE STATEMENT STATIC STRUCTURE
SYSTEM_USER
TABLE TEMPORARY TERMINATE THAN THEN TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE
TO TRAILING TRANSACTION TRANSLATION TREAT TRIGGER TRUE
UNDER UNION UNIQUE UNKNOWN UNNEST UPDATE USAGE USER USING
VALUE VALUES VARCHAR VARIABLE VARYING VIEW
WHEN WHENEVER WHERE WITH WITHOUT WORK WRITE
YEAR
ZONE

Spis treci

Instalacja MySQL-a

TABASE

DA
CREATE
do
o polecenia
,
Uywaj teg caej bazy danych
a
utworzeni zawiera wszystkie
zie
bd
ra
kt
ele.
tab
oje
Tw
DELETE

Sprbuj to zrobi samemu


Caa zdobyta przez Ciebie wiedza i umiejtnoci nie na wiele si zdadz, jeli
nie wykorzystasz ich w praktyce. W tym dodatku znajdziesz instrukcje dotyczce instalacji
swojego wasnego serwera MySQL, ktrego bdziesz mg uywa do zabawy i pracy.

Zacznij dziaa i to szybko!

570

Instrukcje i rozwizywanie problemw

570

Proces instalacji MySQL-a w systemie Windows

571

Przypomnienie narzdzi

Wszystkie nowe narzdzia SQL


W tym dodatku, w jednym jedynym miejscu, zostay po raz pierwszy zebrane
wszystkie podpowiedzi dotyczce SQL-a ale bd tu tylko przez jedn noc
(artujemy)! Znajdziesz tu podsumowanie wszystkich porad i informacji o SQL-u, jakie zamiecilimy
w caej ksice. Powi chwilk, by przejrze list, i rozkoszuj si poczuciem dumy ju znasz
wszystkie te rady i informacje.
Symbole

To narzdzi
e,
uywa do usuktrego moesz
tabeli. Stosuj wania wierszy z
WHERE, by w nim klauzul
prec
okrela wier yzyjnie
sze, ktrych
si pozby.
chcesz

USE DATABASE
Pozwala wskaza baz danych,
na ktrej chcesz pracowa,
na przykad by utworzy w
niej tabele.
ALTER TAB
LE
To polecenie
pozwala zmi
enia
nazw tabeli
oraz jej stru
ktur
bez koniecz
no
zawartoci. ci usuwania jej

NULL
z NOT
wi si
NULL ora
zastano h
ryc
e take
Powinien kolumny, w kt ci
rto

i wskaza wystpowa wa o,
nie mog przykad dlategsze
NULL, na oby to pniej danych.
ni
e utrud anie i sortowanie kolumn
wyszukiw tworzenia takich h sw
nic
Podczas musia uy w
bdziesz ch NOT NULL.
kluczowy

NATURAL

Podzapytanie skorelowane

576

JOIN

Zczenie wew
pominito klauntrzne, w ktrym
jedynie w przy zul ON. Dziaa
tabele zawiera padku, gdy czone
samej nazwie. j kolumn o takiejUPDATE
To polecenie
Zapytan
aktu
istniejc kolu alizuje
ie zewn
trzne
Zapytan
kolumny), zapi mn (lub
ie
zapytan zawierajce
now warto sujc w niej
ie
w
.
take jak wewntrzne, sobie
poleceniu mo Take w tym
okrelan
o podzap
na uywa klau
WHERE.
e
ytanie.
zuli

Podzapytanie, ktre korzysta i


zaley od wartoci zwracanych
przez zapytanie zewntrzne.

DEFAULT
pozwala
kluczowe
to
To sowo
yln war
a,
okreli dom ra bdzie uywan u
kt
ord
kolumny, s zapisywania rek
ny
jeli podcza to danej kolum
war
ana.
do tabeli
pod
nie
ie jaw
nie zostan

DROP TABLE
To polecenie pozwala usun
tabel z bazy, na przykad
w sytuacji, gdy tworzc j,
popenisz jaki bd. Jednak
powiniene z niego korzysta,
jeszcze zanim zaczniesz dodawa
do tabeli dane przy uyciu
polecenia INSERT.

INNER JOIN
Dowolne zczenie zawierajce
wiersze z obu tabel i
wykorzystujce jaki warunek
logiczny.
WE
KRZYO
Zczenie IN)
JO
(CROSS
z pierwszej
dy wiersz
Zwraca ka ony kolejno z
cz
tabeli, po rszem z drugiej
a
kadym wie take pod wielom
ane
tabeli. Zn wami, takimi jak:
IE
innymi naz KARTEZJASK
NIE
Z
ZCZE
ZENIE BE
oraz ZC .
ZCZENIA

Podz
apytan
ie nies
To ni
korelo
ez
wane
w ade alene po
do za n sposb dzapytan
ie
pytani
ni
a zew e odwou , ktre
je
ntrzn
ego. si

Zczenie
i RN RWNOC
IOWE
OCIOW
E
To dwa
ro
wewntr dzaje zcze
zn
zwraca ych. Pierwsz
wiersze
y
, ktre z nich
rwne,
a
s
od siebie drugi wiersze sobie
, ktre
rne.
s

Skorowidz

583

23

4. Projektowanie dobrych tabel

Po co by normalnym?
i wtedy mamusia
zadzwonia do
swojego tajemniczego
pomocnika!

W porzdku, to nie
jest normalne.

Dotychczas tworzye tabele bez zwracania na nie szczeglnej uwagi.

I wszystko byo w porzdku, tabele dziaay bez problemw. Moge w nich zapisywa,
modyfikowa, usuwa i pobiera dane. Jednak w miar zwikszania si iloci danych
w tabelach zaczniesz zauwaa, e s rzeczy, ktre moge zrobi wczeniej, by uatwi sobie
w przyszoci tworzenie klauzul WHERE. Innymi sowy, musisz znormalizowa swoje tabele.

to jest nowy rozdzia 193

Poawianie danych

Dwie wdkarskie tabele


Dwch znajomych wdkarzy, Jacek i Marek, stworzyo tabele
do gromadzenia danych o rekordowych poowach. Tabela Marka
zawiera kolumny pozwalajce na zapisanie aciskiej nazwy
gatunku ryby, nazwy polskiej, wagi zowionej ryby oraz miejsca
dokonania poowu. Nie zawiera jednak kolumn pozwalajcych
na zapianie imienia i nazwiska osoby, ktra ustanowia rekord.

polowy_informacje
nazwa

nazwa_gatunkowa

miejsce

bass

M. salmoides

Wigry, PD

1,23 kg

sandacz

S. vitreus

Dziubiele, WM

2,75 kg

pstrg

O. Clarki

Mrzygd, PK

1,20 kg

oko

P. Flavescens

Pisz, WM

0,85 kg

potka

R. rutilus

Charzykowy, PM

0,65 kg

uskot

L. Osseus

Czaplinek, ZP

1,10 kg

wgorz

A. anguilla

Swornegacie, PM

1,45 kg

szczupak

E. americanus

Karwica, WM

3,34 kg

zota rybka

C. auratus

Warszawa, MZ

0,35 kg

oso

O. Tshawytscha

Toru, KP

3,10 kg

Jestem ichtiologiem. Chc szuka


w tabeli wycznie aciskich nazw
gatunkowych i nazw uywanych
potocznie, by okreli wag rekordowej
ryby oraz gdzie j zowiono.

Marek

194

waga

Rozdzia 4.

Ta tabela m
jedynie cztea
kolumny. P ry
j z tabel orwnaj
rekordowe_
przedstawiopolowy
nastpnej n na
stronie.

Projektowanie dobrych tabel

Tabela Jacka take zawiera polsk nazw zowionej ryby oraz jej
wag; jednak oprcz tego Jacek umieci w niej kolumny pozwalajce
na zapisanie imienia i nazwiska szczliwego wdkarza oraz nazwy
wojewdztwa, w ktrym dokonano poowu.

strowania
Take ta tabela suy do reje kich, jednak
kars
wd
ww
poo
rekordowych
wicej kolumn.
zawiera niemal dwukrotnie

rekordowe_polowy
imie

nazwisko

nazwa

miejsce

wojewodztwo

waga

data

PD

1,23 kg

5.9.1947

Dziubiele

WM

2,75 kg

16.8.1960

Mrzygd

PK

1,20 kg

23.6.1978

Pisz

WM

0,85 kg

18.5.1934

Charzykowy

PM

0,65 kg

1.8.1965

uskot

Czaplinek

ZP

1,10 kg

31.9.1988

Dubaa

wgorz

Swornegacie

PM

1,45 kg

12.8.1973

Wronek

szczupak

Karwica

WM

3,34 kg

11.6.1995

Jan

Kowalski

bass

Wigry

Adrian

Brdka

sandacz

Zenon

Krawczyk

pstrg

Maria

Popiela

oko

Piotr

Drymza

potka

Ignacy

Wikorczyk

Krzysztof
Pawe
Andrzej

Ksiewicz

zota rybka

Warszawa

MZ

0,35 kg

25.9.2003

Roman

Wiertek

oso

Toru

KP

3,10 kg

17.8.1991

Zaostrz owek
Dla obu tabel napisz zapytanie,
ktre pobierze wszystkie rekordowe
poowy dokonane w wojewdztwie
podkarpackim.

Pisz artykuy dla magazynu


Weekend z wdk. Musz zna imiona
i nazwiska wdkarzy, ktrzy ustanowili
rekordowe poowy, daty tych pooww
oraz ich miejsca.

Jacek

jeste tutaj 195

Rozwizanie wiczenia

Zaostrz owek

Rozwizanie

Dla kadej z tabel napisz zapytanie, ktre pobierze informacje o rekordowych poowach
dokonanych na terenie wojewdztwa podkarpackiego.

Musimy zastosowa operator LIKE


i odszuka interesujce nas rekordy
na podstawie pola zawierajcego
poczon nazw miejscowoci
i oznaczenie wojewdztwa.

Niemal nigdy nie musz


wyszukiwa informacji na podstawie
wojewdztwa. Dlatego informacje
o wojewdztwie zapisuj w tabeli
w tej samej kolumnie, w ktrej umieszczam
nazw miejsca, gdzie dokonano
rekordowego poowu.

SELECT * FROM polowy_informacje


WHERE miejsce LIKE '%PK';

nazwa

nazwa_gatunkowa

miejsce

waga

pstrg

O. Clarki

Mrzygd, PK

1,20 kg

To zapytanie odwouje si
bezporednio do kolumny
wojewodztwo.

Czsto musz przeszukiwa


informacje na podstawie wojewdztwa,
dlatego te utworzyem w tabeli
odrbn kolumn okrelajc
wojewdztwo, w ktrym dokonano
rekordowego poowu.

SELECT * FROM rekordowe_polowy


WHERE wojewdztwo = 'PK';

196

imie

nazwisko

nazwa

miejsce

wojewodztwo

waga

data

Zenon

Krawczyk

pstrg

Mrzygd

PK

1,20 kg

23.6.1978

Rozdzia 4.

Projektowanie dobrych tabel


Nie istniej

gupie pytania

P.:

P.:

Azatem tabela Jacka jest


lepsza od tabeli Marka?

Dlaczego krtsze zapytania


s lepsze do dugich?

O.:

O.:

P.: Awyobramy sobie adres

pocztowy. Czy nie moglibymy


utworzy jednej kolumny,
Nie. To dwie rne tabele, stworzone
Im prostsze jest zapytanie, tym lepiej. wktrej byby zapisany cay
adres, oraz kilku innych,
winnych celach. Wpraktyce Marek
Zapytania bd si stawa coraz bardziej
wktrych umiecilibymy jego
rzadko kiedy bdzie musia poszukiwa
skomplikowane wraz zpowikszaniem
poszczeglne elementy?
wswojej tabeli informacji na podstawie
si bazy danych iiloci umieszczonych
wojewdztwa, gdy tak naprawd
wniej tabel. Jeli na samym pocztku
interesuj go jedynie nazwy gatunkowe
zaczniesz od moliwie jak najprostszych
Cho takie powielanie danych moe
ipotoczne zowionych ryb oraz, oczywicie, zapyta, to wprzyszoci na pewno tego
Ci si obecnie wydawa cakiem dobrym
ich waga.
nie poaujesz.
pomysem, to jednak pomyl, oile wicej
miejsca na dysku zajmie taka baza, gdy
Zdrugiej strony, Jacek bdzie musia korzysta
Chcesz przez to powiedzie, rozronie si do potnych rozmiarw.
zinformacji owojewdztwie podczas poszukiPoza tym wprzypadku powielania danych
e zawsze powinienem
wania danych wswojej tabeli. To wanie
wpoleceniach INSERT iUPDATE pojawi
przechowywa wkolumnach
ztego powodu wjego tabeli informacje
si dodatkowe kolumny, oktrych
bardzo mae fragmenty
owojewdztwie, wjakim dokonano rekorbdziesz musia pamita.
informacji?
dowych pooww, znalazy si wosobnej
kolumnie. To mu uatwi poszukiwanie danych
Przyjrzyjmy si dokadniej, jak naley
Niekoniecznie. Analizujc tabele
na podstawie wojewdztwa.
projektowa tabele, by optymalnie
Jacka iMarka, moge ju zauway,
pasoway do sposobw, wjakie bdziemy
e wszystko zaley od tego, wjaki
znich korzysta.
Czy podczas przeszukiwania
sposb chcesz korzysta ztabel.
tabel powinnimy unika
Na przykad wyobra sobie tabele
stosowania operatora LIKE?
dotyczce samochodw jedn,
zktrej korzysta warsztat mechaniczny,
Sposb, w jaki masz
Nic nie przemawia za tym, by nie
idrug, uywan przez waciciela
stosowa operatora LIKE, niemniej jednak
komisu samochodowego. Mechanicy
zamiar korzysta
moe to przysporzy pewnych problemw
mog potrzebowa szczegowych
oraz prowadzi do otrzymywania
z danych, bdzie
informacji okadym samochodzie;
niepodanych wynikw. Jeli wkolumnach
zkolei wacicielowi komisu wystarczy
determinowa posta
s zapisywane zoone informacje, to
marka, model, rok produkcji oraz numer
operator LIKE nie bdzie dostatecznie
tworzonych tabel.
nadwozia.
precyzyjny, by je pobiera.

O.:

P.:

O.:

P.:

O.:

WYSIL

szare komrki
SQL jest jzykiem uywanym w relacyjnych bazach danych.
Jak uwaasz, czym s te relacje w wiecie baz danych?

jeste tutaj 197

Wytyczne tworzenia tabel

Tabele dotycz zwizkw


Bazy danych obsugiwane przy uyciu jzyka SQL s nazywane systemami zarzdzania
relacyjnymi bazami danych (ang. Relational Database Management System, wskrcie
RDBMS). Ale nie zaprztaj sobie gowy zapamitywaniem tych nazw. Dla nas
najwaniejsze jest tylko jedno sowo: RELACYJNE*. Dla Ciebie oznacza ono mniej
wicej tyle, e aby zaprojektowa odlotow tabel, musisz zastanowi si iokreli, jak
poszczeglne kolumny s ze sob powizane iwsplnie opisuj zagadnienie, jakiego
dotyczy tabela.
Cae wyzwanie isztuka polega na tym, by opisa zagadnienie, wykorzystujc do tego celu
kolumny, ktre zagwarantuj atwo pobierania danych ztabeli. Ato oczywicie zaley
od tego, jakie informacje chcemy pobiera ztabeli. Mona wyrni kilka bardzo oglnych
krokw, jakie naley wykona, projektujc tabele.

1. Wybierz jedno zagadnienie, ktre ma


opisywa tabela.

2. Utwrz list informacji o danym


zagadnieniu, ktrych bdziesz
potrzebowa podczas korzystania z tabeli.

Czego maj dotyczy


informacje zapisywane
w tabeli?

Jak bdziesz
korzysta
z tabeli?


3.


Na podstawie tej listy podziel informacje


o zagadnieniu na elementy, ktrych
nastpnie bdziesz mg uy, okrelajc
organizacj tabeli.

j
Jak bdzie Ci najatwie
a
przeszukiwa i pobier
dane z tabeli?

* Niektrzy uwaaj, e sowo relacyjny odnosi si do wielu


tabel powizanych ze sob. Jednak jest to bdna opinia.

198

Rozdzia 4.

Projektowanie dobrych tabel

wiczenie

Czy na podstawie przedstawionego poniej zdania, okrelajcego, w jaki sposb ichtiolog


Marek chce przeszukiwa i pobiera dane z tabeli, potrafisz okreli, jakie powinny by jej
kolumny? Wpisz nazwy kolumn w pustych prostoktach na poniszym rysunku.

Przeszukujc tabel na podstawie


nazwy lub nazwy gatunkowej ,
chc uzyska informacje o miejscu
dokonania poowu
oraz wadze zowionej ryby.

Twoja kolej. Napisz analogiczne zdanie dotyczce Jacka autora artykuw dla
magazynu Weekend z wdk, ktry korzysta z bazy, by notowa w niej szczegowe
informacje na potrzeby swoich artykuw. Nastpnie narysuj strzaki prowadzce
od nazw kolumn do miejsca w zdaniu, w ktrym Jacek nawizuje do danej kolumny.

nazwisko

imie
nazwa

wojewodztwo

miejsce

waga

data

jeste tutaj 199

wiczenie. Rozwizanie

Rozwizanie
wiczenia

Czy na podstawie przedstawionego poniej zdania okrelajcego, w jaki sposb ichtiolog Marek
chce przeszukiwa i pobiera dane z tabeli, potrafisz okreli, jakie powinny by jej kolumny?
Wpisz nazwy kolumn w pustych prostoktach na poniszym rysunku.

nazwa_gatunkowa

nazwa

Przeszukujc tabel na podstawie


nazwy lub nazwy gatunkowej,
chc uzyska informacje o miejscu
dokonania poowu
oraz wadze zowionej ryby.

miejsce

waga

Twoja kolej. Napisz analogiczne zdanie dotyczce Jacka autora artykuw dla
magazynu Weekend z wdk, ktry korzysta z bazy, by notowa w niej szczegowe
informacje na potrzeby swoich artykuw. Nastpnie narysuj strzaki prowadzce
od nazw kolumn do miejsca w zdaniu, w ktrym Jacek nawizuje do danej kolumny.

nazwisko

imie
nazwa

wojewodztwo

Przeszukujc tabel wedug nazwy ryby, chciabym uzyska imi


oraz nazwisko wdkarza, jak rwnie miejsce poowu,
wojewdztwo, wag zowionej ryby oraz dat poowu .

miejsce

200

Rozdzia 4.

waga

data

Projektowanie dobrych tabel

Ale dlaczego Jacek ma poprzestawa na tym?


Dlaczego nie podzieli daty na kolumny dni,
miesicy i lat? Nawet kolumn okrelajc miejsce
mona by dalej podzieli na osobne kolumny
z nazw ulicy i numerem domu.

Oczywicie, e mona by tak zrobi. Jednak nasze


dane nie musz by podzielone a tak dokadnie.
Przynajmniej nie wtym przypadku. Gdyby jednak Jacek mia
zamiar napisa artyku otym, gdzie pojecha na wakacje,
by zapa du ryb, to wtakim przypadku mgby podzieli
kolumn miejsce na nazw ulicy inumer, tak by czytelnicy
mogli znale nocleg jak najbliej rekordowego owiska.
Jednak Jacek potrzebuje wycznie informacji omiejscu
iwojewdztwie, dlatego utworzy tylko tyle kolumn, ile jest
koniecznych, by niepotrzebnie nie powiksza rozmiaru bazy
danych. Uzna, e wjego sytuacji nie ma sensu bardziej dzieli
danych; innymi sowy, uzna, e jego informacje s danymi
atomowymi.

WYSIL

szare komrki
Jak mylisz, co oznacza termin dane atomowe w kontekcie
informacji zapisywanych w relacyjnych bazach danych?

jeste tutaj 201

Dane atomowe

Dane atomowe
Czym jest atom? To niewielki fragment materii, ktrego nie mona lub nie
naley dalej dzieli. To samo dotyczy danych. Kiedy zostan one uznane za dane
ATOMOWE, oznacza to, e zostay one ju podzielone na najmniejsze elementy,
ktrych nie naley dalej dzieli.

Dostawa w 30 minut lub gratis


Przyjrzyjmy si na przykad dostarczycielowi
pizzy. Aby dostarczy zamwienie w odpowiednie
miejsce, wystarczy, e w jednej kolumnie
zapiszemy nazw ulicy i numer domu. Na jego
potrzeby s to dane atomowe. Dostawca nigdy
nie bdzie poszukiwa samego numeru domu.
W rzeczywistoci, jeli miejsce dostawy zostaoby
podzielone na nazw ulicy i numer domu, to
zapytania, ktre musiaby zadawa dostawca, byyby
dusze i bardziej zoone, a to spowodowaoby
wyduenie czasu dostarczania pizzy do klienta.
zzy
dostawcy pi
Na potrzeby ny w jednej
adres zapisast wystarczajco
kolumnie je formacj.
atomow in

202

Rozdzia 4.

Projektowanie dobrych tabel

Lokalizacja, lokalizacja, lokalizacja


A teraz przeanalizujmy przykad porednika handlu nieruchomociami.
Taki porednik mgby chcie, by nazwa ulicy zostaa zapisana w osobnej
kolumnie. Mgby bowiem chcie poda w zapytaniu nazw ulicy, by
uzyska informacje o wszystkich domach na sprzeda pooonych przy niej.
A zatem w przypadku porednika handlu nieruchomociami informacjami
atomowymi s nazwa ulicy oraz numer domu.

Z kolei w przypadku porednika


handlu nieruchomociami
eru
rozdzielenie nazwy ulicy od num
nych
osob
w
ich
e
sani
zapi
i
domu
a
kolumnach pozwoli mu odnajdyw
wszystkie domy na sprzeda
za
pooone przy konkretnej ulicy tania.
pomoc jednego, prostego zapy

jeste tutaj 203

Tworzenie danych atomowych

Dane atomowe a Twoje tabele


Poniej przedstawilimy kilka pyta, ktre moesz sobie zada,
aby uatwi sobie okrelenie danych, jakie naley umieci
wtworzonych tabelach.

1. Co jest podstawowym

zagadnieniem
opisywanym przez tabel?

Czy tabela opisuje klownw, krow


y,
pczki, czy te politykw?

2. W jaki sposb bdziesz



korzysta z tabeli, by uzyskiwa


informacje o tym zagadnieniu?

3. Czy kolumny tabeli zawieraj

Projektuj tabele w taki


sposb, aby przeszukiwanie
ich byo jak najprostsze.

dane atomowe, dziki czemu


uywane zapytania mog by krtkie i precyzyjne?

Nie istniej

gupie pytania

P.:

P.: Wczym moe mi pomc stosowanie danych

O.: Nie. Tworzenie danych atomowych oznacza podzielenie ich

Moe Ci pomc wzapewnieniu, e informacje


przechowywane wtabeli bd precyzyjne. Jeli na przykad
utworzysz osobn kolumn przeznaczon do przechowywania
numeru domu, to bdziesz mg upewni si, e bd wniej
zapisywane wycznie liczby.

Czy atomy nie s bardzo mae? Czy nie


powinienem zatem dzieli swoich informacji na
naprawd bardzo mae elementy?
na najmniejsze elementy konieczne do stworzenia wydajnych
tabel, anie na podzielenie ich na najmniejsze moliwe elementy.
Nie naley dzieli danych bardziej ni to konieczne. Jeli nie
potrzebujesz dodatkowych kolumn, to nie twrz ich tylko
iwycznie dlatego, e mgby to zrobi.

204

Rozdzia 4.

atomowych?

O.:

Stosowanie danych atomowych pozwala take poprawi


efektywno wykonywanych zapyta, gdy same zapytania
s atwiejsze do napisania, aczas ich wykonania jest krtszy.
Korzyci, jakie zapewnia nam stosowanie danych atomowych,
s tym wyraniejsze, im wicej jest danych przechowywanych
wtabeli.

Projektowanie dobrych tabel

Zaostrz owek
Poniej przedstawilimy dwie oficjalne reguy dotyczce danych atomowych. Dla kadej z nich
narysuj dwie hipotetyczne tabele, ktre nie bd spenia wytycznych reguy.

Regua 1.: W kolumnie z danymi


atomowymi w jednym wierszu tabeli nie
moe si znajdowa kilka wartoci tego
samego typu.
Tej reguy nie spenia tabela
Grzeka moje_kontakty,
a konkretnie jej pole
zainteresowania.

Regua 2.: W tabeli zawierajcej dane


atomowe nie moe by kilku kolumn
zawierajcych dane tego samego typu.
enia
Tej reguy nie sprinki.
tabela proste_d

jeste tutaj 205

Zaostrz owek. Rozwizanie

Zaostrz owek

Rozwizanie

Poniej przedstawilimy dwie oficjalne reguy dotyczce danych atomowych. Dla kadej z nich
narysuj dwie hipotetyczne tabele, ktre nie bd spenia wytycznych reguy.

Regua 1.: W kolumnie z danymi


atomowymi w jednym wierszu tabeli nie
moe si znajdowa kilka wartoci tego
samego typu.
Oczywicie Twoja odpowied na pewno bdzie inna, ale oto jeden z moliwych przykadw:

poywienie

skadniki

chleb

drode, mleko, jajka, mka

saatka

pomidor, ogrek, saata

Czy pamitasz tabel


Zawieraa ona kolumnGrzeka?
zainteresowania, w kt
rej
Grzesiek zapisywa
niejednokrotnie kilka
rnych
zainteresowa danej
osoby,
przez co przeszukiwa
nie
byo prawdziwym koszm tabeli
arem.
Ta sama sytuacja wystpuje
w tej tabeli. Wyobra sobie
odszukanie pomidorw wrd
tych wszystkich pozostaych
skadnikw.

Regua 2.: W tabeli zawierajcej dane


atomowe nie moe by kilku kolumn
zawierajcych dane tego samego typu.
Zbyt wiele kolumn
podawania studentdo
w!

nauczyciel

206

student1

student2

student3

Pani Martini

Janek

Romek

Kasia

Pan Grog

Sonia

Tymon

Julia

Rozdzia 4.

Projektowanie dobrych tabel

wiczenie

Skoro ju znasz oficjalne reguy oraz trzy kroki pozwalajce na stosowanie danych
atomowych, przeanalizuj wszystkie tabele przedstawione do tej pory w ksice i wyjanij,
dlaczego zawieraj one dane atomowe, albo co sprawia, e zapisywane w nich informacje
nie s danymi atomowymi.

Tabela Grzeka, ze strony 83

Tabela z ocenami pczkw, ze strony 112

Tabela z informacjami o klownach, strona 155

Tabela drinkw, ze strony 93

Tabela pooww wdkarskich, strona 194

jeste tutaj 207

Normalizacja tabel

Dlaczego warto by normalnym?


Kiedy wyczerpie si Twj limit godzin na konsultacje
ze specjalist do spraw baz danych i bdziesz musia zatrudni
projektantw baz SQL, fajnie by byo, gdyby nie musia traci
cennych godzin na tumaczenie im, jak dziaaj Twoje tabele.
C, tworzenie tabel ZNORMALIZOWANYCH oznacza, e
s one zgodne z pewnymi standardami, ktre projektanci baz
danych bd rozumie. Co wicej, na pewno ucieszy Ci fakt,
i nasze tabele zawierajce dane atomowe s ju w poowie drogi
do owej normalnoci.

Rozwizanie
wiczenia

Zapisywanie w tabeli
danych atomowych jest
pierwszym krokiem na
drodze do tworzenia tabel
ZNOrMALIZOWANYCH.

Skoro ju znasz oficjalne reguy oraz trzy kroki pozwalajce na stosowanie danych atomowych,
przeanalizuj wszystkie tabele przedstawione do tej pory w ksice i wyjanij, dlaczego
zawieraj one dane atomowe, albo co sprawia, e zapisywane w nich informacje nie s danymi
atomowymi.

Tabela Grzeka, ze strony 83 Nie jest atomowa. Kolumny zainteresowania i szuka nie s zgodne z regu 1.
eniu od kolumn tabeli proste_drinki
Tabela z ocenami pczkw, ze strony 112 Tabela jest atomowa. W odrni wuje informacje rnego typu. Oprcz

kada kolumna tej tabeli przecho


tego, w odrnieniu od kolumny aktywnosci tabeli klownw w kadej
z kolumn tej tabeli przechowywany jest tylko jeden element informacji.

Tabela nie jest atomowa. W niektrych rekordach

Tabela z informacjami o klownach, strona 155 w kolumnie aktywnosci zapisywanych jest


wicej
czynnoci ni jedna, co jest sprzeczne z regu 1.

Tabela drinkw, ze strony 93

Tabela nie jest atomowa. Zawiera ona wicej ni jedn kolumn


skadnik, co jest sprzeczne z regu 2.

Tabela pooww wdkarskich, strona 194

208

Rozdzia 4.

Tabela jest atomowa. W kadej kolumnie s zapisywane


informacje innego typu.
Kada kolumna zawiera take tylko jedn informacj.

Projektowanie dobrych tabel

Zalety normalizacji tabel


1. W tabelach znormalizowanych
dane si nie powielaj, co pozwala
ograniczy wielko bazy.

Unikanie powielania
danych pozwoli
Ci zaoszczdzi
miejsce na dysku.

2. Dziki mniejszej iloci informacji


w bazie wszelkie zapytania bd
wykonywane szybciej.

Moje tabele nie s a tak


due. Dlaczego zatem mam
sobie zawraca gow jak
normalizacj?

Poniewa nawet w przypadku maych


tabel mona na tym zyska.
Poza tym w miar upywu czasu tabele staj si
coraz wiksze. Jeli od samego pocztku Twoje
tabele bd znormalizowane, to w przyszoci,
gdy zapytania zaczn by wykonywane zbyt wolno,
nie bdziesz musia ich modyfikowa.

jeste tutaj 209

Normalizacja i 1NF

Klowni nie s normalni


Czy pamitasz tabel z informacjami o publicznych wystpieniach
klownw? ledzenie poczyna klownw stao si oglnokrajowym
szalestwem i nasza stara tabela moe nie sprosta zwikszonym
wymaganiom, poniewa kolumny wyglad i aktywnosci zawieraj
tak wiele danych. Na nasze potrzeby ta tabela nie jest atomowa.

danych w tych
Wyszukiwanie ch jest naprawd
dwch kolumna wieraj one tak
za
trudne, gdy ji!
wiele informac

klowni_informacje
imie

ostatnio_widziano

wyglad

aktywnosci

Eklerka

Dom opieki Spokojna Ostoja

K, czerwone wosy, zielona sukienka, ogromne stopy

balony, may samochodzik

Pan Pimpu

Urodziny u Jacka Zieliskiego

M, pomaraczowe wosy, niebieski garnitur, ogromne stopy

mim

Pani Smyk

MegaStragan

K, ta koszula, workowate czerwone spodnie

trbka, parasolka

Pan Hobo

Cyrk Koloseum

M, cygaro, czarne wosy, niewielki kapelusz

skrzypce

Klarabela

Dom opieki Wesoa Wdwka

K, rowe wosy, ogromny kwiat, niebieska sukienka

krzyk, taniec

Skuter

Szpital Miejski

M, niebieskie wosy, czerwony garnitur, ogromny nos

balony

Zippo

Centrum Handlowe Skarbiec

K, pomaraczowy garnitur, workowate spodnie

taniec

Balbina

Auta Edwarda

K, caa na pomaraczowo i w cekinach

utrzymywanie rwnowagi, may samochodzik

M, w przebraniu kobiety, kostium w plamki

piew, taniec

M, zielono-fioletowy kostium, szpiczasty nos

wchodzenie do malutkiego samochodu

Gonzo
Pan Smyk

Zabawex

Zaostrz owek

Odpowiedzi znajdziesz na stronie 229

Sprbujmy tak zmodyfikowa tabel klowni_informacje, by staa si ona tabel atomow.


Sprbuj zaproponowa inn struktur tabeli, zakadajc przy tym, e chcemy wyszukiwa w niej
informacje na podstawie kolumn wyglad, aktywnosci oraz ostatnio_widziano.

210

Rozdzia 4.

Projektowanie dobrych tabel

W poowie drogi do 1NF


Pamitasz zapewne, e umieszczenie w tabeli danych atomowych
to jedynie poowa drogi do znormalizowania tabeli. Kiedy tabela
bdzie cakowicie znormalizowana, przyjmie ona PIERWSZ
POSTA NORMALN (ang. first normal form, w skrcie 1NF).
Aby tabela miaa pierwsz posta normaln, musi spenia
dwa warunki:

Kady wiersz danych musi


zawiera wartoci atomowe

k
Ju wiem, jan
zaspokoi te
wymg.

Aby cakowicie
znormalizowa tabel,
do kadego z jej
rekordw musimy
doda klucz gwny.

Kady wiersz danych musi


mie unikalny identyfikator,
nazywany kluczem gwnym
(ang. primary key).

WYSIL

szare komrki
Jak sdzisz, jakiego typu kolumny bd si nadaway
do tworzenia klucza gwnego?

jeste tutaj

211

Reguy klucza gwnego

Reguy KLUCZA GWNEGO


Kolumn, ktra ma peni rol klucza gwnego tabeli, naley
utworzy specjalnie w tym celu od razu podczas projektowania
tabeli. Na kilku kolejnych stronach utworzymy tabel i wskaemy
kolumn, ktra bdzie jej kluczem gwnym. Jednak zanim
to zrobimy, przyjrzymy si, czym ten klucz gwny jest.

Klucz gwny suy do zapewniania


unikalnoci wszystkich rekordw tabeli.
A to oznacza, e wartoci w kolumnie klucza
gwnego nie mog si powtarza. Przeanalizujmy
przykad tabeli przedstawionej poniej. Jak mylisz,
czy ktra z jej kolumn nadawaaby si na klucz gwny?

PESEL

nazwisko

Numery PESEL maj uni


kalne
wartoci i s przypisyw
ane
konkretnym osobom. Moe
zatem ta kolumna nadawa
aby
si na klucz gwny?

Uwaga!

numer

Kluczem
gwnym tabeli
nazywamy
kolumn, ktra
sprawia, e kady
wiersz tabeli jest
unikalny.

telefon

wartoci mog
W tych trzech kolumnach d z du doz
yka
prz
na
a;
tarz
pow
si
emy zaoy, e w tabeli
prawdopodobiestwa mo na osoba o imieniu Jan;
jed
ni
cej
wi
si
znajdzie
, e kilka osb bdzie
podobnie moe si zdarzy tego samego numeru
wa
uy
i
si
mieszka razem
kolumny raczej nie bd
telefonu. Dlatego te trzy klucza gwnego tabeli.
roli
nadaway na penienie

Zadbaj o swoje rekordy, uywajc kolumny PESEL


jako klucza gwnego tabeli.

Przy coraz czstszych kradzieach tosamoci coraz mniej osb zgodzi si


na podanie swojego numeru PESEL, co jest zreszt cakowicie zrozumiae.
Jest to zbyt wana informacja, by ryzykowa jej kradzie. Czy moesz z cakowit
pewnoci stwierdzi, e Twoja baza jest bezpieczna? Jeli nie, to wszystkie te numery
PESEL mog zosta skradzione wraz z tosamoci ich wacicieli.

212

Rozdzia 4.

Projektowanie dobrych tabel

W kolumnie klucza gwnego nie mog si


pojawia wartoci NULL.
Gdyby w kolumnie klucza gwnego mona byo zapisywa
wartoci NULL, to rekordy nie byyby unikalne, gdy warto
NULL mogaby si pojawi w kilku z nich.

Warto kolumny klucza gwnego musi zosta


okrelona w momencie dodawania rekordu
do tabeli.
Jeli warto kolumny klucza gwnego nie zostanie okrelona
w momencie dodawania rekordu, to ryzykujemy, e pojawi si
w niej warto NULL, co moe doprowadzi do powtrzenia si
tego samego rekordu w tabeli i naruszenia zasad pierwszej postaci
normalnej.

Klucz gwny musi by krtki.


Klucz gwny musi zawiera tylko te informacje, ktre s
niezbdne dla zapewnienia jego unikalnoci, i nic wicej.

Wartoci w kolumnie klucza gwnego nie mog


si zmienia.
Gdyby mona byo zmienia wartoci zapisane w kolumnie
klucza gwnego, to przypadkowo mona by poda warto,
ktra zostaa ju uyta. Pamitaj, wszystkie wartoci w kolumnie
klucza gwnego zawsze musz by unikalne.

WYSIL

szare komrki
Czy na podstawie tych wszystkich informacji moesz poda przykad dobrego klucza
gwnego?
Przejrzyj przykadowe tabele, ktre przedstawilimy we wczeniejszej czci ksiki.
Czy w ktrej z nich jest kolumna zawierajca naprawd unikalne wartoci?

jeste tutaj 213

Kolejne informacje o kluczach gwnych

Chwila, a zatem, skoro nie mog uy numeru PESEL


jako klucza gwnego, a jednoczenie wartoci
w tej kolumnie wci musz by unikalne, krtkie
i niezmienne, to co to moe by?
Najlepszym kluczem gwnym moe by
nowy klucz gwny.
Wprzypadku tworzenia kluczy gwnych najlepszym inajprostszym
rozwizaniem jest utworzenie kolumny, ktra bdzie zawiera
unikalne liczby. Wyobra sobie tabel zawierajc informacje
oosobach, wktrej umiecisz dodatkow kolumn liczbow.
Wprzykadzie przedstawionym poniej jest to kolumna id.
Gdyby nie kolumna id, to dwa rekordy Janka Kowalskiego
byyby identyczne. Jednak poniewa istnieje klucz gwny, oba te
rekordy reprezentuj rne osoby. Azatem klucz gwny zapewnia
unikalno tych dwch rekordw. Ponisza tabela jest wpierwszej
postaci normalnej.
id

nazwisko

imie

pseudonim

Kowalski

Janek

Pierun

Paciorek

Krystyna

Krycha

Kowalski

Janek

Pierun

lusarczyk

Anna

Ania

Paprocki

Krzysztof

Krzych

Kowalskiego.
Rekord Janka

Ten rekord take zawiera dane


Janka Kowalskiego, jednak
warto w kolumnie klucza
gwnego pokazuje, e jest
to unikalny rekord i dotyczy
cakowicie innej osoby ni
pierwszy Janek Kowalski.

Dla maniakw
Wwiecie SQL-atrwa niekoczca si debata na temat
tego, czy naley uywa syntetycznych kluczy gwnych,
czyli specjalnie utworzonych (takich jak nasza kolumna id), czy te kluczy
naturalnych tworzonych na podstawie informacji, ktre ju s zapisane
wtabeli (takich jak numer nadwozia lub PESEL). Nie preferujemy adnego
ztych rozwiza, azagadnieniami zwizanymi zkluczami gwnymi
zajmiemy si bardziej szczegowo wrozdziale 7.

214

Rozdzia 4.

Projektowanie dobrych tabel


Nie istniej

gupie pytania

P.:

Cay czas mwicie opierwszej postaci


normalnej. Czy to oznacza, e istnieje te druga
posta normalna? Amoe itrzecia?

O.:

Nie. Jak na razie adna ze stworzonych przez nas tabel nie


zawiera ani klucza gwnego, ani wartoci unikalnych.

P.:

O.: Owszem, faktycznie istniej take druga itrzecia posta

Wydaje mi si, e kolumna komentarze


wtabeli opczkach nie zawiera wartoci
atomowych. Chodzi mi oto, e nie ma adnego
prostego sposobu przeszukiwania jej zawartoci.

P.: No dobrze, zatem zmienilimy nasze tabele

Masz cakowit racj. Ta kolumna raczej nie jest szczeglnie


atomowa. Cho zdrugiej strony, projekt naszej tabeli nie narzuca
takiej koniecznoci. Gdybymy jednak zdecydowali si na
ograniczenie zawartoci opinii do cile okrelonej grupy sw,
to to pole mogoby by atomowe. Jednak wtakim przypadku
zapisywane wbazie opinie nie byyby spontaniczne.

normalna, akada znich narzuca coraz to bardziej wymagajce


warunki na struktur izawarto tabel. Zajmiemy si nimi
dokadniej wrozdziale 7.
wtaki sposb, by zawieray dane atomowe. Czy
ktra znich znajduje si ju wpierwszej postaci
normalnej?

O.:

Denie do pierwszej postaci NORMALNEJ


Nadszed czas, by nieco si cofn izaj si normalizacj naszych tabel.
Musimy postara si, by zapisane wnich informacje byy atomowe, idoda
do nich klucze gwne. Klucz gwny tabeli jest zazwyczaj okrelany
podczas tworzenia tabeli, czyli pisania polecenia CREATE TABLE.

WYSIL

szare komrki
Czy pamitasz, jak mona dodawa kolumny
do istniejcych tabel?

jeste tutaj 215

Poprawianie tabeli Grzeka

Poprawianie tabeli Grzeka


W jaki sposb bazujc na zdobytych ju informacjach powiniene poprawi
tabel Grzeka:

Poprawa tabeli Grzeka krok 1.: Pobierz wszystkie informacje


zapisane w tabeli, uywajc w tym celu polecenia SELECT,
i zapisz je gdzie.
Poprawa tabeli Grzeka krok 2.: Utwrz now,
znormalizowan tabel.
Poprawa tabeli Grzeka krok 3.: Zapisz wszystkie stare dane
w nowej tabeli, modyfikujc dane w kadym z wierszy
w taki sposb, by odpowiaday one nowej strukturze tabeli.
Teraz moesz usun star wersj tabeli poleceniem DROP.

Chwileczk, ale ja ju mam tabel


z ca mas informacji. Chyba nie jestecie powani,
jeli oczekujecie, e usun tabel jak w pierwszym
rozdziale i bd ponownie wpisywa ca jej zawarto
tylko i wycznie po to, eby utworzy
kolumn klucza gwnego.

Mamy pewno, e tabela Grzeka


nie jest doskonaa.
Tabela Grzeka nie jest atomowa inie ma klucza gwnego.
Jednak, na szczcie dla Grzeka, nie jestemy skazani na star
tabel ani nie musimy kopiowa iponownie wpisywa jej
zawartoci.
Moemy doda do tabeli Grzeka klucz gwny izapewni
atomowo danych przy uyciu jednego, nowego polecenia SQL.
Jednak zanim to zrobimy, cofnijmy si nieco wprzeszo

216

Rozdzia 4.

Projektowanie dobrych tabel

Oryginalna posta polecenia CREATE TABLE


Grzesiek musi doda do swojej tabeli klucz gwny; oprcz tego zdaje sobie spraw, e
jest kilka rzeczy, ktre moe zrobi, by poprawi atomowo informacji zapisywanych
w tabeli. Zanim przekonamy si, w jaki sposb mona poprawi istniejc tabel,
przypomnij sobie, jak j utworzylimy.
Oto posta polecenia CREATE TABLE, ktrego uylimy do utworzenia tabeli Grzeka
dawno temu, w rozdziale 1.:

W tej tab
nie ma eli
kolumny
klucza
gwnego
.

CREATE TABLE moje_kontakty


(
nazwisko VARCHAR(30),
imie VARCHAR(20),
email VARCHAR(50),
plec CHAR(1),
data_urodzenia DATE,
zawod VARCHAR(50),
lokalizacja VARCHAR(50),
stan VARCHAR(20),
zainteresowania VARCHAR(100),
szuka VARCHAR(100)
);

bel,
Czy tworzc ta i
aw
pr
po
y
em
mo
ch kolumn?
atomowo ty

WYSIL

szare komrki
A co zrobi, gdybymy nie mieli nigdzie zanotowanego oryginalnego
polecenia CREATE TABLE uytego do utworzenia tabeli? Czy istnieje jaki
sposb dotarcia do jego kodu?

jeste tutaj 217

Wywietlanie kodu polecenia CREATE

tabel
Pokacie mi moj kas
A co by si stao, gdyby zastosowa polecenie DESCRIBE
moje_kontakty, by podejrze kod uyty do utworzenia
tej tabeli? Ot gdyby to zrobi, w oknie konsoli ujrzaby
nastpujce wyniki:

Ale nam zaley na dotarciu do kodu polecenia CREATE, a nie do informacji


o polach tabeli. W ten sposb bdziemy bowiem mogli unikn koniecznoci
ponownego wpisywania polecenia i okreli, co powinnimy zrobi ju podczas
tworzenia tabeli.
Polecenie SQL SHOW CREATE TABLE wywietli kod polecenia CREATE TABLE,
ktre pozwoli odtworzy tabel, oczywicie bez adnych danych. Dziki niemu
w dowolnej chwili moemy si przekona, w jaki sposb naley odtworzy
dan tabel. Sprbuj wykona nastpujce polecenie:

SHOW CREATE TABLE moje_kontakty;

218

Rozdzia 4.

Projektowanie dobrych tabel

Polecenie oszczdzajce czas


Rzu okiem na kod polecenia, ktrego uylimy do utworzenia tabeli, przedstawiony
na stronie 217. Nastpnie porwnaj go z zamieszczonym poniej kodem zwrconym
przez polecenie SHOW CREATE TABLE moje_kontakty. Nie s one identyczne, jednak
gdyby wykona ponisze polecenie CREATE TABLE, to uzyskane wyniki byyby takie
same, jak w przypadku uycia oryginalnego polecenia. Nie musisz usuwa znakw
lewego apostrofu ani ustawie dotyczcych wartoci domylnych, jeli jednak to zrobisz,
to polecenie bdzie bardziej przejrzyste i schludne.
Pomidzy takimi znakam
i,
s zapisywane nazwy kolu okrelanymi jako lewy apostrof,
lewego apostrofu s uy mn oraz nazwa tabeli. Znaki
wan
przez polecenie SHOW CRE e w wynikach generowanych
ATE TABLE.
inaczej,
Jeli jawnie nie zadamy
to system zarzdzania baztoci
danych przyjmuje, e war uj
wszystkich kolumn przyjm
domylnie warto NULL.
Podczas tworzenia tabeli
warto okreli, czy
w jej poszczeglnych
kolumnach mog by
zapisywane wartoci
NULL, czy te nie.

CREATE TABLE `moje_kontakty`


(
`nazwisko` varchar(30) default NULL,
`imie` varchar(20) default NULL,
`email` varchar(50) default NULL,
`plec` char(1) default NULL,
`data_urodzenia` date default NULL,
`zawod` varchar(50) default NULL '',
`lokalizacja` varchar(50) default NULL '',
`stan` varchar(20) default NULL '',
`zainteresowania` varchar(100) default NULL '',
`szuka` varchar(100) default NULL ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1
wiersz
Nie musisz zwraca uwagi na ostatni
kajcym.
kodu, umieszczony za nawiasem zamy ch
Okrela on sposb przechowywania dany w
oraz uywany zbir znakw. Jak na razie lne.
domy
zupenoci wystarcz nam ustawienia
Aby wykona to polecenie,
bdziesz musia zmieni nazw
tabeli; no chyba e wczeniej
usuniesz oryginaln tabel.

Cho mona by poprawi


przejrzysto kodu (usuwajc jego
ostatni wiersz oraz wszystkie
znaki lewego apostrofu), to
jednak by utworzy tabel,
nie trzeba wprowadza w nim
adnych modyfikacji wystarczy
go skopiowa i wklei
w przedstawionej postaci.
jeste tutaj 219

Polecenie CREATE TABLE i klucze gwne

Tworzenie tabeli z KLUCZEM GWNYM


Poniej przedstawilimy kod, ktry zwrcio polecenie SHOW CREATE TABLE
moje_kontakty. Usunlimy z niego znaki lewego apostrofu oraz fragment
ostatniego wiersza. Na samym pocztku listy kolumn dodalimy kolumn
id_kontaktu, ktrej wartoci, dziki zastosowaniu wyraenia NOT NULL,
nie bd mogy przybiera wartoci NULL. Z kolei na samym kocu listy
dodalimy wyraenie PRIMARY KEY, ktre okrela, e kluczem gwnym
tabeli ma by nasza nowa kolumna id_kontaktu.

Utworzylimy now
kolumn o nazwie
id_kontaktu, w ktrej
bd zapisywane
wartoci liczbowe.
Kolumna ta bdzie peni
funkcj klucza gwnego
naszej tabeli. Kada
warto w tej kolumnie
bdzie unikalna, dziki
czemu caa tabela stanie
si tabel atomow.

CREATE TABLE moje_kontakty


(
id_kontaktu INT NOT NULL,
nazwisko varchar(30) default NULL,
imie varchar(20) default NULL,
email varchar(50) default NULL,
plec char(1) default NULL,
data_urodzenia default NULL,
zawod varchar(50) default NULL,
lokalizacja varchar(50) default NULL,
stan varchar(20) default NULL,
zainteresowania varchar(100) default NULL,
szuka varchar(100) default NULL,
PRIMARY KEY (id_kontaktu)
)
To wanie w tym miejscu okrelamy klucz
gwny
tabeli. Skadnia uywana do tego celu
jest
prosta wystarczy zapisa sowa PRIM naprawd
a nastpnie poda w nawiasach nazw ARY KEY,
kolumny
klucza gwnego. W naszym przypadku
kluczem
gwnym bdzie kolumna id_kontaktu.

220

Rozdzia 4.

Pamitaj, e zawarto kolumny


a
klucza gwnego musi by rn
od NULL NOT NULL! Gdyby
wkolumnie klucza gwnego
pojawia si warto NULL lub to
gdyby mona byo pomin war
zapisywan wtej kolumnie, to
nie moglibymy zagwarantowa,
e wszystkie wiersze tabeli bd
identyfikowane wjednoznaczny,
unikalny sposb.

Projektowanie dobrych tabel

Nie istniej

gupie pytania

P.: Zatem mwicie, e KLUCZ GWNY nie moe

przybiera wartoci NULL. Co jeszcze zapewnia jego


unikalno?

O.:

Najprociej rzecz ujmujc jedynie Ty. Zapisujc wtabeli kady


nowy wiersz, wkolumnie id_kontaktu bdziesz umieszcza now,
unikaln warto. Na przykad wpierwszym wydawanym poleceniu
INSERT wkolumnie id_kontaktu zapiszesz warto 1, wkolejnym
wierszu warto 2 itak dalej.

P.: Wyobraam sobie, e takie okrelanie unikalnych


wartoci KLUCZA GWNEGO wkadym nowym
rekordzie musi by naprawd kopotliwe. Czy nie ma
adnego prostszego rozwizania?

O.:

Owszem, s prostsze rozwizania; ito nawet dwa. Pierwszym


znich jest zastosowanie jako klucza gwnego jakiej istniejcej
kolumny danych, oktrej wiemy, e ma unikalne wartoci.
Wspominalimy jednak, e takie rozwizanie moe przysparza
pewnych problemw (na przykad wprzypadku stosowania
numerw PESEL uytkownicy mog si obawia przejcia swoich
poufnych informacji przez niepodane osoby).
Prostym rozwizaniem jest utworzenie zupenie nowej kolumny,
przeznaczonej do przechowywania unikalnych wartoci klucza
gwnego, takiej jak kolumna id_kontaktu na poprzedniej stronie.
Wtakim przypadku mona nakaza systemowi obsugi baz danych,
by automatycznie wypenia warto takiej kolumny wkadym
rekordzie dodawanym do tabeli. Do tego celu suy specjalne sowo
kluczowe. Zajrzyj na nastpn stron tam znajdziesz wicej
informacji na ten temat.

P.:

Czy polecenia SHOW mog uywa take


do wywietlania innych informacji, czy tylko do
odtworzenia polecenia CREATE TABLE?

O.:

Polecenia SHOW mona take uywa do wywietlania


informacji okonkretnych kolumnach:
SHOW COLUMNS FROM nazwa_tabeli;
To polecenie wywietli nazwy wszystkich kolumn podanej tabeli wraz
ze wszystkimi informacjami na ich temat.
SHOW CREATE DATABASE nazwa_bazy_danych;
Powysze polecenie, podobnie jak polecenie SHOW CREATE TABLE
nazwa_tabeli;, zwraca kod polecenia CREATE, ztym e wtym
przypadku bdzie to polecenie suce do utworzenia caej bazy
danych.

SHOW INDEX FROM nazwa_tabeli;


Zkolei to polecenie wywietli wszystkie kolumny, dla ktrych
zdefiniowano indeksy, wraz zinformacjami na temat typw
tych indeksw. Jak na razie jedynym typem indeksw, zjakim si
zetknlimy, by klucz gwny, jednak wdalszej czci ksiki to
polecenie stanie si znacznie bardziej przydatne.
Istnieje jeszcze jedna wersja polecenia SHOW, ito wersja BARDZO
uyteczna:
SHOW WARNINGS;
Jeli woknie konsoli pojawi si informacja, e podczas wykonywania
polecenia SQL pojawiy si jakie ostrzeenia, to uyj tego polecenia,
by wywietli ich tre.
Dostpne s jeszcze inne wersje polecenia SHOW, jednak te
przedstawione powyej dotycz zagadnie, ktrymi si ju
zajmowalimy.

P.:

No aco ze znakami lewego apostrofu, ktre


zostay uyte wkodzie zwrconym przez polecenie
SHOW CREATE TABLE? Czy jestecie pewni, e nie s
potrzebne?

O.:

S one uywane dlatego, e wniektrych przypadkach


system zarzdzania bazami danych moe nie by wstanie okreli,
e nazwa ma by nazw kolumny. Jeli jednak zapiszesz nazwy
kolumn pomidzy znakami lewego apostrofu, to istnieje moliwo
stosowania sw kluczowych jzyka SQL jako nazw kolumn; cho
absolutnie nie polecamy takiego rozwizania.
Na przykad wyobramy sobie, e zjakich niewytumaczalnych
powodw chcielibymy nada kolumnie nazw select. Ponisza
deklaracja kolumny jest jednak nieprawidowa:
select varchar(50)
Zamiast niej musielibymy uy nastpujcej deklaracji:
`select` varchar(50)

P.:

Aniby czemu stosowanie sw kluczowych jzyka


SQL jako nazw kolumn jest zym rozwizaniem?

O.:

Oczywicie wolno to robi, jednak nie jest to dobry pomys.


Pomyl tylko, jak mylce itrudne do zrozumienia mog si sta
zapytania oraz jak mczce bdzie wpisywanie tych wszystkich
znakw lewego apostrofu. Poza tym select nie jest dobr nazw
dla kolumny, gdy nie mwi nic odanych, jakie s wniej zapisywane.

jeste tutaj 221

Sowo kluczowe AUTO_INCREMENT

1, 2, 3 automatycznie inkrementowane
Dodanie do naszej kolumny id_kontaktu sowa kluczowego
AUTO_INCREMENT nakae, by w pierwszym wierszu tabeli przyja
ona warto 1, a w kadym kolejnym bya powikszana o 1.
systemw
To jest to! Wwikszoci wystarczy
ych
dan
ami
baz
ania
dz
zarz
a sowo
do deklaracji kolumny dod
NT.
EME
NCR
O_I
AUT
kluczowe
itajcie:
(Uytkownicy MS SQL pam to sowo
zie
wWaszym przypadku bd naley
kluczowe INDEX, po ktrymoraz liczb,
poda warto pocztkow wartoci
oktr bd powikszane
ch. Bardziej
wposzczeglnych kolumna ten temat
na
cje
rma
info
e
szczegow
tacji
mona znale wdokumen
serwera MS SQL).

CREATE TABLE moje_kontakty


(
id_kontaktu INT NOT NULL AUTO_INCREMENT ,
nazwisko varchar(30) default NULL,
imie varchar(20) default NULL,
email varchar(50) default NULL,
To sowo kluczowe robi dokadnie
to, czego mona by si spodziewa:
plec char(1) default NULL,
sprawia, e w pierwszym wierszu
tabeli, w danej kolumnie zostanie
data_urodzenia default NULL,
automatycznie zapisana warto 1,
ktra w kolejnych wierszach bdzie
zawod varchar(50) default NULL,
automatycznie powikszana o 1.
lokalizacja varchar(50) default NULL,
stan varchar(20) default NULL,
zainteresowania varchar(100) default NULL,
szuka varchar(100) default NULL,
PRIMARY KEY (id_kontaktu)
)
No dobrze, to chyba faktycznie
jest proste. Ale w jaki sposb zapisa
w tabeli wiersz, w ktrym warto takiej
kolumny bdzie ju okrelona? Poza tym,
czy mona zmieni warto zapisan
w takiej kolumnie?
A jak mylisz, co si w takich
przypadkach stanie?
Najlepiej bdzie, jeli sam sprbujesz
wykona takie operacje, i przekonasz si,
jakie bd ich skutki.

222

Rozdzia 4.

Projektowanie dobrych tabel

1.
wiczenie

Poniej, w pustych wierszach, zapisz kod polecenia CREATE TABLE, ktre pozwoli utworzy tabel
suc do przechowywania imion i nazwisk osb. Powinna ona zawiera kolumn klucza gwnego,
ktrej wartoci bd automatycznie inkrementowane, oraz dwie kolumny atomowe.

2. Wykonaj powysze polecenie w oknie konsoli bazy danych lub innym programie do
zarzdzania baz.

3. Sprbuj wykona kade z poniszych polece INSERT. Zakrel te, ktre dziaaj
prawidowo.

INSERT INTO twoja_tabela (id, imie, nazwisko)


VALUES (NULL, 'Marysia', 'Krawczyk');
INSERT INTO twoja_tabela (id, imie, nazwisko)
VALUES (1, 'Janka', 'Krawczyk');
INSERT INTO twoja_tabela
VALUES ('', 'Bartek', 'Krawczyk');
INSERT INTO twoja_tabela (imie, nazwisko)
VALUES ('Cecylia', 'Krawczyk');
INSERT INTO twoja_tabela (id, imie, nazwisko)
VALUES (99, 'Piotr', 'Krawczyk');

4. Czy udao si zapisa w tabeli informacje o wszystkich czonkach rodziny


Krawczykw? Zapisz poniej zawarto tabeli po wykonaniu wszystkich
poniszych polece.

twoja_tabela

id

imie

nazwisko

jeste tutaj 223

Rozwizanie wiczenia

Rozwizanie
wiczenia

1.

Poniej, w pustych wierszach, zapisz kod polecenia CREATE TABLE, ktre pozwoli utworzy tabel
suc do przechowywania imion i nazwisk osb. Powinna ona zawiera kolumn klucza gwnego,
ktrej wartoci bd automatycznie inkrementowane, oraz dwie kolumny atomowe.

CREATE TABLE twoja_tabela


(
id INT NOT NULL AUTO_INCREMENT,
imie VARCHAR(20),
nazwisko VARCHAR(30),
PRIMARY KEY (id)
);

2. Wykonaj powysze polecenie w oknie konsoli bazy danych lub innym programie do
zarzdzania baz.

3. Sprbuj wykona kade z poniszych polece INSERT. Zakrel te, ktre dziaaj
prawidowo.

INSERT INTO twoja_tabela (id, imie, nazwisko)


VALUES (NULL, 'Marysia', 'Krawczyk');
INSERT INTO twoja_tabela (id, imie, nazwisko)
VALUES (1, 'Janka', 'Krawczyk');
INSERT INTO twoja_tabela
VALUES ('', 'Bartek', 'Krawczyk');
INSERT INTO twoja_tabela (imie, nazwisko)
VALUES ('Cecylia', 'Krawczyk');
INSERT INTO twoja_tabela (id, imie, nazwisko)
VALUES (99, 'Piotr', 'Krawczyk');

4. Czy udao si zapisa w tabeli informacje o wszystkich czonkach rodziny


Krawczykw? Zapisz poniej zawarto tabeli po wykonaniu wszystkich
poniszych polece.

To ostatnie polecenie
zadziaa,jednak
zmodyfikuje warto
kolumny
AUTO_INCREMENT.

224

Rozdzia 4.

twoja_tabela

id

imie

nazwisko

Marysia

Krawczyk

Bartek

Krawczyk

Cecylia

Krawczyk

99

Piotr

d Krawczyk

Wyglda na to, e
zgubilimy Jank; zapewne
dlatego, e prbowalimy
jej przypisa indeks,
ktry zosta ju uyty
w rekordzie Marysi.
Marysia, Marysia, Marysia
!

Projektowanie dobrych tabel


Nie istniej

gupie pytania

P.:

Dlaczego pierwsze polecenie, to z wartoci NULL


w kolumnie id, zadziaao? Przecie ta kolumna zostaa
zadeklarowana jako NOT NULL.

O.:

Faktycznie wyglda to tak, jakby to polecenie zadziaao, cho nie


powinno. Okazuje si jednak, e w przypadku uycia AUTO_INCREMENT
wartoci NULL s ignorowane. Oczywicie, gdybymy nie umiecili
w deklaracji kolumny sowa kluczowego AUTO_INCREMENT, to prba
wykonania takiego polecenia spowodowaaby zgoszenie bdu, a rekord
nie zostaby zapisany. Sprbuj sam, a si przekonasz.

Suchajcie, nie mog powiedzie,


ebycie mnie przekonali. Jak wida, posugujc si
poleceniem SHOW CREATE TABLE, mog uzyska i wykona
kod, ktry utworzy tabel; jednak cay czas mam wraenie,
e bd musia usun swoj oryginaln tabel i ponownie,
od nowa, wpisa ca jej zawarto tylko i wycznie po to,
by doda kolumn klucza gwnego.

Nie bdziesz musia wpisywa wszystkiego


od nowa. Wystarczy, e uyjesz polecenia
ALTER.
Nie trzeba kopiowa danych zapisanych w istniejcej
tabeli, a nastpnie jej usuwa i tworzy od nowa. Mona
bowiem modyfikowa struktur istniejcych tabel.
Jednak eby to zrobi, musimy sign po polecenie
ALTER i kilka uywanych przez niego sw kluczowych,
ktre opisalimy w rozdziale 5.

jeste tutaj 225

226

Rozdzia 4.
da
A to kod, ktry do n.
do tabeli now kolum
Czy nie wyglda
znajomo?

Powiniene ju rozpozna ten kod


wskazuje on kolumn, ktra
bdzie peni rol klucza gwnego.

Czy sdzisz, e powysze polecenie doda wartoci do kolumny id_kontaktu w ju istniejcych rekordach
tabeli czy tylko w rekordach, ktre dopiero bd w niej zapisywane? Jak moesz to sprawdzi?

szare komrki

WYSIL

Dziaanie sw ADD COLUMN jest


zgodne z ich znaczeniem w jzyku
angielskim dodaj do tabeli now
kolumn. W naszym przypadku kolumna
ta bdzie nosi nazw id_kontaktu.

ALTER TABLE moje_kontakty


ADD COLUMN id_kontaktu INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (id_kontaktu);

Oto nasze nowe polecenie


SQL ALTER.

FIRST to sowo, kt
re
nakazuje, by nowa
kolumna zostaa dod
ana
jako pierwsza kolum
na
tabeli. Cho nie ma
to
wikszego znaczenia
,
to jednak umieszczani
klucza gwnego jak e
o
pierwszej kolumny tab
jest dobrym pomysem eli
.

Dodawanie klucza gwnego

Dodawanie KLUCZA GWNEGO do istniejcej tabeli


Poniej przedstawilimy kod, ktry pozwoli doda do tabeli
moje_kontakty kolumn klucza gwnego, ktrej wartoci bd
automatycznie inkrementowane. (Polecenie jest naprawd dugie,
wic bdziesz musia obrci ksik, eby je przeczyta).

Projektowanie dobrych tabel

Modyfikacja tabeli i dodanie KLUCZA GWNEGO


Sprawd wyniki dziaania polecenia ALTER przedstawionego na poprzedniej
stronie. Wybierz baz danych lista_grzesia poleceniem USE i wykonaj
polecenie:

Ten komunikat
informuje nas, e
polecenie dodao
now kolumn
do 37 rekordw,
ktre ju byy
zapisane wbazie.
Ty zapewne nie
bdziesz ich mie
a tak wielu.

Zajefajnie
Teraz ju mam kolumn klucza
gwnego wraz z odpowiednimi
wartociami. Czy mog uy polecenia
ALTER take do dodania kolumny do
zapisywania numeru telefonu?

Aby sprawdzi, co si zmienio w tabeli Grzeka,


wykonaj polecenie SELECT * FROM moje_kontakty;.
Kolumna id_konta
ktu
zostaa dodana jak
pierwsza przed o
wszystkimi pozosta
ymi
kolumnami.

Poniewa uylimy
sowa kluczowego
AUTO_INCREMENT,
zawarto tej kolumny
bya uzupeniana
podczas modyfikowania
poszczeglnych,
istniejcych ju
wierszy tabeli.

Kiedy w przyszoc
to w jego kolumnie i bdziemy dodawali nowy rekord,
warto ojeden wi id_kontaktu zostanie zapisana
zapisanej w caej ksza od najwikszej wartoci
A zatem, jeli w tabeli w kolumnie id_kontaktu.
os
w kolumnie kontakt_tatnim dodawanym rekordzie
to w kolejnym rek id znajduje si warto 23,
ordzie znajdzie si
warto 24.

jest
Pamitaj, to nie ka;
ze
Gr
li
be
ta
koniec
ajduje
tak naprawd zn wiele
si w niej jeszcze
innych kontaktw.

Czy Grzekowi uda si doda kolumn do zapisywania numeru telefonu?


Zajrzyj do rozdziau 5., eby sprawdzi, czy to moliwe.

jeste tutaj 227

Przegld SQL-a

ROZDZIA 4

Przybornik SQL
A zatem opanowae materia z czwartego
rozdziau ksiki. Przyjrzyj si jeszcze raz
wszystkim nowym narzdziom, jakie dodae
do swojego SQL-owego przybornika. Kompletn
list porad znajdziesz w dodatku C, zamieszczonym na
kocu ksiki.
DANE ATOMO
WE
Dane w tabeli
s atomowe,
jeli zostay
ju podzielone
na
najmniejsze el
ementy, ktre
s
Ci potrzebne.

1.
REGUA

E
TOMOW
to
DANE A
mowe,
by ato moe
j
a
m
ne
ie
SHOW
Jeli da ej kolumnie n
CREATE
m
entw
a
m
s
le
j
e
a
TABLE
k
w te
il
a k
w
o
S
.
u
k
jd
o
p
a
r
y
n
z
t
y
s
o
t
g
a
e
si z
j
m
z tego
by pozn
tego sa
polece
a ska
danych
.
2
A
dni po nia,

SQL, kt
U
G
E
R
lecenia
r
E
istniej e pozwoli Ci o
TOMOW
owe,
m
c
dtworzy
o
t

DANE A
a
t
abel.
yy

tabeli b ajdowa
w
e
n
a
n
d
z
y
j
b
ie
A
n
ch
e si w
ierajcy u.
nie mo
w
a
z
n
PIERWSZ
m
lu
o
o
k
eg typ
A POSTA
kilka
NORMA
ego sam
t
(1
NF)
je
c
a
LNA
inform
K
a

d
y wiersz
Y
danych m
GWN
zawiera
ktre
usi
,
KLUCZ
n
m
lu
dane atom
o
k
r
i
b
z
o
j
w
u
u
b
e
n
k
ik
lu
oraz
fi
alny identy
enty
Kolumna
fikator.
osb id
p
s
y
ln
w unika beli.
ta
wiersze
AUTO_INCREM

ENT
Zastosowanie
tego sowa
kluczowego w
deklaracji
tabeli sprawi,
e w momenci
e
wykonywania
polece INSER
T
w danej kolu
mnie bd si

automatycznie
i magicznie
pojawiay uni
kalne liczby
cakowite.

228

Rozdzia 4.

Projektowanie dobrych tabel

Zaostrz owek

Rozwizanie

Sprbujmy tak zmodyfikowa tabel klowni_informacje, by staa si ona tabel atomow.


Sprbuj zaproponowa inn struktur tabeli, zakadajc przy tym, e chcemy wyszukiwa
w niej informacje na podstawie kolumn wyglad, aktywnosci oraz ostatnio_widziano.

Wtym przypadku nie ma jednego, waciwego rozwizania.


Najlepsz rzecz, jak moesz zrobi, jest wydzielenie takich informacji
jak pe, kolor koszuli, kolor spodni, typ kapelusza, instrument muzyczny,
rodek lokomocji, balony (pole logiczne tak lub nie), piew (take pole
logiczne zwartociami tak lub nie), taniec (take pole logiczne).
Aby zapewni atomowo tabeli, musiaby wydzieli te wszystkie
aktywnoci iumieci je wosobnych kolumnach, ipodobnie zrobi
zinformacjami owygldzie.
Dodatkowe punkty moesz sobie przyzna, jeli chciae rozbi
adres iumieci te informacje wtakich kolumnach jak adres,
miejscowo iwojewdztwo.

jeste tutaj 229

You might also like