Atrybuty kolumn, indeksowanie, typy kolumn
Podczas tych zajęć omówimy nowe elementy SQL, które wystąpiły podczas tworzenia tabel:
Atrybuty kolumn
Analizując polecenie SQL, za pomocą którego tworzymy nową tabelę, możemy zauważyć, że niektóre kolumny posiadają atrybuty wyróżniające je spośród innych kolumn:
-
NOT NULL
- w każdym rekordzie kolumny oznaczonej tym atrybutem, musi znajdować się jakaś wartość. Jeżeli ten atrybut został pominięty, mamy sytuację przeciwną - w danej kolumnie, mogą znajdować się pola pusteNULL
. -
AUTO_INCREMENT
- dosłownie automatyczny przyrost. Stosuje się dla liczb całkowitych. Jeżeli utworzymy nowy rekord, to MYSQL automatycznie doda w tej kolumnie unikalny identyfikator - liczbę o jeden większą od największej z liczb znajdujących się w kolumnie. Jak łatwo się domyślić, taki atrybut stosujemy w kolumnie, która jest kluczem głównym tabeli. Kolumny z tym atrybutem muszą być indeksowane. Indeksy, to struktury danych umożliwiające szybkie wyszukiwanie danych w bazie danych. Mówiąc krótko - bez indeksów, baza danych działałaby bardzo powoli. Dobra wiadomość - w kolumnach, które zostały wskazane jako klucze, indeksy są tworzone automatyczne. Jest co prawda polecenie SQLCREATE INDEX
, ale na naszym poziomie nie będziemy go stosować. -
PRIMARY KEY
- kolumna jest kluczem głównym tabeli. Wynika z tego, że wartości tam wpisywane myszą być unikalne. Jak już powiedzieliśmy w poprzednim punkcie, MySQL automatycznie indeksuje takie kolumny. Dodając atrybutAUTO_INCREMENT
, powierzamy MySQL generowanie klucza - zapewnienie unikatowości oraz indeksowania. AtrybutPRIMARY KEY
, może być umieszczany za nazwą kolumny tylko w przypadku, gdy kluczem podstawowym tabeli jest tylko jedna kolumna. Jednak w tabeli ksiazki_zamowione, w skład klucza głównego wchodzą dwie kolumny, dlatego w tym przypadku klucz główny zdefiniowaliśmy następująco:PRIMARY KEY(zamowienie_id, isbn)
.
Typy kolumn
Podczas tworzenia nowej tabeli, należy każdej kolumnie przypisać odpowiedni typ danych. Podstawowe typy danych zostaną dokładnie omówione podczas następnych zajęć, teraz przyjrzyjmy się definiowanym przez nas tabelom bazy ksiegarnia_internetowa
. Zacznijmy od tabeli klienci
:
CREATE TABLE klienci
(
klient_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
nazwisko CHAR(50) NOT NULL,
adres CHAR(100) NOT NULL,
miejscowosc CHAR(30) NOT NULL
);
-
W pierwszej kolumnie
klient_id
mogą znajdować się tylko liczby całkowite nieujemne. Wynika to z zastosowania opisanych wcześniej atrybutówAUTO_INCREMENT
orazPRIMARY KEY
. Liczby całkowite określa się mianemINT
, natomiastUNSIGNED
wyklucza zastosowanie liczb ujemnych. -
W pozostałych kolumnach, mamy tak zwane łańcuchy znaków (zwane także ciągami znaków, często mówi się krótko - łańcuchy lub stringi). Ważna uwaga - w ujęciu programistycznym, pojęcie znaki jest inne niż potocznie kojarzone. Często myślimy o znakach interpunkcyjnych (kropka, przecinek, itp.), znakach specjalnych (©, czy ®) itp.), natomiast stringi, to pisane za pomocą klawiatury teksty.
'Ala ma kota'
to jest właśnie przykład łańcucha znaków. TypCHAR(50)
, definiuje łańcuchy zawierające nie więcej jak 50 znaków - jest to tak zwana długość łańcucha. Weźmy dla przykładu kolumnęnazwisko
- nawet jeżeli wpisane nazwisko zajmie mniej jak 50 znaków, to i tak zajmie ono tyle samo pamięci, jak nazwisko składajace się z 50 znaków - MySQL po prostu uzupełni spacjami pozostałe wolne miejsca. Tworząc bazę danych musimy oszczędnie gospodarować pamięcią - pamiętajmy, że tworzymy je dla zarządzania wielkimi zasobami danych.
Kolejne typy danych zauważymy analizując kod tworzący tabelę zamowienia
:
CREATE TABLE zamowienia
(
zamowienie_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
klient_id INT UNSIGNED NOT NULL,
wartosc FLOAT(6,2),
data DATE NOT NULL
);
-
Kolumna
wartosc
jest deklarowana, jakoFLOAT(6,2)
. Są to liczby zmiennoprzecinkowe znane Ci z matematyki jako liczby rzeczywiste. Na przykład liczby 6.23, 24.455 są przykładami liczb zmiennoprzecinkowych. Przy czym piszemy kropki, nie przecinki. Pierwsza liczba w nawiasach oznacza maksymalną liczbę cyfr jaka może być wyświetlona, natomiast liczba druga - ilość cyfr pokazywanych po przecinku. Złotówka ma 100 groszy, więc kwoty będą pokazywane z dokładnością do 2 miejsc po przecinku. -
W kolumnie
data
mamy dane typuDATE
wyświetlaną w formacie RRRR-MM-DD, np. 2014-10-29. -
Zwróć uwagę, że kolumna
wartosc
nie posiada atrybutuNOT NULL
. Nowe zamówienie, wpisujemy bowiem w tabelizamowienia
, następnie powinniśmy dodać nowe rekordy w tabeliksiazki_zamowione
i dopiero wtedy obliczyć wartość zamowienia. W momencie wpisywania nowego zamówienia, jego wartość nie zawsze jest znana, dlatego wartości polawartosc
mogą być nieokreślone.
Podobnie jak zamowienia
, jest tworzona tabela ksiazki
:
CREATE TABLE ksiazki
(
isbn CHAR(13) NOT NULL PRIMARY KEY,
autor CHAR(50),
tytul CHAR(100),
cena FLOAT(4,2)
);
-
Jak już wspominaliśmy numer
isbn
jest unikatowy dla każdej ksiązki, więc ta kolumna będzie kluczem głównym tej tabeli. -
We wszystkich kolumnach poza kluczem głównym, mogą znajdować się wartości
NULL
, ponieważ dopuszczamy możliwość stopniowego uzupełniania danych o nazwisko autora, tytuł czy cenę.
W tabeli ksiazki_zamowione
:
CREATE TABLE ksiazki_zamowione
(
zamowienie_id INT UNSIGNED NOT NULL,
isbn CHAR(13) NOT NULL,
ilosc TINYINT UNSIGNED,
PRIMARY KEY(zamowienie_id, isbn)
);
-
Pokazany jest sposób deklarowania klucza podstawowego, składającego się z dwóch kolumn:
zamowienie_id
orazisbn
. -
Typ
TINYINT UNSIGNED
oznacza liczby całkowite z zakresu 0..255.
W ostatniej z tabel recenzje_ksiazek
:
CREATE TABLE recenzje_ksiazek
(
isbn CHAR(13) NOT NULL PRIMARY KEY,
recenzja TEXT
);
-
Typ
TEXT
jest stosowany w przypadku długich tekstów.
Polecenia SHOW i DESCRIBE
Polecenia SHOW i DESCRIBE powodują wyświetlenie informacji o bazie danych oraz poszczególnych tabelach. Działanie przetestujemy wykonując ćwiczenia.
Ćwiczenie 3_4_1_1. Pokazanie listy tabel bazy ksiegarnia_internetowa
Otwórz bazę ksiegarnia_internetowa, zakładam że utworzyłeś w niej na poprzednicj zajęciach wszystkie tabele. Wpisz polecenie SQL SHOW TABLES
i wciśnij Wykonaj.
Ćwiczenie 3_4_1_2. Pokazanie informacji na temat wskazanej tabeli
Otwórz bazę ksiegarnia_internetowa, zakładam że utworzyłeś w niej na poprzednich zajęciach wszystkie tabele. Wpisz polecenie SQL DESCRIBE ksiazki
i wciśnij Wykonaj.