Lecții din modul (1/4)
Tipuri de date avansate și ENUM
În lecția anterioară am văzut comanda de bază CREATE TABLE. Să explorăm acum câteva tipuri de date avansate pe care PostgreSQL le oferă pentru a ne modela domeniile într-un mod mai precis și mai sigur.
Tipuri numerice și text
PostgreSQL are mai multe tipuri de numere și text. Alegerea celui potrivit ajută atât la validare, cât și la spațiul de stocare.
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
);TEXTvsVARCHAR(n): Performanța în Postgres este identică. FolosițiVARCHAR(n)numai atunci când doriți să limitați în mod explicit lungimea inserată la nivel de bază de date.NUMERIC(10, 2): Perfect pentru bani sau precizie aritmetică. Aici permite cel mult 8 cifre întregi și 2 zecimale (10 în total). Dacă introduceți10.555, Postgres îl rotunjește la10.56.
Tipul UUID
Pentru identificatorii securizați expuși pe web (cum ar fi ID-urile publice în adrese URL), UUID este adesea preferat față de incrementul clasic de SERIAL.
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (enumerări)
Adesea, o coloană trebuie să conțină doar una dintre câteva valori predefinite (de exemplu, starea comenzii: „nou”, „plătit”, „expediat”). O abordare este utilizarea cuvântului cheie CHECK, dar PostgreSQL oferă tipuri personalizate 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'
);Acest lucru garantează că nimeni nu poate introduce vreodată un statut nevalid, protejând consistența datelor.
Încearcă
Creați un tabel „user_reviews” cu: id (SERIAL pk), test_id (UUID cu gen_random_uuid() implicit), scor (intger nu nul) și conținut (TEXT). Niciunul dintre celelalte câmpuri nu are nevoie de constrângeri explicite dincolo de tip.
Afișează indiciu
Scrieți CREATE TABLE user_reviews (...) și apoi diferitele câmpuri. Amintește-ți virgulele.
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Mai întâi creați tipul ENUM „user_role” cu valorile „admin” și „user”. Apoi creați tabelul „enum_users” cu id (SERIAL pk) și rol (tipul pe care tocmai l-ați creat, NU NULL).
Afișează indiciu
Nu uitați de ; pentru a separa cele două instrucțiuni (CREATE TYPE și CREATE TABLE).
Soluție disponibilă după 3 încercări