Уроки модуля (1/4)
Расширенные типы данных и ENUM
На предыдущем уроке мы видели базовую команду CREATE TABLE. Давайте теперь рассмотрим некоторые расширенные типы данных, которые PostgreSQL предлагает для более точного и безопасного моделирования наших доменов.
Числовые и текстовые типы
PostgreSQL имеет несколько типов чисел и текста. Выбор правильного помогает как с проверкой, так и с местом для хранения.
CREATE TABLE advanced_products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description TEXT,
-- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
price NUMERIC(10, 2) NOT NULL,
featured BOOLEAN DEFAULT FALSE
);TEXTиVARCHAR(n): производительность в Postgres идентична. Вы используетеVARCHAR(n)только тогда, когда хотите явно ограничить вставляемую длину на уровне базы данных.NUMERIC(10, 2): идеально подходит для денег или арифметической точности. Здесь допускается не более 8 целых цифр и 2 десятичных знаков (всего 10). Если вы вставите10.555, Postgres округлит его до10.56.
Тип UUID
Для безопасных идентификаторов, представленных в Интернете (например, общедоступных идентификаторов в URL-адресах), UUID часто предпочтительнее классического приращения SERIAL.
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (перечисления)
Часто столбец должен содержать только одно из нескольких предопределенных значений (например, статус заказа: «новый», «оплачен», «отправлен»). Один из подходов — использовать ключевое слово CHECK, но PostgreSQL предлагает собственные типы ENUM.
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');
-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
id SERIAL PRIMARY KEY,
status order_status NOT NULL DEFAULT 'nuovo'
);Это гарантирует, что никто никогда не сможет вставить неверный статус, обеспечивая целостность данных.
Попробуйте это
Создайте таблицу user_reviews с: идентификатором (SERIAL pk), test_id (UUID со стандартным gen_random_uuid()), оценкой (целое число, не равное нулю) и содержимым (ТЕКСТ). Ни одно из других полей не нуждается в явных ограничениях, кроме типа.
Показать подсказку
Напишите CREATE TABLE user_reviews (...), а затем различные поля. Помните о запятых.
Решение доступно после 3 попыток
Обзор упражнения
Сначала создайте тип ENUM «user_role» со значениями «admin» и «user». Затем создайте таблицу enum_users с идентификатором (SERIAL pk) и ролью (тип, который вы только что создали, НЕ NULL).
Показать подсказку
Не забывайте ; чтобы разделить два оператора (CREATE TYPE и CREATE TABLE).
Решение доступно после 3 попыток