POWRÓT NA STRONĘ SZKOŁY

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 puste NULL.
  • 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 SQL CREATE 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 atrybut AUTO_INCREMENT, powierzamy MySQL generowanie klucza - zapewnienie unikatowości oraz indeksowania. Atrybut PRIMARY 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ów AUTO_INCREMENT oraz PRIMARY KEY. Liczby całkowite określa się mianem INT, natomiast UNSIGNED 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. Typ CHAR(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, jako FLOAT(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 typu DATE wyświetlaną w formacie RRRR-MM-DD, np. 2014-10-29.
  • Zwróć uwagę, że kolumna wartosc nie posiada atrybutu NOT NULL. Nowe zamówienie, wpisujemy bowiem w tabeli zamowienia, następnie powinniśmy dodać nowe rekordy w tabeli ksiazki_zamowione i dopiero wtedy obliczyć wartość zamowienia. W momencie wpisywania nowego zamówienia, jego wartość nie zawsze jest znana, dlatego wartości pola wartosc 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 oraz isbn.
  • 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.

Lista tabel bazy ksiegarnia_internetowa
Rysunek 3_4_1_1. Lista tabel bazy ksiegarnia_internetowa

Ć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.

Pokazanie informacji na temat tabeli ksiazki
Rysunek 3_4_1_2. Pokazanie informacji na temat tabeli ksiazki