Rozdział 5: Tworzenie nowych tabel

Dane zapisane w nowej bazie danych muszą zostać umieszczone w odpowiednich tabelach.

Pomijając fakt porządku jaki uzyskamy gdy stworzymy tabele a w nich odpowiednie dane, tworzymy tabelę również dla optymalizacji pracy. Najlepiej objaśnimy wszystko korzystając z przykładu.

Możemy stworzyć jedną tabelę „dane„, w niej będą produkty oraz zamówienia. Nie będzie problemu aby pobrać produkty, innym razem pobrać zamówienia gdyż stworzymy kolumnę „typ” i to dzięki tej kolumnie odróżnimy produkt od reszty danych. Takie zapytania do bazy mocno ją obciążą ponieważ ta jedna tabelka rozrośnie się do dużych rozmiarów.

Dobrą techniką jest trzymać produkty oraz zamówienia w osobnych tabelkach. Również praktykuje się (do czego zachęcam) bardziej drobiazgowe rozbijanie danych po tabelkach.

Przykładowo, w osobnej tabelce możemy mieć produkty, zdjęcia, opisy ,informacje do której kategorii są przypisane.

Do tworzenia tabel służy zapytanie według poniższego wzoru:

CREATE TABLE {nazwa tabeli}(
   {kolumna} {typ} {atrybut}
);

Posiadamy tutaj wiele niewiadomych, po kolei wszystko wyjaśnimy.

Jako pierwszą niewiadomą mamy nazwę tabeli. Podajemy nazwę która w możliwie najprostszy sposób opisze jej zawartość.

Jako drugą niewiadomą mamy typ kolumny, do wyboru mamy: INT, DECIMAL, TEXT, BOOL i wiele innych. Pełną listę znaleźć można w internecie, np: https://dev.mysql.com/doc/refman/8.0/en/data-types.html

Atrybuty dla kolumn przedstawiam poniżej:

AtrybutOpis
DEFAULTWartość domyślna
NOT NULLPowoduje, że wartość wpisana w polu nie może być równa „null
AUTO_INCREMENTAutomatyczne numerowanie rekordów
PRIMARY KEYPole służące do identyfikacji, musi być unikalne
FOREIGN KEYOdwołanie do klucza głównego z innej tabeli
UNIQUE KEYPowoduje, że wartość musi być unikalna
UNSIGNEDPowoduje, że kolumna nie może przechowywać wartości minusowych
ZEROFILLAutomatyczne dopełnienie zerami brakujących znaków w wartości

Przykładowe zapytanie

Poniżej przedstawię kilka przykładowych zapytań tworzących tabele:

CREATE TABLE company (
	id INT UNSIGNED auto_increment NOT NULL PRIMARY KEY UNIQUE KEY,
	name varchar(255) NULL,
	company_created DATE NULL,
	created DATETIME NOT NULL
)

Powyższe zapytanie stworzy tabelę o nazwie „company„.

Pierwsza kolumna to index, kolumna typu „int” bez wartości ujemnych.
Kolumna „id” również posiada atrybut autonumeracji, jej wartości są unikalne. Jest kolumną służącą do identyfikacji rekordu.

Kolumna „name” to typ „varchar„, czyli będzie przechowywała wartości alfanumeryczne których długość nie może przekroczyć 255 znaków.
Wartość pola może być równa „null„.

Kolumna „company_created” przechowywać będzie datę utworzenia firmy, jest to kolumna typu „date” i może jej wartość być równa „null„.

Ostatnią kolumną jest „created” która przechowywać będzie datę i czas powstania rekordu. Wartość nie może być równa „null„.

Powyższe zapytanie owszem, działa, natomiast zapomnieliśmy o jednym szczególe.

Wybór bazy danych

Utworzyliśmy tabelę o nazwie „company” ale nie wybraliśmy bazy w której taką tabelę chcieliśmy wykonać. Możemy to zrobić na dwa sposoby (dla przykładu nazwę bazy ustawiłem jako „mydb„:

USE {mydb};

Lub, w tym samym zapytaniu możemy najpierw wpisać nazwę bazy, a następnie nazwę nowej tabeli, przykładowo:

 CREATE TABLE medb.company (
	id INT UNSIGNED auto_increment NOT NULL PRIMARY KEY UNIQUE KEY,
	name varchar(255) NULL,
	company_created DATE NULL,
	created DATETIME NOT NULL
)