CREATE TABLE con claves primarias y restricciones

Clase 8 de 25Curso de Fundamentos de Bases de Datos y SQL

Resumen

Dominar la creación de tablas es el paso fundamental para construir bases de datos profesionales. Sin restricciones ni llaves primarias, una tabla SQL no es más que una planilla de cálculo oculta dentro de un motor de base de datos. Aquí se explica paso a paso cómo definir campos, asignar tipos de datos y aplicar restricciones que garanticen la integridad de la información.

¿Cómo se crea una tabla básica con tipos de datos en SQL?

El comando CREATE TABLE es la instrucción que indica al motor SQL que debe generar y almacenar una nueva tabla [01:00]. Su sintaxis es directa: se escribe CREATE TABLE, seguido del nombre de la tabla, y entre paréntesis se listan las columnas con su respectivo tipo de dato.

sql CREATE TABLE demo_tipos ( id INTEGER, nombre TEXT, precio NUMERIC(10,2), activo BOOLEAN, fecha_ingreso DATE, creado_en TIMESTAMP );

Cada columna se separa por una coma, excepto la última. El tipo NUMERIC(10,2) se usa para valores con decimales como precios, mientras que BOOLEAN almacena valores de verdadero o falso [02:18]. DATE guarda fechas y TIMESTAMP registra fecha y hora exacta.

Para compilar basta con presionar Control + Enter o el botón run, y el simulador devuelve el mensaje "tabla creada" [03:30].

¿Cómo insertar y consultar datos rápidamente?

El comando INSERT INTO permite agregar registros a la tabla recién creada [03:45]. Junto con VALUES, se proporcionan los datos en el mismo orden de las columnas definidas:

sql INSERT INTO demo_tipos VALUES (1, 'Producto Demo', 29.99, TRUE, '2024-01-15', '2024-01-15 10:30:00'); SELECT * FROM demo_tipos;

El punto y coma al final de cada sentencia es obligatorio [04:30]. Le indica al motor dónde termina cada instrucción. Sin él, el compilador sigue leyendo y puede generar errores inesperados.

¿Qué son las llaves primarias y cómo se definen?

Una llave primaria (primary key) es el identificador único de cada registro en la tabla. Es lo que diferencia una base de datos real de una simple hoja de cálculo [05:10].

Existen dos formas principales de crearlas:

  • Forma 1 con SERIAL: el tipo de dato SERIAL genera un número que se incrementa automáticamente con cada nuevo registro [05:30]. El primer registro obtiene ID 1, el segundo ID 2, y así sucesivamente.

sql CREATE TABLE ejemplo_serial ( id SERIAL PRIMARY KEY, nombre TEXT NOT NULL );

  • Forma 2 con GENERATED ALWAYS AS IDENTITY: es un estándar más moderno y recomendado [06:40]. Define el campo como entero y lo genera automáticamente como identidad.

sql CREATE TABLE ejemplo_identity ( id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, nombre TEXT NOT NULL );

¿Qué restricciones se pueden aplicar a los campos?

Las restricciones (constraints) controlan qué datos se aceptan en cada columna [07:15]:

  • NOT NULL: impide que el campo quede vacío.
  • UNIQUE: garantiza que no se repitan valores, ideal para correos electrónicos.
  • DEFAULT: asigna un valor automático cuando no se proporciona uno.

¿Cómo se aplican estas restricciones en una tabla real de clientes?

La tabla de clientes ilustra cómo combinar múltiples restricciones en un escenario práctico [07:50]:

sql CREATE TABLE clientes ( cliente_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, nombre TEXT NOT NULL, correo_electronico VARCHAR(100) NOT NULL UNIQUE, telefono VARCHAR(20), fecha_registro DATE NOT NULL DEFAULT CURRENT_DATE, activo BOOLEAN NOT NULL DEFAULT TRUE, tipo_cliente_id INTEGER NOT NULL );

Puntos clave de esta estructura:

  • El correo electrónico es NOT NULL y UNIQUE, lo que impide duplicados [08:20].
  • El teléfono no tiene restricciones porque algunos clientes podrían no tenerlo.
  • La fecha de registro usa DEFAULT CURRENT_DATE para capturar automáticamente la fecha del sistema [08:55].
  • El campo activo tiene DEFAULT TRUE porque todo cliente nuevo se da de alta como activo [09:20].
  • El campo tipo_cliente_id servirá más adelante para conectar con otra tabla mediante llaves secundarias.

Para verificar que las tablas se crearon correctamente, se consulta el esquema público con una sentencia SELECT que muestra nombres de columnas, tipos de datos y restricciones aplicadas [10:30].

sql SELECT * FROM information_schema.columns WHERE table_schema = 'public' ORDER BY table_name;

Utilizar correctamente NOT NULL, UNIQUE, DEFAULT y las llaves primarias marca la diferencia entre una base de datos robusta y una simple acumulación de datos sin control. Te queda como desafío crear tu propia tabla con todas las restricciones que consideres necesarias y compartir el resultado en los comentarios.