Tworzenie tabel cz. 2

Zajmiemy się teraz tworzeniem tabel w MySQL. Poprzednio omówiliśmy w skrócie tworzenie tabel, w części „Tworzenie bazy danych i tabel”. Dzięki temu, że ostatnio poznałeś typy danych, dowiesz się jak odpowiednio je wykorzystać przy budowie tabeli.

Tworzenie tabeli

Tworzenie tabeli dokonujemy używając składni CREATE TABLE.

Dokumentacja z CREATE TABLE

Przykład tworzenia tabeli „todo„:

* przy polu ID primary key i auto_increment to dodatkowe atrybuty

Opis tabeli w MySQL:

Tworzenie tabeli jest proste, po składni CREATE TABLE podajemy NAZWĘ TABELI, następnie w nawiasach NAZWY KOLUMN oraz ICH TYPY.

Uwaga! Nazwy tabel nie mogą zawierać nazw składni, chyba, że nazwę umieścisz w nawiasach typu „

zwracaj na nazwę przy tworzeniu tabeli

Dodatkowe atrybuty

Dodatkowe (opcjonalne) atrybuty możemy dodać po typie danych. Przykładowo: ID int unsigned – oznacza, że typ int przyjmuje tylko wartości dodatnie i zero.

PRIMARY KEY

PRIMARY KEY to słowo kluczowe oznaczające dla kolumny, że jest ona kluczem głównym dla tabeli czyli unikalną wartością identyfikując jednoznacznie każdy rekord tabeli. Klucz główny może obejmować kilka kolumn – wówczas nie wpisujemy go przy typie danych, a dodajemy na końcu przy budowaniu tabeli np. primary key (ID_towaru, ID faktury)

AUTO_INCREMENT

auto_increment przy typie danych oznacza, że przy dodawaniu rekordów pole domyślnie zwiększy swoją wartość o jeden (oczywiście można to zmienić).

NOT NULL

NOT NULL oznacza, że przy dodawaniu rekordów do tabeli pole nie może być puste.

UNSIGNED

Oznacza, że typy liczbowe muszą przyjąć dodatnią wartość lub zero (przy zastosowaniu tego atrybutu długość się odpowiednio zwiększa, w porównaniu do typu bez użycia tego atrybutu)

DEFAULT

Określa wartość domyślną pola. Przy dodawaniu rekordów, gdy nie dodamy nic do tego pola, zostanie zapisana wartość domyślna. Wartość domyślna musi być stała, nie może zostać użyta funkcja lub wyrażenie.

UNIQUE

Określa, że pole musi posiadać unikalną wartość (nie możemy wstawić 2 razy takiego samego rekordu).

COMMENT

Dzięki temu możemy dodać komentarz do kolumny np. ID int comment = ‚typ int’.

Łączenie tabel

Co jeśli chcielibyśmy połączyć tabelę todo z użytkownikami, tak aby było wiadomo, jaki użytkownik ma pola na liście todo? Stwórzmy więc najpierw tabelę użytkownicy:

Teraz w tabeli todo przydałoby się pole mówiące identyfikujące użytkownika.

Pola do istniejącej już tabeli dodajemy za pomocą składni ALTER TABLE nazwa tabeli ADD COLUMN nazwa i typ kolumny;

możemy też użyć słowa after lub before, w celu umieszczenia kolumny tam gdzie chcemy

Składnia alter table służy do modyfikowania istniejącej tabeli.

Teraz tabela todo prezentuje się tak:

Czas na połączenie tabeli z tabelą users. W tym celu musimy dodać KLUCZ OBCY do tabeli todo.

udało nam się połączyć tabele!

Dzięki takiemu połączeniu, gdy dodamy dane do tabeli users potem dane to tabeli todo i będziemy chcieli następnie usunąć użytkownika, który jest też zapisany w todo z tabeli users to wyskoczy nam błąd – gdyż najpierw należy usunąć rekody z podrzędnych tabel.

Tabela users:

Tabela todo:

Komentarze

Przy tworzeniu tabeli możemy też dodać do niej komentarz np.

Komentarze wyświetlamy w następujący sposób:

gdzie table_schema to nazwa bazy danych, a table_name to nazwa tabeli.

Przykładowe zadanie

Zadanie otrzymałem od pewnego źródła – jest to zadanie z pewnego uniwersytetu w Lublinie 😀

Utwórz bazę danych o nazwie login_faktura

Utwórz tabelę nabywcy o polach:

  1. kod_nabywcy – liczba całkowita o długości 10 – klucz główny, automatycznie numerowany
  2. nazwa – napis 25 znaków
  3. nip – napis 10 znaków niewymagany
  4. adres– napis 50 znaków

Utwórz tabelę faktury o polach:

  1. nr_faktury – liczba całkowita o długości 10 – klucz główny, automatycznie numerowany
  2. data_wystawienia – data, domyślnie wypełniania aktualną datą
  3. termin_platnosci – liczba całkowita o długości 2 (komentarz: przechowują listę dni na zapłacenie faktury)
  4. kod_nabywcy – liczba całkowita o długości 10 – klucz obcy do tabeli nabywcy
  5. czy_zaplacona – tekst o długości 1 – domyślna wartość: ‚n’ (komentarz: informacja czy faktura została zapłacona w postaci ‚t’ lub ‚n’

Utwórz tabelę towary o następujących polach:

  1. id_towaru – liczba całkowita o długości 10 – klucz główny, automatycznie numerowany
  2. nazwa– napis 25 znaków
  3. jednostka – napis 5 znaków
  4. stan – liczba rzeczywista (6,2)

Utwórz tabelę towary_na_fakturze o następujących polach:

  1. id_towaru – liczba całkowita o długości 10 – klucz obcy do tabeli towary
  2. nr_faktury – liczba całkowita o długości 10 – klucz obcy tabeli faktury
  3. ilosc – liczba rzeczywista (8,2)
  4. cena – liczba rzeczywista (10,2)
  5. Dodatkowe ustalenia – klucz główny składa się z kolumn id_towaru i nr_faktury; nałóż ograniczenie, aby kolumna ilość była kolumną dodatnią.

Problemy z zadaniem

Pole czy_zaplacona w tabeli faktury ma przechowywać tekst o długości 1 … autor, zapomniał, że tekst o długości 1 to nie tekst, a pojedynczy znak. Ma przyjmować wartości ‚t’ lub ‚n’ – jest to całkowicie bez sensu, gdyż pole znaki ‚t’ i ‚n’ mają odpowiednio wartości binarne:
01110100 oraz 01101110 – zajmują więc 1 bajt. Zamiast tego należałoby użyć typu bool, który przyjmuje wartości binarne 0 (fałsz) lub 1 (prawda), dzięki temu zaoszczędzilibyśmy miejsce w bazie danych.

Rozwiązanie!

Tworzymy bazę danych:

Użyjemy teraz tej bazy:

Tworzymy tabelę nabywcy:

Tworzymy tabelę faktury:

Tworzymy tabelę towary:

Tworzymy tabelę towary_na_fakturze:

Notatka: jeśli autorowi zadania chodziło o to, że przy polu niewymaganym nie wpisujemy not null, to we wszystkich innych polach należy dodać atrybut not null.