На первых лекциях мы заложили базовые знания о реляционных базах данных и 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 |
Неограниченные строки. Используется для длинных текстов (например, описание продукта). | 'Very long 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. Если вы забыли добавить первичный ключ, то таблица создастся, но идентифицировать строки будет сложнее.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ