Saltar al contenido principal
eLearner.app
Módulo 8 · Lección 3 de 431/57 en el curso~12 min
Lecciones del módulo (3/4)

Crear tablas y restricciones: DDL

Hasta ahora has estado trabajando en tablas que ya existen (customers, CÓDIGOPH1…). DDL ("lenguaje de definición de datos") se refiere a las declaraciones que crear y modificar el esquema mismo: tablas, columnas, restricciones, índices.

CREAR TABLA: la sintaxis

SQL
CREATE TABLE nome_tabella (
  colonna  TIPO  [vincoli_colonna],
  …,
  [vincoli_tabella]
);

Ejemplo: una lista de deseos que vincula clientes y productos:

SQL
CREATE TABLE wishlists (
  id           SERIAL PRIMARY KEY,
  customer_id  INTEGER NOT NULL REFERENCES customers(id),
  product_id   INTEGER NOT NULL REFERENCES products(id),
  added_on     DATE NOT NULL DEFAULT CURRENT_DATE,
  note         TEXT,
  UNIQUE (customer_id, product_id)
);

Analicémoslo pieza por pieza.

Los tipos más comunes

TipoLo que contiene
CÓDIGOPH0 / CÓDIGOPH1Números enteros (-2,1 mil millones … +2,1 mil millones)
CÓDIGOPH2Enteros grandes
CÓDIGOPH3Decimales exactos: dinero, porcentajes
CÓDIGOPH4Cadenas de longitud variable
CÓDIGOPH5Cadenas con una longitud máxima de n
CÓDIGOPH7CÓDIGOPH8 / CÓDIGOPH9 / CÓDIGOPH10
CÓDIGOPH11Sólo fecha
CÓDIGOPH12Fecha + hora (sin zona horaria)
CÓDIGOPH13Fecha + hora con zona horaria
CÓDIGOPH14INT5 con secuencia autoincremental

Restricciones

Una restricción es una regla que PostgreSQL aplica automáticamente: si una INSERT/UPDATE lo viola, la operación falla.

SQL
PRIMARY KEY                         -- identifica univocamente la riga, non NULL
NOT NULL                            -- vieta NULL
UNIQUE                              -- vieta duplicati su questa colonna
REFERENCES tabella(colonna)         -- foreign key
CHECK (espressione_booleana)        -- es. CHECK (price > 0)
DEFAULT espressione                 -- valore di default se non fornito

Las restricciones se pueden declarar en línea en una columna o como a nivel de tabla restricciones (debajo de los campos). Ejemplo de un UNIQUE compuesto:

SQL
UNIQUE (customer_id, product_id)   -- niente coppia (cliente, prodotto) duplicata

VERIFICAR restricción

CHECK aplica una regla personalizada:

SQL
CREATE TABLE stock_alerts (
  product_id   INTEGER PRIMARY KEY REFERENCES products(id),
  threshold    INTEGER NOT NULL CHECK (threshold >= 0),
  notify_email TEXT    NOT NULL,
  active       BOOLEAN NOT NULL DEFAULT true
);

threshold debe ser ≥ 0; si alguien prueba INSERT … threshold = -5, falla con un error de restricción.

Dejar caer y alterar

SQL
DROP TABLE wishlists;                                 -- elimina la tabella (e i dati!)
DROP TABLE IF EXISTS wishlists;                       -- senza errore se non esiste
ALTER TABLE customers ADD COLUMN newsletter BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE customers DROP COLUMN newsletter;

Tu turno

Ejercicio#sql.m8.l3.e1
Intentos: 0Cargando...

Cree una tabla de listas de deseos con las siguientes columnas: id (CLAVE PRIMARIA DE SERIE), id_cliente (REFERENCIAS INTEGER NO NULAS clientes (id)), id_producto (REFERENCIAS INTEGER NO NULAS productos (id)), add_on (FECHA NO NULA con FECHA_ACTUAL PREDETERMINADA). Agregue una restricción ÚNICA en el par (customer_id, product_id).

Cargando editor...
Mostrar pista

ÚNICO (customer_id, product_id) como restricción a nivel de tabla en la parte inferior.

Solución disponible después de 3 intentos

Ejercicio de revisión

Ejercicio#sql.m8.l3.e2
Intentos: 0Cargando...

Agregue a la tabla de clientes una columna de boletín de tipo BOOLEAN, NOT NULL, con DEFAULT false. Utilice una única instrucción ALTER TABLE.

Cargando editor...
Mostrar pista

Sin DEFAULT, ALTER fallaría porque ya existen filas y la nueva columna NO es NULA.

Solución disponible después de 3 intentos