Na pierwszych wykładach ogarnęliśmy podstawy relacyjnych baz danych i PostgreSQL, nauczyliśmy się korzystać z psql i pgAdmin, a także tworzyć i zarządzać bazami danych. Teraz czas przejść do tworzenia głównego "budulca" relacyjnych baz danych – tabel. To właśnie w tabelach trzymamy wszystkie dane, które potem możemy filtrować, sortować albo łączyć.
Tabele w PostgreSQL tworzymy za pomocą komendy CREATE TABLE. Komenda opisuje strukturę tabeli: jej nazwę, kolumny i ich typy danych.
Ogólna struktura komendy
Tak wygląda podstawowa składnia:
CREATE TABLE tabela (
kolumna1 typ_danych constraints,
kolumna2 typ_danych constraints,
...
);
Rozbijamy na części:
tabela– nazwa tabeli (np.students).kolumna1– nazwa kolumny (np.id,name).typ_danych– typ danych kolumny (np.INTEGER,VARCHAR).constraints– ograniczenia dla danych (np.NOT NULL,PRIMARY KEY).
Teraz stworzymy naszą pierwszą tabelę.
Przykład tworzenia tabeli
Scenariusz: w bazie do nauki musimy przechowywać dane o studentach. Do tego stworzymy tabelę students z polami:
id: unikalny identyfikator studenta (zwiększa się automatycznie);name: imię studenta (długość do 100 znaków);age: wiek studenta (dodatnia liczba całkowita).
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- unikalny ID studenta
name VARCHAR(100), -- imię
age INTEGER -- wiek
);
Co tu się dzieje:
id SERIAL PRIMARY KEY: tworzy się kolumnaid, która automatycznie generuje unikalne liczby (1, 2, 3...) dla każdego wiersza. Jest też kluczem głównym tabeli.name VARCHAR(100): tworzy się kolumna tekstowa, gdzieVARCHAR(100)oznacza, że tekst może mieć do 100 znaków.age INTEGER: tworzy się kolumna liczbowa na wiek.
Teraz, jeśli wykonasz to zapytanie w psql albo pgAdmin, tabela students zostanie utworzona.
Typy danych dla kolumn
Tworząc tabelę, ważne jest, żeby dobrać odpowiedni typ danych dla każdej kolumny. PostgreSQL daje sporo możliwości, ale zaczniemy od tych najpopularniejszych.
| Typ danych | Opis | Przykład wartości |
|---|---|---|
INTEGER |
Liczby całkowite. Dobre na wiek, ilość czegoś, identyfikatory. | 1, 42, 100 |
VARCHAR(n) |
Tekst o długości do n znaków. Idealny na teksty z ograniczoną długością. |
'Alice', 'Bob' |
TEXT |
Nieograniczone teksty. Używane do długich opisów (np. opis produktu). | 'Bardzo długi tekst...' |
DATE |
Data bez czasu. Używane do zapisywania dat urodzenia, wydarzeń. | 2023-10-12 |
BOOLEAN |
Typ logiczny: TRUE albo FALSE. Używany do flag (np. zrobione/nie). |
TRUE, FALSE |
Wybór odpowiedniego typu danych
- Jeśli trzymasz liczby – użyj
INTEGER. - Dla tekstów z ograniczoną długością – najlepiej
VARCHAR(n). - Dla tekstów bez limitu – użyj
TEXT. - Daty i czasy trzymaj w
DATEalboTIMESTAMP.
Przykład: tworzymy tabelę courses
Załóżmy, że w naszej bazie musimy też przechowywać info o kursach. Każdy kurs ma:
id: unikalny identyfikator;name: nazwa kursu (tekst do 100 znaków);description: opis kursu (długi tekst);start_date: data startu kursu.
Kod SQL:
CREATE TABLE courses (
id SERIAL PRIMARY KEY, -- unikalny ID kursu
name VARCHAR(100), -- nazwa kursu
description TEXT, -- opis
start_date DATE -- data startu
);
Zadanie praktyczne
Teraz twoja kolej na stworzenie tabeli! Oto zadanie:
- Stwórz tabelę
teachersz polami:id: unikalny identyfikator.name: imię nauczyciela (tekst do 50 znaków).subject: przedmiot, którego uczy (tekst do 50 znaków).hire_date: data zatrudnienia.
Przykładowy kod do wykonania:
CREATE TABLE teachers (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
subject VARCHAR(50),
hire_date DATE
);
Po wykonaniu użyj komendy \d teachers w psql, żeby sprawdzić, czy tabela została utworzona.
Typowe błędy przy tworzeniu tabel
Na początku pracy z tabelami mogą pojawić się błędy. Oto kilka najczęstszych sytuacji:
Błąd w nazwie tabeli lub kolumny. W PostgreSQL nazwy nie są czułe na wielkość liter, ale jeśli używasz cudzysłowów " wokół nazw, musisz być ostrożny. Na przykład, CREATE TABLE "MyTable" tworzy tabelę "MyTable", a mytable nie zostanie rozpoznane jako jej nazwa.
Zły typ danych. Jeśli podasz nieistniejący typ danych, zapytanie zakończy się błędem.
CREATE TABLE example (
column1 STRANGE_TYPE
);
To zapytanie nie zadziała, bo STRANGE_TYPE nie istnieje.
Brak PRIMARY KEY. Jeśli zapomnisz dodać klucz główny, tabela się utworzy, ale identyfikacja wierszy będzie trudniejsza.
GO TO FULL VERSION