На перших лекціях ми заклали базові знання про реляційні бази даних і PostgreSQL, розібралися, як працювати з psql і pgAdmin, а ще навчилися створювати й керувати базами даних. Тепер час перейти до створення основного "будівельного матеріалу" реляційних баз даних – таблиць. Саме таблиці зберігають всю інформацію, яку потім можна фільтрувати, сортувати чи об'єднувати.
Створювати таблиці в PostgreSQL можна за допомогою команди CREATE TABLE. Команда описує структуру таблиці: її назву, стовпці та їх типи даних.
Загальна структура команди
Ось як виглядає базовий синтаксис:
CREATE TABLE таблиця (
колонка1 тип_даних constraints,
колонка2 тип_даних constraints,
...
);
Розбираємо по частинах:
таблиця– ім'я таблиці (наприклад,students).колонка1– ім'я стовпця (наприклад,id,name).тип_даних– тип даних стовпця (наприклад,INTEGER,VARCHAR).constraints– обмеження для даних (наприклад,NOT NULL,PRIMARY KEY).
Тепер створимо нашу першу таблицю.
Приклад створення таблиці
Сценарій: в навчальній базі даних треба зберігати дані про студентів. Для цього створимо таблицю students з полями:
id: унікальний ідентифікатор студента (автоматично збільшується);name: ім'я студента (довжина рядка до 100 символів);age: вік студента (додатнє ціле число).
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- унікальний ID студента
name VARCHAR(100), -- ім'я
age INTEGER -- вік
);
Що тут відбувається:
id SERIAL PRIMARY KEY: створюється стовпецьid, який автоматично генерує унікальні числа (1, 2, 3...) для кожного рядка. Також він є первинним ключем таблиці.name VARCHAR(100): створюється текстовий стовпець, деVARCHAR(100)означає, що рядок може бути довжиною до 100 символів.age INTEGER: створюється числовий стовпець для зберігання віку.
Тепер, якщо виконати цей запит у psql чи pgAdmin, таблиця students буде створена.
Типи даних для стовпців
Під час створення таблиці важливо вибрати правильний тип даних для кожного стовпця. PostgreSQL пропонує купу типів, але почнемо з найпопулярніших.
| Тип даних | Опис | Приклад значень |
|---|---|---|
INTEGER |
Цілі числа. Круто підходить для віку, кількості чогось, ідентифікаторів. | 1, 42, 100 |
VARCHAR(n) |
Рядок довжиною до n символів. Ідеально для текстів з обмеженою довжиною. |
'Alice', 'Bob' |
TEXT |
Необмежені рядки. Використовується для довгих текстів (наприклад, опис продукту). | 'Дуже довгий текст...' |
DATE |
Дата без часу. Використовується для запису дат народження, подій. | 2023-10-12 |
BOOLEAN |
Логічний тип: TRUE або FALSE. Використовується для прапорців (наприклад, виконано/ні). |
TRUE, FALSE |
Вибір підходящого типу даних
- Якщо зберігаєш числа – використовуй
INTEGER. - Для рядків з відомим обмеженням довжини – краще вибрати
VARCHAR(n). - Для тексту без обмежень – використовуй
TEXT. - Дати й час зберігай у
DATEабоTIMESTAMP.
Приклад: створюємо таблицю courses
Уявімо, що в нашій базі даних теж треба зберігати інформацію про курси. У кожного курсу є:
id: унікальний ідентифікатор;name: назва курсу (рядок до 100 символів);description: опис курсу (довгий текст);start_date: дата початку курсу.
SQL-код:
CREATE TABLE courses (
id SERIAL PRIMARY KEY, -- унікальний ID курсу
name VARCHAR(100), -- назва курсу
description TEXT, -- опис
start_date DATE -- дата старту
);
Практичне завдання
Тепер твоя черга створити таблицю! Ось завдання:
- Створи таблицю
teachersз полями:id: унікальний ідентифікатор.name: ім'я вчителя (рядок до 50 символів).subject: предмет, який він/вона викладає (рядок до 50 символів).hire_date: дата прийому на роботу.
Приклад коду для виконання:
CREATE TABLE teachers (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
subject VARCHAR(50),
hire_date DATE
);
Після виконання використай команду \d teachers у psql, щоб переконатися, що таблиця створена.
Типові помилки при створенні таблиць
Коли починаєш працювати з таблицями, можуть виникати помилки. Ось кілька частих ситуацій:
Помилка в назві таблиці чи стовпця. У PostgreSQL імена не чутливі до регістру, але якщо ти використовуєш лапки " навколо назв, треба бути уважним. Наприклад, CREATE TABLE "MyTable" створює таблицю "MyTable", а mytable не розпізнається як її назва.
Неправильний тип даних. Якщо вказати неіснуючий тип даних, запит завершиться помилкою.
CREATE TABLE example (
column1 STRANGE_TYPE
);
Цей запит не виконається, бо STRANGE_TYPE не існує.
Пропуск PRIMARY KEY. Якщо ти забув додати первинний ключ, то таблиця створиться, але ідентифікувати рядки буде складніше.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ