Café y Código
← Volver al Catálogo•Módulo Especial · Bases de Datos & SQL•40 Desafíos

Desafíos de Bases de Datos & SQL

Aprende modelamiento relacional y SQL estándar (PostgreSQL, MySQL, SQLite, SQL Server) en 4 bloques graduales de 10 desafíos: desde la creación de tablas atómicas hasta macro-sistemas empresariales de 10 tablas completas.

📦 10 Tablas Simples
🔗 10 Dos Tablas (1:N)
🔀 10 Multi-Tabla (1:1, N:M)
🏛️ 10 Sistemas de 10 Tablas
🎨
✨ Motor Interactivo Libre

Diseñador de Base de Datos Relacional (.CYC)

Crea tus propias tablas, personaliza colores, conecta relaciones con reglas de negocio, guarda en formato .cyc y exporta a PNG/SQL.

Abrir Motor Relacional →

📋 Índice Rápido de Desafíos (1 al 40)

0 / 40 completados

🎯 Especificación Técnica, Esquemas Relacionales y Código SQL

01
Tablas Simples (1 Tabla)1 Tabla

Gestión de Empleados y Salarios

0 / 5▼

🏢 Contexto Real de Negocio

Una empresa requiere registrar a su personal para el cálculo de nómina y control de departamentos.

🎯 Requerimiento Técnico

Crear la tabla `empleados` con llave primaria autoincremental, restricciones NOT NULL, CHECK para salarios positivos y valor por defecto en fecha_ingreso. Luego insertar datos y consultar salarios mayores al promedio.

⚡Gestión de Empleados y Salarios · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️empleados
10 cols
PK*id_empleado
INT
*rut
VARCHAR(12)
*nombre_completo
VARCHAR(100)
*cargo
VARCHAR(50)
*salario
DECIMAL(10,2)
ofecha_ingreso
DATE
oactivo
BOOLEAN
oemail
VARCHAR(100)
otelefono
VARCHAR(15)
ofecha_creacion
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1-- 1. Crear tabla de Empleados
2CREATE TABLE empleados (
3 id_empleado SERIAL PRIMARY KEY,
4 rut VARCHAR(12) UNIQUE NOT NULL,
5 nombre_completo VARCHAR(100) NOT NULL,
6 cargo VARCHAR(50) NOT NULL,
7 salario DECIMAL(10, 2) NOT NULL CHECK (salario > 0),
8 fecha_ingreso DATE DEFAULT CURRENT_DATE,
9 activo BOOLEAN DEFAULT TRUE,
10 email VARCHAR(100),
11 telefono VARCHAR(15),
12 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
13);

✅ Checklist de Dominio Técnico

02
Tablas Simples (1 Tabla)1 Tabla

Catálogo de Productos y Control de Stock

0 / 4▼

🏢 Contexto Real de Negocio

Un minimarket requiere controlar el inventario de sus artículos en venta, precios unitarios y alertas de stock mínimo.

🎯 Requerimiento Técnico

Crear la tabla `productos` con código SKU único, precio de venta, costo, stock y stock mínimo de alerta.

⚡Catálogo de Productos y Control de Stock · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️productos
10 cols
PK*id_producto
INT
*sku
VARCHAR(20)
*nombre
VARCHAR(80)
*precio_unitario
DECIMAL(8,2)
*costo
DECIMAL(8,2)
ostock_actual
INT
ostock_minimo
INT
ocategoria
VARCHAR(40)
opeso_kg
DECIMAL(6,2)
oactivo
BOOLEAN
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE productos (
2 id_producto SERIAL PRIMARY KEY,
3 sku VARCHAR(20) UNIQUE NOT NULL,
4 nombre VARCHAR(80) NOT NULL,
5 precio_unitario DECIMAL(8,2) NOT NULL CHECK (precio_unitario >= 0),
6 costo DECIMAL(8,2) NOT NULL CHECK (costo >= 0),
7 stock_actual INT DEFAULT 0 CHECK (stock_actual >= 0),
8 stock_minimo INT DEFAULT 5 CHECK (stock_minimo >= 0),
9 categoria VARCHAR(40),
10 peso_kg DECIMAL(6,2),
11 activo BOOLEAN DEFAULT TRUE
12);

✅ Checklist de Dominio Técnico

03
Tablas Simples (1 Tabla)1 Tabla

Fichas Clínicas de Pacientes

0 / 3▼

🏢 Contexto Real de Negocio

Un centro médico necesita almacenar los antecedentes clínicos de pacientes, grupos sanguíneos y contactos de emergencia.

🎯 Requerimiento Técnico

Crear la tabla `pacientes` con validaciones de tipo de sangre (A+, A-, B+, B-, AB+, AB-, O+, O-), email opcional único y fecha de nacimiento.

⚡Fichas Clínicas de Pacientes · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️pacientes
10 cols
PK*id_paciente
INT
*rut
VARCHAR(12)
*nombres
VARCHAR(60)
*apellidos
VARCHAR(60)
*fecha_nacimiento
DATE
*grupo_sanguineo
VARCHAR(3)
*telefono_emergencia
VARCHAR(15)
oalergias
TEXT
oemail
VARCHAR(100)
oestado_civil
VARCHAR(15)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE pacientes (
2 id_paciente SERIAL PRIMARY KEY,
3 rut VARCHAR(12) UNIQUE NOT NULL,
4 nombres VARCHAR(60) NOT NULL,
5 apellidos VARCHAR(60) NOT NULL,
6 fecha_nacimiento DATE NOT NULL,
7 grupo_sanguineo VARCHAR(3) NOT NULL CHECK (grupo_sanguineo IN ('A+', 'A-', 'B+', 'B-', 'AB+', 'AB-', 'O+', 'O-')),
8 telefono_emergencia VARCHAR(15) NOT NULL,
9 alergias TEXT DEFAULT 'Ninguna',
10 email VARCHAR(100),
11 estado_civil VARCHAR(15)
12);

✅ Checklist de Dominio Técnico

04
Tablas Simples (1 Tabla)1 Tabla

Inventario de Libros en Biblioteca

0 / 3▼

🏢 Contexto Real de Negocio

Una biblioteca comunitaria gestiona su catálogo bibliográfico clasificando libros por ISBN, año de edición y número de páginas.

🎯 Requerimiento Técnico

Diseñar la tabla `libros` asegurando ISBN único de 13 caracteres, año de publicación coherente y páginas > 0.

⚡Inventario de Libros en Biblioteca · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️libros
10 cols
PK*id_libro
INT
*isbn
VARCHAR(13)
*titulo
VARCHAR(150)
*autor_principal
VARCHAR(100)
*anio_publicacion
INT
*num_paginas
INT
odisponible
BOOLEAN
oeditorial
VARCHAR(80)
ocategoria
VARCHAR(40)
ofecha_ingreso
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE libros (
2 id_libro SERIAL PRIMARY KEY,
3 isbn VARCHAR(13) UNIQUE NOT NULL,
4 titulo VARCHAR(150) NOT NULL,
5 autor_principal VARCHAR(100) NOT NULL,
6 anio_publicacion INT NOT NULL CHECK (anio_publicacion BETWEEN 1450 AND 2030),
7 num_paginas INT NOT NULL CHECK (num_paginas > 0),
8 disponible BOOLEAN DEFAULT TRUE,
9 editorial VARCHAR(80),
10 categoria VARCHAR(40),
11 fecha_ingreso TIMESTAMP DEFAULT CURRENT_TIMESTAMP
12);

✅ Checklist de Dominio Técnico

05
Tablas Simples (1 Tabla)1 Tabla

Bitácora de Transacciones Financieras

0 / 3▼

🏢 Contexto Real de Negocio

Una fintech registra los movimientos de dinero de sus billeteras virtuales clasificando ingresos, transferencias y retiros.

🎯 Requerimiento Técnico

Crear la tabla `transacciones` con tipo de movimiento validado por CHECK (INGRESO, RETIRO, TRANSFERENCIA, PAGO) y marca temporal TIMESTAMP.

⚡Bitácora de Transacciones Financieras · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️transacciones
9 cols
PK*id_transaccion
BIGINT
*id_cuenta
INT
*tipo_operacion
VARCHAR(20)
*monto
DECIMAL(12,2)
ofecha_hora
TIMESTAMP
oestado
VARCHAR(15)
oid_cuenta_destino
INT
odescripcion
VARCHAR(120)
omoneda
VARCHAR(3)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE transacciones (
2 id_transaccion BIGSERIAL PRIMARY KEY,
3 id_cuenta INT NOT NULL,
4 tipo_operacion VARCHAR(20) NOT NULL CHECK (tipo_operacion IN ('INGRESO', 'RETIRO', 'TRANSFERENCIA', 'PAGO')),
5 monto DECIMAL(12,2) NOT NULL CHECK (monto > 0),
6 fecha_hora TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
7 estado VARCHAR(15) DEFAULT 'EXITOSA' CHECK (estado IN ('EXITOSA', 'RECHAZADA', 'PENDIENTE')),
8 id_cuenta_destino INT,
9 descripcion VARCHAR(120),
10 moneda VARCHAR(3) DEFAULT 'CLP'
11);

✅ Checklist de Dominio Técnico

06
Tablas Simples (1 Tabla)1 Tabla

Parque Automotriz y Vehículos

0 / 3▼

🏢 Contexto Real de Negocio

Una rent-a-car requiere un registro único de su flota de autos, kilometraje, tipo de combustible y estado de mantención.

🎯 Requerimiento Técnico

Crear la tabla `vehiculos` con placa patente única, año de fabricación y kilometraje inicial.

⚡Parque Automotriz y Vehículos · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️vehiculos
10 cols
PK*id_vehiculo
INT
*patente
VARCHAR(8)
*marca
VARCHAR(40)
*modelo
VARCHAR(40)
*anio
INT
okilometraje
INT
*combustible
VARCHAR(15)
ocolor
VARCHAR(20)
ocapacidad_pasajeros
INT
ofecha_registro
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE vehiculos (
2 id_vehiculo SERIAL PRIMARY KEY,
3 patente VARCHAR(8) UNIQUE NOT NULL,
4 marca VARCHAR(40) NOT NULL,
5 modelo VARCHAR(40) NOT NULL,
6 anio INT NOT NULL CHECK (anio >= 2000),
7 kilometraje INT DEFAULT 0 CHECK (kilometraje >= 0),
8 combustible VARCHAR(15) NOT NULL CHECK (combustible IN ('Bencina', 'Diesel', 'Híbrido', 'Eléctrico')),
9 color VARCHAR(20),
10 capacidad_pasajeros INT,
11 fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
12);

✅ Checklist de Dominio Técnico

07
Tablas Simples (1 Tabla)1 Tabla

Matrícula de Estudiantes Universitarios

0 / 3▼

🏢 Contexto Real de Negocio

Una facultad universitaria almacena los datos de sus alumnos, correos institucionales, carrera asignada y promedio general acumulado (PGA).

🎯 Requerimiento Técnico

Crear la tabla `estudiantes` con validación de PGA entre 1.0 y 7.0 y email institucional único.

⚡Matrícula de Estudiantes Universitarios · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️estudiantes
10 cols
PK*id_estudiante
INT
*rut
VARCHAR(12)
*nombre_completo
VARCHAR(100)
*email
VARCHAR(100)
*carrera
VARCHAR(80)
*pga
DECIMAL(3,2)
osemestre_actual
INT
ofecha_nacimiento
DATE
otelefono
VARCHAR(15)
oactivo
BOOLEAN
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE estudiantes (
2 id_estudiante SERIAL PRIMARY KEY,
3 rut VARCHAR(12) UNIQUE NOT NULL,
4 nombre_completo VARCHAR(100) NOT NULL,
5 email VARCHAR(100) UNIQUE NOT NULL,
6 carrera VARCHAR(80) NOT NULL,
7 pga DECIMAL(3,2) NOT NULL CHECK (pga BETWEEN 1.00 AND 7.00),
8 semestre_actual INT DEFAULT 1 CHECK (semestre_actual BETWEEN 1 AND 12),
9 fecha_nacimiento DATE,
10 telefono VARCHAR(15),
11 activo BOOLEAN DEFAULT TRUE
12);

✅ Checklist de Dominio Técnico

08
Tablas Simples (1 Tabla)1 Tabla

Historial de Sensores IoT Climáticos

0 / 3▼

🏢 Contexto Real de Negocio

Un invernadero inteligente captura lecturas periódicas de temperatura ambiente, porcentaje de humedad y luminosidad.

🎯 Requerimiento Técnico

Crear la tabla `lecturas_iot` con rangos de temperatura válidos (-20°C a 60°C) y humedad relativa de 0% a 100%.

⚡Historial de Sensores IoT Climáticos · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️lecturas_iot
9 cols
PK*id_lectura
BIGINT
*codigo_sensor
VARCHAR(20)
*temperatura_celsius
DECIMAL(4,2)
*humedad_relativa
DECIMAL(5,2)
*luminosidad_lux
INT
ofecha_registro
TIMESTAMP
oubicacion
VARCHAR(60)
obateria_pct
INT
opresion_atmosferica
DECIMAL(6,2)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE lecturas_iot (
2 id_lectura BIGSERIAL PRIMARY KEY,
3 codigo_sensor VARCHAR(20) NOT NULL,
4 temperatura_celsius DECIMAL(4,2) NOT NULL CHECK (temperatura_celsius BETWEEN -20.00 AND 60.00),
5 humedad_relativa DECIMAL(5,2) NOT NULL CHECK (humedad_relativa BETWEEN 0.00 AND 100.00),
6 luminosidad_lux INT NOT NULL CHECK (luminosidad_lux >= 0),
7 fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
8 ubicacion VARCHAR(60),
9 bateria_pct INT,
10 presion_atmosferica DECIMAL(6,2)
11);

✅ Checklist de Dominio Técnico

09
Tablas Simples (1 Tabla)1 Tabla

Disponibilidad de Habitaciones de Hotel

0 / 3▼

🏢 Contexto Real de Negocio

Un hotel boutique administra sus habitaciones, categorizadas por tipo (Simple, Doble, Suite, Presidencial) y tarifa por noche.

🎯 Requerimiento Técnico

Crear la tabla `habitaciones` con número de habitación único, piso positivo, tipo validado y precio base.

⚡Disponibilidad de Habitaciones de Hotel · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️habitaciones
9 cols
PK*id_habitacion
INT
*numero_habitacion
VARCHAR(10)
*piso
INT
*tipo
VARCHAR(20)
*tarifa_noche
DECIMAL(9,2)
oestado
VARCHAR(15)
ocapacidad
INT
ovista
VARCHAR(30)
ofecha_ultima_limpieza
DATE
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE habitaciones (
2 id_habitacion SERIAL PRIMARY KEY,
3 numero_habitacion VARCHAR(10) UNIQUE NOT NULL,
4 piso INT NOT NULL CHECK (piso >= 1),
5 tipo VARCHAR(20) NOT NULL CHECK (tipo IN ('Simple', 'Doble', 'Suite', 'Presidencial')),
6 tarifa_noche DECIMAL(9,2) NOT NULL CHECK (tarifa_noche > 0),
7 estado VARCHAR(15) DEFAULT 'DISPONIBLE' CHECK (estado IN ('DISPONIBLE', 'OCUPADA', 'MANTENCION')),
8 capacidad INT,
9 vista VARCHAR(30),
10 fecha_ultima_limpieza DATE
11);

✅ Checklist de Dominio Técnico

10
Tablas Simples (1 Tabla)1 Tabla

Catálogo de Cursos Online

0 / 3▼

🏢 Contexto Real de Negocio

Una academia online ofrece cursos de tecnología categorizados por nivel de dificultad, duración en horas y valor comercial.

🎯 Requerimiento Técnico

Crear la tabla `cursos` con slug único para URLs amigables, horas pedagógicas mínimas de 1 y precio.

⚡Catálogo de Cursos Online · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
🗄️cursos
10 cols
PK*id_curso
INT
*slug
VARCHAR(80)
*titulo
VARCHAR(120)
*nivel
VARCHAR(15)
*duracion_horas
INT
*precio
DECIMAL(8,2)
opublicado
BOOLEAN
oinstructor
VARCHAR(100)
oidioma
VARCHAR(20)
ofecha_creacion
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE cursos (
2 id_curso SERIAL PRIMARY KEY,
3 slug VARCHAR(80) UNIQUE NOT NULL,
4 titulo VARCHAR(120) NOT NULL,
5 nivel VARCHAR(15) NOT NULL CHECK (nivel IN ('Principiante', 'Intermedio', 'Avanzado')),
6 duracion_horas INT NOT NULL CHECK (duracion_horas > 0),
7 precio DECIMAL(8,2) NOT NULL CHECK (precio >= 0),
8 publicado BOOLEAN DEFAULT FALSE,
9 instructor VARCHAR(100),
10 idioma VARCHAR(20) DEFAULT 'Español',
11 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
12);

✅ Checklist de Dominio Técnico

11
Dos Tablas Relacionadas (1 a N)2 Tablas

Departamentos y Empleados (1:N)

0 / 4▼

🏢 Contexto Real de Negocio

Una corporación organiza a sus trabajadores por departamentos (Finanzas, Tecnología, RRHH, etc.). Un departamento tiene muchos empleados, pero un empleado pertenece a un solo departamento.

🎯 Requerimiento Técnico

Crear las tablas `departamentos` y `empleados` con llave foránea, política ON DELETE RESTRICT y consultas con INNER JOIN y LEFT JOIN para detectar departamentos sin personal.

⚡Departamentos y Empleados (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️departamentos
8 cols
PK*id_depto
INT
*nombre_depto
VARCHAR(60)
*presupuesto_anual
DECIMAL(12,2)
*ubicacion_piso
INT
oemail_depto
VARCHAR(100)
otelefono
VARCHAR(20)
ojefe_depto
VARCHAR(80)
oactivo
BOOLEAN
🗄️empleados
8 cols
PK*id_empleado
INT
FK*id_depto
INT
*nombre
VARCHAR(80)
*email
VARCHAR(100)
*salario
DECIMAL(10,2)
otelefono
VARCHAR(20)
ofecha_ingreso
DATE
oestado
VARCHAR(20)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE departamentos (
2 id_depto SERIAL PRIMARY KEY,
3 nombre_depto VARCHAR(60) UNIQUE NOT NULL,
4 presupuesto_anual DECIMAL(12,2) NOT NULL CHECK (presupuesto_anual > 0),
5 ubicacion_piso INT NOT NULL,
6 email_depto VARCHAR(100),
7 telefono VARCHAR(20),
8 jefe_depto VARCHAR(80),
9 activo BOOLEAN DEFAULT TRUE
10);
11
12CREATE TABLE empleados (
13 id_empleado SERIAL PRIMARY KEY,
14 id_depto INT NOT NULL,
15 nombre VARCHAR(80) NOT NULL,
16 email VARCHAR(100) UNIQUE NOT NULL,
17 salario DECIMAL(10,2) NOT NULL CHECK (salario > 0),
18 telefono VARCHAR(20),
19 fecha_ingreso DATE,
20 estado VARCHAR(20) DEFAULT 'ACTIVO',
21 CONSTRAINT fk_empleado_depto FOREIGN KEY (id_depto)
22 REFERENCES departamentos(id_depto)
23 ON DELETE RESTRICT
24 ON UPDATE CASCADE
25);

✅ Checklist de Dominio Técnico

12
Dos Tablas Relacionadas (1 a N)2 Tablas

Clientes y Órdenes de Compra (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Una tienda virtual registra clientes registrados y las órdenes de compra que generan a lo largo del tiempo.

🎯 Requerimiento Técnico

Crear las tablas `clientes` y `pedidos` con clave foránea `id_cliente`, estado del pedido y cálculo del total gastado por cliente.

⚡Clientes y Órdenes de Compra (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️clientes
8 cols
PK*id_cliente
INT
*nombre
VARCHAR(60)
*email
VARCHAR(100)
*ciudad
VARCHAR(50)
otelefono
VARCHAR(20)
odireccion
VARCHAR(120)
ofecha_registro
TIMESTAMP
oactivo
BOOLEAN
🗄️pedidos
8 cols
PK*id_pedido
INT
FK*id_cliente
INT
ofecha_pedido
DATE
*total
DECIMAL(10,2)
oestado
VARCHAR(20)
odireccion_envio
VARCHAR(120)
ofecha_actualizacion
TIMESTAMP
onotas
TEXT
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE clientes (
2 id_cliente SERIAL PRIMARY KEY,
3 nombre VARCHAR(60) NOT NULL,
4 email VARCHAR(100) UNIQUE NOT NULL,
5 ciudad VARCHAR(50) NOT NULL,
6 telefono VARCHAR(20),
7 direccion VARCHAR(120),
8 fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
9 activo BOOLEAN DEFAULT TRUE
10);
11
12CREATE TABLE pedidos (
13 id_pedido SERIAL PRIMARY KEY,
14 id_cliente INT NOT NULL,
15 fecha_pedido DATE DEFAULT CURRENT_DATE,
16 total DECIMAL(10,2) NOT NULL CHECK (total > 0),
17 estado VARCHAR(20) DEFAULT 'PENDIENTE' CHECK (estado IN ('PENDIENTE', 'PAGADO', 'ENVIADO', 'CANCELADO')),
18 direccion_envio VARCHAR(120),
19 fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
20 notas TEXT,
21 FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ON DELETE CASCADE
22);

✅ Checklist de Dominio Técnico

13
Dos Tablas Relacionadas (1 a N)2 Tablas

Categorías y Catálogo de Productos (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Un supermercado clasifica sus miles de productos en categorías (Lácteos, Abarrotes, Limpieza, etc.).

🎯 Requerimiento Técnico

Crear `categorias` y `productos` con ON DELETE SET NULL para que si se borra una categoría los productos no se eliminen sino que queden sin categoría.

⚡Categorías y Catálogo de Productos (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️categorias
7 cols
PK*id_categoria
INT
*nombre_categoria
VARCHAR(50)
odescripcion
TEXT
oactivo
BOOLEAN
oorden_mostrar
INT
ofecha_creacion
TIMESTAMP
oseccion
VARCHAR(40)
🗄️productos
8 cols
PK*id_producto
INT
FKoid_categoria
INT
*nombre
VARCHAR(80)
*precio
DECIMAL(8,2)
ostock
INT
osku
VARCHAR(30)
oestado
VARCHAR(15)
ofecha_creacion
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE categorias (
2 id_categoria SERIAL PRIMARY KEY,
3 nombre_categoria VARCHAR(50) UNIQUE NOT NULL,
4 descripcion TEXT,
5 activo BOOLEAN DEFAULT TRUE,
6 orden_mostrar INT DEFAULT 0,
7 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
8 seccion VARCHAR(40)
9);
10
11CREATE TABLE productos (
12 id_producto SERIAL PRIMARY KEY,
13 id_categoria INT,
14 nombre VARCHAR(80) NOT NULL,
15 precio DECIMAL(8,2) NOT NULL CHECK (precio >= 0),
16 stock INT DEFAULT 0 CHECK (stock >= 0),
17 sku VARCHAR(30),
18 estado VARCHAR(15) DEFAULT 'ACTIVO',
19 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
20 FOREIGN KEY (id_categoria) REFERENCES categorias(id_categoria) ON DELETE SET NULL
21);

✅ Checklist de Dominio Técnico

14
Dos Tablas Relacionadas (1 a N)2 Tablas

Autores y Obras Literarias (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Una editorial almacena a sus autores con biografía y país de origen, junto a todas las obras que han publicado.

🎯 Requerimiento Técnico

Crear `autores` y `libros` vinculadas por `id_autor`, con consulta agregada para contar cuántos libros ha escrito cada autor.

⚡Autores y Obras Literarias (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️autores
7 cols
PK*id_autor
INT
*nombre_autor
VARCHAR(80)
*nacionalidad
VARCHAR(40)
*anio_nacimiento
INT
oemail
VARCHAR(100)
obiografia
TEXT
oactivo
BOOLEAN
🗄️libros
8 cols
PK*id_libro
INT
FK*id_autor
INT
*titulo
VARCHAR(120)
*genero
VARCHAR(30)
*anio_publicacion
INT
oisbn
VARCHAR(20)
oprecio
DECIMAL(8,2)
oestado
VARCHAR(20)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE autores (
2 id_autor SERIAL PRIMARY KEY,
3 nombre_autor VARCHAR(80) NOT NULL,
4 nacionalidad VARCHAR(40) NOT NULL,
5 anio_nacimiento INT NOT NULL,
6 email VARCHAR(100),
7 biografia TEXT,
8 activo BOOLEAN DEFAULT TRUE
9);
10
11CREATE TABLE libros (
12 id_libro SERIAL PRIMARY KEY,
13 id_autor INT NOT NULL,
14 titulo VARCHAR(120) NOT NULL,
15 genero VARCHAR(30) NOT NULL,
16 anio_publicacion INT NOT NULL,
17 isbn VARCHAR(20),
18 precio DECIMAL(8,2),
19 estado VARCHAR(20) DEFAULT 'PUBLICADO',
20 FOREIGN KEY (id_autor) REFERENCES autores(id_autor) ON DELETE CASCADE
21);

✅ Checklist de Dominio Técnico

15
Dos Tablas Relacionadas (1 a N)2 Tablas

Fabricantes y Modelos de Vehículos (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Una concesionaria maneja marcas de fabricantes automotrices (Toyota, BMW, Ford) y los diversos modelos producidos.

🎯 Requerimiento Técnico

Crear `marcas` y `modelos` con clave foránea y consulta para filtrar marcas que tengan modelos tipo SUV o Sedán.

⚡Fabricantes y Modelos de Vehículos (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️marcas
7 cols
PK*id_marca
INT
*nombre_marca
VARCHAR(40)
*pais_origen
VARCHAR(40)
opagina_web
VARCHAR(150)
oemail_contacto
VARCHAR(100)
oanio_fundacion
INT
oactivo
BOOLEAN
🗄️modelos
7 cols
PK*id_modelo
INT
FK*id_marca
INT
*nombre_modelo
VARCHAR(50)
*carroceria
VARCHAR(20)
oanio_lanzamiento
INT
oprecio_lista
DECIMAL(10,2)
odisponible
BOOLEAN
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE marcas (
2 id_marca SERIAL PRIMARY KEY,
3 nombre_marca VARCHAR(40) UNIQUE NOT NULL,
4 pais_origen VARCHAR(40) NOT NULL,
5 pagina_web VARCHAR(150),
6 email_contacto VARCHAR(100),
7 anio_fundacion INT,
8 activo BOOLEAN DEFAULT TRUE
9);
10
11CREATE TABLE modelos (
12 id_modelo SERIAL PRIMARY KEY,
13 id_marca INT NOT NULL,
14 nombre_modelo VARCHAR(50) NOT NULL,
15 carroceria VARCHAR(20) NOT NULL CHECK (carroceria IN ('Sedan', 'SUV', 'Hatchback', 'Pickup', 'Coupe')),
16 anio_lanzamiento INT,
17 precio_lista DECIMAL(10,2),
18 disponible BOOLEAN DEFAULT TRUE,
19 FOREIGN KEY (id_marca) REFERENCES marcas(id_marca) ON DELETE CASCADE
20);

✅ Checklist de Dominio Técnico

16
Dos Tablas Relacionadas (1 a N)2 Tablas

Médicos y Consultas Clínicas (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Un policlínico lleva el registro de los médicos especialistas contratados y cada una de las consultas de atención prestadas.

🎯 Requerimiento Técnico

Crear `medicos` y `consultas` vinculadas por `id_medico`, con cálculo de ingresos totales generados por cada doctor.

⚡Médicos y Consultas Clínicas (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️medicos
8 cols
PK*id_medico
INT
*nombre_medico
VARCHAR(80)
*especialidad
VARCHAR(50)
*valor_consulta
DECIMAL(8,2)
orut_medico
VARCHAR(12)
otelefono
VARCHAR(20)
oemail
VARCHAR(100)
oactivo
BOOLEAN
🗄️consultas
8 cols
PK*id_consulta
INT
FK*id_medico
INT
*rut_paciente
VARCHAR(12)
ofecha_hora
TIMESTAMP
*diagnostico_resumen
TEXT
oestado
VARCHAR(20)
ocosto
DECIMAL(8,2)
oobservaciones
TEXT
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE medicos (
2 id_medico SERIAL PRIMARY KEY,
3 nombre_medico VARCHAR(80) NOT NULL,
4 especialidad VARCHAR(50) NOT NULL,
5 valor_consulta DECIMAL(8,2) NOT NULL CHECK (valor_consulta > 0),
6 rut_medico VARCHAR(12),
7 telefono VARCHAR(20),
8 email VARCHAR(100),
9 activo BOOLEAN DEFAULT TRUE
10);
11
12CREATE TABLE consultas (
13 id_consulta SERIAL PRIMARY KEY,
14 id_medico INT NOT NULL,
15 rut_paciente VARCHAR(12) NOT NULL,
16 fecha_hora TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
17 diagnostico_resumen TEXT NOT NULL,
18 estado VARCHAR(20) DEFAULT 'ATENDIDA',
19 costo DECIMAL(8,2),
20 observaciones TEXT,
21 FOREIGN KEY (id_medico) REFERENCES medicos(id_medico) ON DELETE RESTRICT
22);

✅ Checklist de Dominio Técnico

17
Dos Tablas Relacionadas (1 a N)2 Tablas

Docentes y Asignaturas Dictadas (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Un instituto tecnológico gestiona a sus profesores de planta y las asignaturas que tienen asignadas durante el semestre.

🎯 Requerimiento Técnico

Crear `docentes` y `asignaturas` con control de créditos académicos y búsqueda de docentes con carga académica superior a 10 créditos.

⚡Docentes y Asignaturas Dictadas (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️docentes
7 cols
PK*id_docente
INT
*nombre
VARCHAR(80)
*grado_academico
VARCHAR(30)
oemail
VARCHAR(100)
otelefono
VARCHAR(20)
odepartamento
VARCHAR(60)
oactivo
BOOLEAN
🗄️asignaturas
8 cols
PK*id_asignatura
INT
FK*id_docente
INT
*codigo_ramo
VARCHAR(15)
*nombre_ramo
VARCHAR(80)
*creditos
INT
osemestre
VARCHAR(20)
ohoras_semanales
INT
oactiva
BOOLEAN
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE docentes (
2 id_docente SERIAL PRIMARY KEY,
3 nombre VARCHAR(80) NOT NULL,
4 grado_academico VARCHAR(30) NOT NULL CHECK (grado_academico IN ('Licenciado', 'Magíster', 'Doctor')),
5 email VARCHAR(100),
6 telefono VARCHAR(20),
7 departamento VARCHAR(60),
8 activo BOOLEAN DEFAULT TRUE
9);
10
11CREATE TABLE asignaturas (
12 id_asignatura SERIAL PRIMARY KEY,
13 id_docente INT NOT NULL,
14 codigo_ramo VARCHAR(15) UNIQUE NOT NULL,
15 nombre_ramo VARCHAR(80) NOT NULL,
16 creditos INT NOT NULL CHECK (creditos BETWEEN 1 AND 12),
17 semestre VARCHAR(20),
18 horas_semanales INT,
19 activa BOOLEAN DEFAULT TRUE,
20 FOREIGN KEY (id_docente) REFERENCES docentes(id_docente) ON DELETE CASCADE
21);

✅ Checklist de Dominio Técnico

18
Dos Tablas Relacionadas (1 a N)2 Tablas

Proveedores y Facturas de Compra (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

El área de adquisiciones de una empresa controla a sus proveedores comerciales y las facturas por pagar emitidas.

🎯 Requerimiento Técnico

Crear `proveedores` y `facturas_compra` con número de factura único por proveedor y estado de pago.

⚡Proveedores y Facturas de Compra (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️proveedores
8 cols
PK*id_proveedor
INT
*rut_empresa
VARCHAR(12)
*razon_social
VARCHAR(100)
oemail
VARCHAR(100)
otelefono
VARCHAR(20)
odireccion
VARCHAR(120)
orubro
VARCHAR(60)
oactivo
BOOLEAN
🗄️facturas_compra
8 cols
PK*id_factura
INT
FK*id_proveedor
INT
*folio_factura
INT
*monto_neto
DECIMAL(12,2)
*iva
DECIMAL(12,2)
*monto_total
DECIMAL(12,2)
oestado_pago
VARCHAR(15)
ofecha_factura
DATE
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE proveedores (
2 id_proveedor SERIAL PRIMARY KEY,
3 rut_empresa VARCHAR(12) UNIQUE NOT NULL,
4 razon_social VARCHAR(100) NOT NULL,
5 email VARCHAR(100),
6 telefono VARCHAR(20),
7 direccion VARCHAR(120),
8 rubro VARCHAR(60),
9 activo BOOLEAN DEFAULT TRUE
10);
11
12CREATE TABLE facturas_compra (
13 id_factura SERIAL PRIMARY KEY,
14 id_proveedor INT NOT NULL,
15 folio_factura INT NOT NULL,
16 monto_neto DECIMAL(12,2) NOT NULL CHECK (monto_neto > 0),
17 iva DECIMAL(12,2) NOT NULL CHECK (iva >= 0),
18 monto_total DECIMAL(12,2) NOT NULL CHECK (monto_total > monto_neto),
19 estado_pago VARCHAR(15) DEFAULT 'PENDIENTE' CHECK (estado_pago IN ('PENDIENTE', 'PAGADA', 'ANULADA')),
20 fecha_factura DATE DEFAULT CURRENT_DATE,
21 UNIQUE (id_proveedor, folio_factura),
22 FOREIGN KEY (id_proveedor) REFERENCES proveedores(id_proveedor) ON DELETE RESTRICT
23);

✅ Checklist de Dominio Técnico

19
Dos Tablas Relacionadas (1 a N)2 Tablas

Cadena de Hoteles y Habitaciones (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Una cadena hotelera opera múltiples sucursales en diversas ciudades y administra las habitaciones de cada una.

🎯 Requerimiento Técnico

Crear `hoteles` y `habitaciones` con clave foránea y consulta para determinar el número de habitaciones disponibles por ciudad.

⚡Cadena de Hoteles y Habitaciones (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️hoteles
8 cols
PK*id_hotel
INT
*nombre_hotel
VARCHAR(80)
*ciudad
VARCHAR(50)
*estrellas
INT
odireccion
VARCHAR(120)
otelefono
VARCHAR(20)
oemail
VARCHAR(100)
oactivo
BOOLEAN
🗄️habitaciones
8 cols
PK*id_habitacion
INT
FK*id_hotel
INT
*numero_habitacion
VARCHAR(10)
*tarifa
DECIMAL(9,2)
odisponible
BOOLEAN
otipo_habitacion
VARCHAR(30)
opiso
INT
ofecha_actualizacion
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE hoteles (
2 id_hotel SERIAL PRIMARY KEY,
3 nombre_hotel VARCHAR(80) NOT NULL,
4 ciudad VARCHAR(50) NOT NULL,
5 estrellas INT NOT NULL CHECK (estrellas BETWEEN 1 AND 5),
6 direccion VARCHAR(120),
7 telefono VARCHAR(20),
8 email VARCHAR(100),
9 activo BOOLEAN DEFAULT TRUE
10);
11
12CREATE TABLE habitaciones (
13 id_habitacion SERIAL PRIMARY KEY,
14 id_hotel INT NOT NULL,
15 numero_habitacion VARCHAR(10) NOT NULL,
16 tarifa DECIMAL(9,2) NOT NULL CHECK (tarifa > 0),
17 disponible BOOLEAN DEFAULT TRUE,
18 tipo_habitacion VARCHAR(30),
19 piso INT,
20 fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
21 UNIQUE (id_hotel, numero_habitacion),
22 FOREIGN KEY (id_hotel) REFERENCES hoteles(id_hotel) ON DELETE CASCADE
23);

✅ Checklist de Dominio Técnico

20
Dos Tablas Relacionadas (1 a N)2 Tablas

Proyectos de Software y Tareas (1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Una software factory gestiona proyectos ágiles y el backlog de tareas pendientes o completadas.

🎯 Requerimiento Técnico

Crear `proyectos` y `tareas` con estado, prioridad (ALTA, MEDIA, BAJA) y consulta para calcular el % de avance de cada proyecto.

⚡Proyectos de Software y Tareas (1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
🗄️proyectos
8 cols
PK*id_proyecto
INT
*nombre_proyecto
VARCHAR(80)
*cliente
VARCHAR(60)
odescripcion
TEXT
ofecha_inicio
DATE
ofecha_termino
DATE
oestado
VARCHAR(20)
opresupuesto
DECIMAL(12,2)
🗄️tareas
8 cols
PK*id_tarea
INT
FK*id_proyecto
INT
*titulo_tarea
VARCHAR(100)
oprioridad
VARCHAR(10)
ocompletada
BOOLEAN
ofecha_limite
DATE
ohoras_estimadas
DECIMAL(6,2)
ofecha_creacion
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE proyectos (
2 id_proyecto SERIAL PRIMARY KEY,
3 nombre_proyecto VARCHAR(80) NOT NULL,
4 cliente VARCHAR(60) NOT NULL,
5 descripcion TEXT,
6 fecha_inicio DATE,
7 fecha_termino DATE,
8 estado VARCHAR(20) DEFAULT 'EN_CURSO',
9 presupuesto DECIMAL(12,2)
10);
11
12CREATE TABLE tareas (
13 id_tarea SERIAL PRIMARY KEY,
14 id_proyecto INT NOT NULL,
15 titulo_tarea VARCHAR(100) NOT NULL,
16 prioridad VARCHAR(10) DEFAULT 'MEDIA' CHECK (prioridad IN ('ALTA', 'MEDIA', 'BAJA')),
17 completada BOOLEAN DEFAULT FALSE,
18 fecha_limite DATE,
19 horas_estimadas DECIMAL(6,2),
20 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
21 FOREIGN KEY (id_proyecto) REFERENCES proyectos(id_proyecto) ON DELETE CASCADE
22);

✅ Checklist de Dominio Técnico

21
Esquemas Multi-Tabla (1:1, 1:N y N:M)4 Tablas

E-Commerce: Clientes, Pedidos, Detalle y Productos (N:M)

0 / 3▼

🏢 Contexto Real de Negocio

Un comercio electrónico modela clientes, órdenes de compra y productos. La relación entre pedidos y productos es Muchos a Muchos (N:M) y se resuelve mediante la tabla pivote `detalle_pedidos`.

🎯 Requerimiento Técnico

Crear el esquema de 4 tablas con llaves foráneas, cálculo de subtotales (cantidad * precio_unitario), y consulta analítica de productos más vendidos.

⚡E-Commerce: Clientes, Pedidos, Detalle y Productos (N:M) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
🗄️clientes
7 cols
PK*id_cliente
INT
*nombre
VARCHAR(80)
*email
VARCHAR(100)
otelefono
VARCHAR(20)
odireccion
VARCHAR(120)
ofecha_registro
TIMESTAMP
oactivo
BOOLEAN
🗄️productos
6 cols
PK*id_producto
INT
*nombre_producto
VARCHAR(80)
*precio_actual
DECIMAL(10,2)
ocategoria
VARCHAR(50)
ostock
INT
odescripcion
VARCHAR(200)
🗄️pedidos
7 cols
PK*id_pedido
INT
FK*id_cliente
INT
ofecha_pedido
TIMESTAMP
oestado
VARCHAR(20)
ometodo_pago
VARCHAR(30)
odireccion_envio
VARCHAR(120)
oobservaciones
VARCHAR(200)
🗄️detalle_pedidos
6 cols
PK*id_detalle
INT
FK*id_pedido
INT
FK*id_producto
INT
*cantidad
INT
*precio_unitario_historico
DECIMAL(10,2)
odescuento
DECIMAL(5,2)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE clientes (
2 id_cliente SERIAL PRIMARY KEY,
3 nombre VARCHAR(80) NOT NULL,
4 email VARCHAR(100) UNIQUE NOT NULL,
5 telefono VARCHAR(20),
6 direccion VARCHAR(120),
7 fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
8 activo BOOLEAN DEFAULT TRUE
9);
10
11CREATE TABLE productos (
12 id_producto SERIAL PRIMARY KEY,
13 nombre_producto VARCHAR(80) NOT NULL,
14 precio_actual DECIMAL(10,2) NOT NULL CHECK (precio_actual > 0),
15 categoria VARCHAR(50),
16 stock INT DEFAULT 0,
17 descripcion VARCHAR(200)
18);
19
20CREATE TABLE pedidos (
21 id_pedido SERIAL PRIMARY KEY,
22 id_cliente INT NOT NULL,
23 fecha_pedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
24 estado VARCHAR(20) DEFAULT 'PAGADO',
25 metodo_pago VARCHAR(30),
26 direccion_envio VARCHAR(120),
27 observaciones VARCHAR(200),
28 FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ON DELETE CASCADE
29);
30
31CREATE TABLE detalle_pedidos (
32 id_detalle SERIAL PRIMARY KEY,
33 id_pedido INT NOT NULL,
34 id_producto INT NOT NULL,
35 cantidad INT NOT NULL CHECK (cantidad > 0),
36 precio_unitario_historico DECIMAL(10,2) NOT NULL CHECK (precio_unitario_historico > 0),
37 descuento DECIMAL(5,2) DEFAULT 0,
38 UNIQUE (id_pedido, id_producto),
39 FOREIGN KEY (id_pedido) REFERENCES pedidos(id_pedido) ON DELETE CASCADE,
40 FOREIGN KEY (id_producto) REFERENCES productos(id_producto) ON DELETE RESTRICT
41);

✅ Checklist de Dominio Técnico

22
Esquemas Multi-Tabla (1:1, 1:N y N:M)4 Tablas

Universidad: Estudiantes, Cursos, Matrículas y Profesores (N:M + 1:N)

0 / 3▼

🏢 Contexto Real de Negocio

Un sistema académico modela la inscripción de alumnos en asignaturas. Un profesor dicta cursos (1:N), y los estudiantes se inscriben en múltiples cursos (N:M).

🎯 Requerimiento Técnico

Crear el esquema de 4 tablas (`profesores`, `cursos`, `estudiantes`, `inscripciones`) con control de nota final.

⚡Universidad: Estudiantes, Cursos, Matrículas y Profesores (N:M + 1:N) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
🗄️profesores
6 cols
PK*id_profesor
INT
*nombre
VARCHAR(80)
*departamento
VARCHAR(60)
oemail
VARCHAR(100)
otelefono
VARCHAR(20)
ofecha_contratacion
DATE
🗄️cursos
6 cols
PK*id_curso
INT
FK*id_profesor
INT
*nombre_curso
VARCHAR(80)
*creditos
INT
oaula
VARCHAR(20)
ocapacidad_max
INT
🗄️estudiantes
6 cols
PK*id_estudiante
INT
*nombre
VARCHAR(80)
*rut
VARCHAR(12)
oemail
VARCHAR(100)
ofecha_nacimiento
DATE
otelefono
VARCHAR(20)
🗄️inscripciones
6 cols
PK*id_inscripcion
INT
FK*id_estudiante
INT
FK*id_curso
INT
*semestre
VARCHAR(10)
onota_final
DECIMAL(3,2)
ofecha_inscripcion
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE profesores (
2 id_profesor SERIAL PRIMARY KEY,
3 nombre VARCHAR(80) NOT NULL,
4 departamento VARCHAR(60) NOT NULL,
5 email VARCHAR(100),
6 telefono VARCHAR(20),
7 fecha_contratacion DATE
8);
9
10CREATE TABLE cursos (
11 id_curso SERIAL PRIMARY KEY,
12 id_profesor INT NOT NULL,
13 nombre_curso VARCHAR(80) NOT NULL,
14 creditos INT NOT NULL CHECK (creditos > 0),
15 aula VARCHAR(20),
16 capacidad_max INT DEFAULT 40,
17 FOREIGN KEY (id_profesor) REFERENCES profesores(id_profesor)
18);
19
20CREATE TABLE estudiantes (
21 id_estudiante SERIAL PRIMARY KEY,
22 nombre VARCHAR(80) NOT NULL,
23 rut VARCHAR(12) UNIQUE NOT NULL,
24 email VARCHAR(100),
25 fecha_nacimiento DATE,
26 telefono VARCHAR(20)
27);
28
29CREATE TABLE inscripciones (
30 id_inscripcion SERIAL PRIMARY KEY,
31 id_estudiante INT NOT NULL,
32 id_curso INT NOT NULL,
33 semestre VARCHAR(10) NOT NULL,
34 nota_final DECIMAL(3,2) CHECK (nota_final BETWEEN 1.00 AND 7.00),
35 fecha_inscripcion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
36 UNIQUE (id_estudiante, id_curso, semestre),
37 FOREIGN KEY (id_estudiante) REFERENCES estudiantes(id_estudiante) ON DELETE CASCADE,
38 FOREIGN KEY (id_curso) REFERENCES cursos(id_curso) ON DELETE CASCADE
39);

✅ Checklist de Dominio Técnico

23
Esquemas Multi-Tabla (1:1, 1:N y N:M)4 Tablas

Cine: Películas, Salas, Funciones y Boletos

0 / 3▼

🏢 Contexto Real de Negocio

Una cadena de cines gestiona salas, catálogo de películas, horarios de funciones y venta de boletos por butaca.

🎯 Requerimiento Técnico

Crear el esquema relacional para evitar sobreventa de butacas en una misma función mediante restricciones de unicidad.

⚡Cine: Películas, Salas, Funciones y Boletos · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
🗄️peliculas
6 cols
PK*id_pelicula
INT
*titulo
VARCHAR(100)
*duracion_min
INT
ogenero
VARCHAR(30)
oclasificacion
VARCHAR(10)
osinopsis
VARCHAR(255)
🗄️salas
6 cols
PK*id_sala
INT
*nombre_sala
VARCHAR(30)
*capacidad_butacas
INT
otipo_sala
VARCHAR(30)
opiso
VARCHAR(20)
oactivo
BOOLEAN
🗄️funciones
6 cols
PK*id_funcion
INT
FK*id_pelicula
INT
FK*id_sala
INT
*fecha_hora
TIMESTAMP
oprecio_base
DECIMAL(8,2)
oestado
VARCHAR(20)
🗄️boletos
7 cols
PK*id_boleto
INT
FK*id_funcion
INT
*codigo_butaca
VARCHAR(5)
*precio_pagado
DECIMAL(8,2)
otipo_entrada
VARCHAR(20)
oestado
VARCHAR(20)
ofecha_compra
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE peliculas (
2 id_pelicula SERIAL PRIMARY KEY,
3 titulo VARCHAR(100) NOT NULL,
4 duracion_min INT NOT NULL CHECK (duracion_min > 0),
5 genero VARCHAR(30),
6 clasificacion VARCHAR(10),
7 sinopsis VARCHAR(255)
8);
9
10CREATE TABLE salas (
11 id_sala SERIAL PRIMARY KEY,
12 nombre_sala VARCHAR(30) NOT NULL,
13 capacidad_butacas INT NOT NULL CHECK (capacidad_butacas > 0),
14 tipo_sala VARCHAR(30) DEFAULT '2D',
15 piso VARCHAR(20),
16 activo BOOLEAN DEFAULT TRUE
17);
18
19CREATE TABLE funciones (
20 id_funcion SERIAL PRIMARY KEY,
21 id_pelicula INT NOT NULL,
22 id_sala INT NOT NULL,
23 fecha_hora TIMESTAMP NOT NULL,
24 precio_base DECIMAL(8,2),
25 estado VARCHAR(20) DEFAULT 'PROGRAMADA',
26 FOREIGN KEY (id_pelicula) REFERENCES peliculas(id_pelicula),
27 FOREIGN KEY (id_sala) REFERENCES salas(id_sala)
28);
29
30CREATE TABLE boletos (
31 id_boleto SERIAL PRIMARY KEY,
32 id_funcion INT NOT NULL,
33 codigo_butaca VARCHAR(5) NOT NULL,
34 precio_pagado DECIMAL(8,2) NOT NULL CHECK (precio_pagado > 0),
35 tipo_entrada VARCHAR(20) DEFAULT 'GENERAL',
36 estado VARCHAR(20) DEFAULT 'VENDIDO',
37 fecha_compra TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
38 UNIQUE (id_funcion, codigo_butaca),
39 FOREIGN KEY (id_funcion) REFERENCES funciones(id_funcion) ON DELETE CASCADE
40);

✅ Checklist de Dominio Técnico

24
Esquemas Multi-Tabla (1:1, 1:N y N:M)5 Tablas

Seguridad RBAC: Usuarios, Perfil (1:1), Roles y Permisos (N:M)

0 / 3▼

🏢 Contexto Real de Negocio

Un sistema empresarial implementa control de acceso basado en roles (RBAC). El usuario tiene una relación 1:1 estricta con su perfil biométrico/personal, y los roles tienen permisos en relación N:M.

🎯 Requerimiento Técnico

Modelar la relación 1:1 mediante clave foránea única `id_usuario` en `perfiles` y la relación N:M entre `roles` y `permisos`.

⚡Seguridad RBAC: Usuarios, Perfil (1:1), Roles y Permisos (N:M) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:1
N:M
N:M
🗄️usuarios
7 cols
PK*id_usuario
INT
*username
VARCHAR(40)
*email
VARCHAR(100)
FK*id_rol
INT
opassword_hash
VARCHAR(255)
oactivo
BOOLEAN
ofecha_creacion
TIMESTAMP
🗄️perfiles
7 cols
PK*id_perfil
INT
FK*id_usuario
INT
oavatar_url
VARCHAR(255)
otelefono
VARCHAR(20)
onombres
VARCHAR(80)
ofecha_nacimiento
DATE
odireccion
VARCHAR(120)
🗄️roles
5 cols
PK*id_rol
INT
*nombre_rol
VARCHAR(40)
odescripcion
VARCHAR(120)
oactivo
BOOLEAN
ofecha_creacion
TIMESTAMP
🗄️permisos
5 cols
PK*id_permiso
INT
*codigo_permiso
VARCHAR(50)
odescripcion
VARCHAR(120)
ocategoria
VARCHAR(40)
oactivo
BOOLEAN
🗄️rol_permisos
4 cols
PF*id_rol
INT
PF*id_permiso
INT
ofecha_asignacion
TIMESTAMP
oasignado_por
VARCHAR(40)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE roles (
2 id_rol SERIAL PRIMARY KEY,
3 nombre_rol VARCHAR(40) UNIQUE NOT NULL,
4 descripcion VARCHAR(120),
5 activo BOOLEAN DEFAULT TRUE,
6 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
7);
8
9CREATE TABLE permisos (
10 id_permiso SERIAL PRIMARY KEY,
11 codigo_permiso VARCHAR(50) UNIQUE NOT NULL,
12 descripcion VARCHAR(120),
13 categoria VARCHAR(40),
14 activo BOOLEAN DEFAULT TRUE
15);
16
17CREATE TABLE rol_permisos (
18 id_rol INT NOT NULL,
19 id_permiso INT NOT NULL,
20 fecha_asignacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
21 asignado_por VARCHAR(40),
22 PRIMARY KEY (id_rol, id_permiso),
23 FOREIGN KEY (id_rol) REFERENCES roles(id_rol) ON DELETE CASCADE,
24 FOREIGN KEY (id_permiso) REFERENCES permisos(id_permiso) ON DELETE CASCADE
25);
26
27CREATE TABLE usuarios (
28 id_usuario SERIAL PRIMARY KEY,
29 username VARCHAR(40) UNIQUE NOT NULL,
30 email VARCHAR(100) UNIQUE NOT NULL,
31 id_rol INT NOT NULL,
32 password_hash VARCHAR(255),
33 activo BOOLEAN DEFAULT TRUE,
34 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
35 FOREIGN KEY (id_rol) REFERENCES roles(id_rol)
36);
37
38CREATE TABLE perfiles (
39 id_perfil SERIAL PRIMARY KEY,
40 id_usuario INT UNIQUE NOT NULL,
41 avatar_url VARCHAR(255),
42 telefono VARCHAR(20),
43 nombres VARCHAR(80),
44 fecha_nacimiento DATE,
45 direccion VARCHAR(120),
46 FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE
47);

✅ Checklist de Dominio Técnico

25
Esquemas Multi-Tabla (1:1, 1:N y N:M)5 Tablas

Hospital: Pacientes, Especialidades, Médicos, Citas y Recetas

0 / 3▼

🏢 Contexto Real de Negocio

Un hospital clínico organiza sus consultas médicas: especialidades, médicos asignados, pacientes agendados y las recetas emitidas.

🎯 Requerimiento Técnico

Crear el esquema de 5 tablas interconectadas con llaves foráneas y consulta de historial clínico completo.

⚡Hospital: Pacientes, Especialidades, Médicos, Citas y Recetas · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
1:N
🗄️especialidades
5 cols
PK*id_especialidad
INT
*nombre_especialidad
VARCHAR(50)
odescripcion
VARCHAR(200)
ocosto_consulta
DECIMAL(8,2)
oactivo
BOOLEAN
🗄️medicos
7 cols
PK*id_medico
INT
FK*id_especialidad
INT
*nombre
VARCHAR(80)
orut
VARCHAR(12)
otelefono
VARCHAR(20)
oemail
VARCHAR(100)
oactivo
BOOLEAN
🗄️pacientes
6 cols
PK*id_paciente
INT
*nombre
VARCHAR(80)
*rut
VARCHAR(12)
ofecha_nacimiento
DATE
otelefono
VARCHAR(20)
odireccion
VARCHAR(120)
🗄️citas
7 cols
PK*id_cita
INT
FK*id_paciente
INT
FK*id_medico
INT
*fecha_hora
TIMESTAMP
oestado
VARCHAR(20)
omotivo
VARCHAR(150)
ofecha_registro
TIMESTAMP
🗄️recetas
7 cols
PK*id_receta
INT
FK*id_cita
INT
*medicamento
VARCHAR(100)
*posologia
VARCHAR(150)
odosis
VARCHAR(60)
oduracion_dias
INT
oobservaciones
VARCHAR(200)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE especialidades (
2 id_especialidad SERIAL PRIMARY KEY,
3 nombre_especialidad VARCHAR(50) UNIQUE NOT NULL,
4 descripcion VARCHAR(200),
5 costo_consulta DECIMAL(8,2) DEFAULT 0,
6 activo BOOLEAN DEFAULT TRUE
7);
8
9CREATE TABLE medicos (
10 id_medico SERIAL PRIMARY KEY,
11 id_especialidad INT NOT NULL,
12 nombre VARCHAR(80) NOT NULL,
13 rut VARCHAR(12) UNIQUE,
14 telefono VARCHAR(20),
15 email VARCHAR(100),
16 activo BOOLEAN DEFAULT TRUE,
17 FOREIGN KEY (id_especialidad) REFERENCES especialidades(id_especialidad)
18);
19
20CREATE TABLE pacientes (
21 id_paciente SERIAL PRIMARY KEY,
22 nombre VARCHAR(80) NOT NULL,
23 rut VARCHAR(12) UNIQUE NOT NULL,
24 fecha_nacimiento DATE,
25 telefono VARCHAR(20),
26 direccion VARCHAR(120)
27);
28
29CREATE TABLE citas (
30 id_cita SERIAL PRIMARY KEY,
31 id_paciente INT NOT NULL,
32 id_medico INT NOT NULL,
33 fecha_hora TIMESTAMP NOT NULL,
34 estado VARCHAR(20) DEFAULT 'AGENDADA',
35 motivo VARCHAR(150),
36 fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
37 FOREIGN KEY (id_paciente) REFERENCES pacientes(id_paciente),
38 FOREIGN KEY (id_medico) REFERENCES medicos(id_medico)
39);
40
41CREATE TABLE recetas (
42 id_receta SERIAL PRIMARY KEY,
43 id_cita INT NOT NULL,
44 medicamento VARCHAR(100) NOT NULL,
45 posologia VARCHAR(150) NOT NULL,
46 dosis VARCHAR(60),
47 duracion_dias INT,
48 observaciones VARCHAR(200),
49 FOREIGN KEY (id_cita) REFERENCES citas(id_cita) ON DELETE CASCADE
50);

✅ Checklist de Dominio Técnico

26
Esquemas Multi-Tabla (1:1, 1:N y N:M)3 Tablas

Logística y Envíos: Remitentes, Destinatarios, Transportistas y Paquetes

0 / 3▼

🏢 Contexto Real de Negocio

Una empresa de courier gestiona encomiendas vinculando al cliente que envía, cliente que recibe, la empresa transportista y el paquete.

🎯 Requerimiento Técnico

Crear el esquema de logística con tracking de estado (EN_BODEGA, EN_TRANSITO, ENTREGADO).

⚡Logística y Envíos: Remitentes, Destinatarios, Transportistas y Paquetes · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
🗄️personas
7 cols
PK*id_persona
INT
*nombre
VARCHAR(80)
*direccion
VARCHAR(120)
*ciudad
VARCHAR(50)
otelefono
VARCHAR(20)
oemail
VARCHAR(100)
oactivo
BOOLEAN
🗄️transportistas
6 cols
PK*id_transportista
INT
*nombre_chofer
VARCHAR(80)
*patente_camion
VARCHAR(8)
otelefono
VARCHAR(20)
olicencia
VARCHAR(20)
oactivo
BOOLEAN
🗄️envios
7 cols
PK*id_envio
INT
*codigo_seguimiento
VARCHAR(25)
FK*id_remitente
INT
FK*id_destinatario
INT
FK*id_transportista
INT
oestado
VARCHAR(20)
ofecha_creacion
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE personas (
2 id_persona SERIAL PRIMARY KEY,
3 nombre VARCHAR(80) NOT NULL,
4 direccion VARCHAR(120) NOT NULL,
5 ciudad VARCHAR(50) NOT NULL,
6 telefono VARCHAR(20),
7 email VARCHAR(100),
8 activo BOOLEAN DEFAULT TRUE
9);
10
11CREATE TABLE transportistas (
12 id_transportista SERIAL PRIMARY KEY,
13 nombre_chofer VARCHAR(80) NOT NULL,
14 patente_camion VARCHAR(8) NOT NULL,
15 telefono VARCHAR(20),
16 licencia VARCHAR(20),
17 activo BOOLEAN DEFAULT TRUE
18);
19
20CREATE TABLE envios (
21 id_envio SERIAL PRIMARY KEY,
22 codigo_seguimiento VARCHAR(25) UNIQUE NOT NULL,
23 id_remitente INT NOT NULL,
24 id_destinatario INT NOT NULL,
25 id_transportista INT NOT NULL,
26 estado VARCHAR(20) DEFAULT 'EN_BODEGA' CHECK (estado IN ('EN_BODEGA', 'EN_TRANSITO', 'ENTREGADO', 'DEVUELTO')),
27 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
28 FOREIGN KEY (id_remitente) REFERENCES personas(id_persona),
29 FOREIGN KEY (id_destinatario) REFERENCES personas(id_persona),
30 FOREIGN KEY (id_transportista) REFERENCES transportistas(id_transportista)
31);

✅ Checklist de Dominio Técnico

27
Esquemas Multi-Tabla (1:1, 1:N y N:M)5 Tablas

Streaming Musical: Artistas, Álbumes, Canciones y Playlists (N:M)

0 / 3▼

🏢 Contexto Real de Negocio

Una app como Spotify modela artistas que publican álbumes (1:N), álbumes que contienen canciones (1:N) y usuarios que crean playlists con canciones (N:M).

🎯 Requerimiento Técnico

Crear el modelo de 5 tablas y escribir la consulta para obtener la duración total de una playlist en minutos.

⚡Streaming Musical: Artistas, Álbumes, Canciones y Playlists (N:M) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
N:M
N:M
🗄️artistas
6 cols
PK*id_artista
INT
*nombre_artista
VARCHAR(80)
onacionalidad
VARCHAR(50)
odescripcion
VARCHAR(200)
opagina_web
VARCHAR(100)
oactivo
BOOLEAN
🗄️albumes
6 cols
PK*id_album
INT
FK*id_artista
INT
*titulo_album
VARCHAR(100)
*anio
INT
ofecha_lanzamiento
DATE
osello
VARCHAR(60)
🗄️canciones
6 cols
PK*id_cancion
INT
FK*id_album
INT
*titulo
VARCHAR(100)
*duracion_segundos
INT
onumero_pista
INT
oexplicito
BOOLEAN
🗄️playlists
6 cols
PK*id_playlist
INT
*nombre_lista
VARCHAR(80)
odescripcion
VARCHAR(200)
ocreada_por
VARCHAR(60)
oes_publica
BOOLEAN
ofecha_creacion
TIMESTAMP
🗄️playlist_canciones
4 cols
PF*id_playlist
INT
PF*id_cancion
INT
*orden
INT
ofecha_agregado
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE artistas (
2 id_artista SERIAL PRIMARY KEY,
3 nombre_artista VARCHAR(80) NOT NULL,
4 nacionalidad VARCHAR(50),
5 descripcion VARCHAR(200),
6 pagina_web VARCHAR(100),
7 activo BOOLEAN DEFAULT TRUE
8);
9
10CREATE TABLE albumes (
11 id_album SERIAL PRIMARY KEY,
12 id_artista INT NOT NULL,
13 titulo_album VARCHAR(100) NOT NULL,
14 anio INT NOT NULL,
15 fecha_lanzamiento DATE,
16 sello VARCHAR(60),
17 FOREIGN KEY (id_artista) REFERENCES artistas(id_artista) ON DELETE CASCADE
18);
19
20CREATE TABLE canciones (
21 id_cancion SERIAL PRIMARY KEY,
22 id_album INT NOT NULL,
23 titulo VARCHAR(100) NOT NULL,
24 duracion_segundos INT NOT NULL CHECK (duracion_segundos > 0),
25 numero_pista INT,
26 explicito BOOLEAN DEFAULT FALSE,
27 FOREIGN KEY (id_album) REFERENCES albumes(id_album) ON DELETE CASCADE
28);
29
30CREATE TABLE playlists (
31 id_playlist SERIAL PRIMARY KEY,
32 nombre_lista VARCHAR(80) NOT NULL,
33 descripcion VARCHAR(200),
34 creada_por VARCHAR(60),
35 es_publica BOOLEAN DEFAULT TRUE,
36 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
37);
38
39CREATE TABLE playlist_canciones (
40 id_playlist INT NOT NULL,
41 id_cancion INT NOT NULL,
42 orden INT NOT NULL,
43 fecha_agregado TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
44 PRIMARY KEY (id_playlist, id_cancion),
45 FOREIGN KEY (id_playlist) REFERENCES playlists(id_playlist) ON DELETE CASCADE,
46 FOREIGN KEY (id_cancion) REFERENCES canciones(id_cancion) ON DELETE CASCADE
47);

✅ Checklist de Dominio Técnico

28
Esquemas Multi-Tabla (1:1, 1:N y N:M)4 Tablas

Biblioteca Universitaria: Ejemplares, Préstamos y Multas (1:1)

0 / 3▼

🏢 Contexto Real de Negocio

Una biblioteca maneja títulos de libros, copias físicas (ejemplares 1:N) y préstamos a estudiantes. Si un préstamo se devuelve con atraso, genera una multa asociada en relación 1:1 estricta.

🎯 Requerimiento Técnico

Crear el esquema relacional con clave foránea 1:1 en `multas` y calcular el monto total adeudado por morosidad.

⚡Biblioteca Universitaria: Ejemplares, Préstamos y Multas (1:1) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:1
🗄️libros
6 cols
PK*id_libro
INT
*titulo
VARCHAR(120)
oautor
VARCHAR(100)
oisbn
VARCHAR(17)
oeditorial
VARCHAR(60)
oanio_publicacion
INT
🗄️ejemplares
6 cols
PK*id_ejemplar
INT
FK*id_libro
INT
*codigo_barra
VARCHAR(20)
oestado
VARCHAR(20)
ofecha_adquisicion
DATE
oubicacion
VARCHAR(40)
🗄️prestamos
7 cols
PK*id_prestamo
INT
FK*id_ejemplar
INT
*rut_usuario
VARCHAR(12)
*fecha_prestamo
DATE
*fecha_devolucion_pactada
DATE
ofecha_devolucion_real
DATE
oestado
VARCHAR(20)
🗄️multas
7 cols
PK*id_multa
INT
FK*id_prestamo
INT
*dias_retraso
INT
*monto_multa
DECIMAL(8,2)
opagada
BOOLEAN
ofecha_generacion
TIMESTAMP
omotivo
VARCHAR(150)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE libros (
2 id_libro SERIAL PRIMARY KEY,
3 titulo VARCHAR(120) NOT NULL,
4 autor VARCHAR(100),
5 isbn VARCHAR(17) UNIQUE,
6 editorial VARCHAR(60),
7 anio_publicacion INT
8);
9
10CREATE TABLE ejemplares (
11 id_ejemplar SERIAL PRIMARY KEY,
12 id_libro INT NOT NULL,
13 codigo_barra VARCHAR(20) UNIQUE NOT NULL,
14 estado VARCHAR(20) DEFAULT 'DISPONIBLE',
15 fecha_adquisicion DATE,
16 ubicacion VARCHAR(40),
17 FOREIGN KEY (id_libro) REFERENCES libros(id_libro)
18);
19
20CREATE TABLE prestamos (
21 id_prestamo SERIAL PRIMARY KEY,
22 id_ejemplar INT NOT NULL,
23 rut_usuario VARCHAR(12) NOT NULL,
24 fecha_prestamo DATE NOT NULL,
25 fecha_devolucion_pactada DATE NOT NULL,
26 fecha_devolucion_real DATE,
27 estado VARCHAR(20) DEFAULT 'ACTIVO',
28 FOREIGN KEY (id_ejemplar) REFERENCES ejemplares(id_ejemplar)
29);
30
31CREATE TABLE multas (
32 id_multa SERIAL PRIMARY KEY,
33 id_prestamo INT UNIQUE NOT NULL,
34 dias_retraso INT NOT NULL CHECK (dias_retraso > 0),
35 monto_multa DECIMAL(8,2) NOT NULL CHECK (monto_multa > 0),
36 pagada BOOLEAN DEFAULT FALSE,
37 fecha_generacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
38 motivo VARCHAR(150),
39 FOREIGN KEY (id_prestamo) REFERENCES prestamos(id_prestamo) ON DELETE CASCADE
40);

✅ Checklist de Dominio Técnico

29
Esquemas Multi-Tabla (1:1, 1:N y N:M)4 Tablas

Liga de Fútbol: Equipos, Jugadores, Partidos y Estadísticas

0 / 3▼

🏢 Contexto Real de Negocio

Una liga profesional de fútbol gestiona equipos, futbolistas, calendario de partidos entre equipo local y visitante, y el registro de goles.

🎯 Requerimiento Técnico

Crear el esquema relacional asegurando que un partido enfrente a dos equipos distintos y calcular la tabla de goleadores.

⚡Liga de Fútbol: Equipos, Jugadores, Partidos y Estadísticas · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
1:N
1:N
🗄️equipos
6 cols
PK*id_equipo
INT
*nombre_club
VARCHAR(60)
ociudad
VARCHAR(50)
oestadio
VARCHAR(80)
ofecha_fundacion
DATE
oactivo
BOOLEAN
🗄️jugadores
7 cols
PK*id_jugador
INT
FK*id_equipo
INT
*nombre
VARCHAR(80)
*posicion
VARCHAR(20)
onumero_camiseta
INT
ofecha_nacimiento
DATE
onacionalidad
VARCHAR(50)
🗄️partidos
7 cols
PK*id_partido
INT
FK*id_equipo_local
INT
FK*id_equipo_visita
INT
*fecha_partido
DATE
ojornada
INT
ohora_partido
TIME
oestado
VARCHAR(20)
🗄️goles
6 cols
PK*id_gol
INT
FK*id_partido
INT
FK*id_jugador
INT
*minuto
INT
oes_penalti
BOOLEAN
ofecha_registro
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE equipos (
2 id_equipo SERIAL PRIMARY KEY,
3 nombre_club VARCHAR(60) UNIQUE NOT NULL,
4 ciudad VARCHAR(50),
5 estadio VARCHAR(80),
6 fecha_fundacion DATE,
7 activo BOOLEAN DEFAULT TRUE
8);
9
10CREATE TABLE jugadores (
11 id_jugador SERIAL PRIMARY KEY,
12 id_equipo INT NOT NULL,
13 nombre VARCHAR(80) NOT NULL,
14 posicion VARCHAR(20) NOT NULL,
15 numero_camiseta INT,
16 fecha_nacimiento DATE,
17 nacionalidad VARCHAR(50),
18 FOREIGN KEY (id_equipo) REFERENCES equipos(id_equipo)
19);
20
21CREATE TABLE partidos (
22 id_partido SERIAL PRIMARY KEY,
23 id_equipo_local INT NOT NULL,
24 id_equipo_visita INT NOT NULL,
25 fecha_partido DATE NOT NULL,
26 jornada INT,
27 hora_partido TIME,
28 estado VARCHAR(20) DEFAULT 'PROGRAMADO',
29 CHECK (id_equipo_local <> id_equipo_visita),
30 FOREIGN KEY (id_equipo_local) REFERENCES equipos(id_equipo),
31 FOREIGN KEY (id_equipo_visita) REFERENCES equipos(id_equipo)
32);
33
34CREATE TABLE goles (
35 id_gol SERIAL PRIMARY KEY,
36 id_partido INT NOT NULL,
37 id_jugador INT NOT NULL,
38 minuto INT NOT NULL CHECK (minuto BETWEEN 1 AND 120),
39 es_penalti BOOLEAN DEFAULT FALSE,
40 fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
41 FOREIGN KEY (id_partido) REFERENCES partidos(id_partido) ON DELETE CASCADE,
42 FOREIGN KEY (id_jugador) REFERENCES jugadores(id_jugador)
43);

✅ Checklist de Dominio Técnico

30
Esquemas Multi-Tabla (1:1, 1:N y N:M)4 Tablas

Restaurante: Mesas, Meseros, Comandas y Receta_Plato (N:M)

0 / 3▼

🏢 Contexto Real de Negocio

Un restaurante gourmet administra mesas, meseros que atienden comandas, platos pedidos y los ingredientes que componen cada receta (N:M).

🎯 Requerimiento Técnico

Crear el esquema completo para determinar el consumo por mesa y descontar insumos de inventario.

⚡Restaurante: Mesas, Meseros, Comandas y Receta_Plato (N:M) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
N:M
N:M
🗄️meseros
6 cols
PK*id_mesero
INT
*nombre
VARCHAR(60)
otelefono
VARCHAR(20)
oemail
VARCHAR(100)
ofecha_contratacion
DATE
oactivo
BOOLEAN
🗄️comandas
7 cols
PK*id_comanda
INT
*numero_mesa
INT
FK*id_mesero
INT
ohora_apertura
TIMESTAMP
oestado
VARCHAR(20)
ohora_cierre
TIMESTAMP
oobservaciones
VARCHAR(200)
🗄️platos
6 cols
PK*id_plato
INT
*nombre_plato
VARCHAR(80)
*precio
DECIMAL(8,2)
ocategoria
VARCHAR(40)
odescripcion
VARCHAR(200)
odisponible
BOOLEAN
🗄️detalle_comanda
5 cols
PF*id_comanda
INT
PF*id_plato
INT
*cantidad
INT
osubtotal
DECIMAL(8,2)
onotas
VARCHAR(150)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE meseros (
2 id_mesero SERIAL PRIMARY KEY,
3 nombre VARCHAR(60) NOT NULL,
4 telefono VARCHAR(20),
5 email VARCHAR(100),
6 fecha_contratacion DATE,
7 activo BOOLEAN DEFAULT TRUE
8);
9
10CREATE TABLE comandas (
11 id_comanda SERIAL PRIMARY KEY,
12 numero_mesa INT NOT NULL CHECK (numero_mesa > 0),
13 id_mesero INT NOT NULL,
14 hora_apertura TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
15 estado VARCHAR(20) DEFAULT 'ABIERTA',
16 hora_cierre TIMESTAMP,
17 observaciones VARCHAR(200),
18 FOREIGN KEY (id_mesero) REFERENCES meseros(id_mesero)
19);
20
21CREATE TABLE platos (
22 id_plato SERIAL PRIMARY KEY,
23 nombre_plato VARCHAR(80) NOT NULL,
24 precio DECIMAL(8,2) NOT NULL CHECK (precio > 0),
25 categoria VARCHAR(40),
26 descripcion VARCHAR(200),
27 disponible BOOLEAN DEFAULT TRUE
28);
29
30CREATE TABLE detalle_comanda (
31 id_comanda INT NOT NULL,
32 id_plato INT NOT NULL,
33 cantidad INT NOT NULL CHECK (cantidad > 0),
34 subtotal DECIMAL(8,2),
35 notas VARCHAR(150),
36 PRIMARY KEY (id_comanda, id_plato),
37 FOREIGN KEY (id_comanda) REFERENCES comandas(id_comanda) ON DELETE CASCADE,
38 FOREIGN KEY (id_plato) REFERENCES platos(id_plato)
39);

✅ Checklist de Dominio Técnico

31
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Mega E-Commerce Omnicanal Global (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Una multinacional de comercio electrónico diseña su arquitectura de base de datos relacional para gestionar usuarios, perfiles, direcciones de despacho, categorías de productos, catálogo, inventario en bodegas múltiples, órdenes de compra, ítems del pedido, métodos de pago y transacciones de pasarela.

🎯 Requerimiento Técnico

Diseñar e implementar el esquema completo de 10 tablas interconectadas con llaves primarias, foráneas, índices, restricciones de integridad y consultas analíticas de reportería gerencial.

⚡Mega E-Commerce Omnicanal Global (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:1
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
🗄️usuarios
7 cols
PK*id_usuario
BIGINT
*email
VARCHAR(120)
*password_hash
VARCHAR(255)
ofecha_registro
TIMESTAMP
otelefono
VARCHAR(20)
oestado
VARCHAR(20)
oavatar_url
VARCHAR(255)
🗄️perfiles
6 cols
PK*id_perfil
BIGINT
FKoid_usuario
BIGINT
*nombre
VARCHAR(80)
otelefono
VARCHAR(20)
ofecha_nacimiento
DATE
ogenero
VARCHAR(10)
🗄️direcciones
7 cols
PK*id_direccion
BIGINT
FKoid_usuario
BIGINT
*calle
VARCHAR(150)
*ciudad
VARCHAR(60)
oregion
VARCHAR(60)
ocodigo_postal
VARCHAR(10)
oes_principal
BOOLEAN
🗄️categorias
6 cols
PK*id_categoria
INT
*nombre_categoria
VARCHAR(60)
odescripcion
TEXT
oactivo
BOOLEAN
oorden
INT
ofecha_creacion
TIMESTAMP
🗄️productos
7 cols
PK*id_producto
BIGINT
FKoid_categoria
INT
osku
VARCHAR(30)
*nombre_producto
VARCHAR(120)
*precio
DECIMAL(12,2)
odescripcion
TEXT
oactivo
BOOLEAN
🗄️inventario_bodega
6 cols
PK*id_inventario
BIGINT
FKoid_producto
BIGINT
obodega_codigo
VARCHAR(20)
*stock_disponible
INT
ostock_minimo
INT
ofecha_ultima_entrada
TIMESTAMP
🗄️pedidos
7 cols
PK*id_pedido
BIGINT
FKoid_usuario
BIGINT
FKoid_direccion_envio
BIGINT
ofecha_pedido
TIMESTAMP
*monto_total
DECIMAL(12,2)
oestado
VARCHAR(20)
ocanal
VARCHAR(30)
🗄️detalle_pedidos
6 cols
PK*id_detalle
BIGINT
FKoid_pedido
BIGINT
FKoid_producto
BIGINT
*cantidad
INT
*precio_unitario
DECIMAL(12,2)
odescuento
DECIMAL(12,2)
🗄️metodos_pago
5 cols
PK*id_metodo
INT
*codigo
VARCHAR(30)
*nombre
VARCHAR(50)
odescripcion
TEXT
oactivo
BOOLEAN
🗄️pagos_transaccion
7 cols
PK*id_pago
BIGINT
FKoid_pedido
BIGINT
FKoid_metodo
INT
*monto_pagado
DECIMAL(12,2)
oestado_pago
VARCHAR(20)
ofecha_pago
TIMESTAMP
oobservaciones
TEXT
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1-- 1. Usuarios y Perfiles (1:1)
2CREATE TABLE usuarios (
3 id_usuario BIGSERIAL PRIMARY KEY,
4 email VARCHAR(120) UNIQUE NOT NULL,
5 password_hash VARCHAR(255) NOT NULL,
6 fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
7 telefono VARCHAR(20),
8 estado VARCHAR(20) DEFAULT 'ACTIVO',
9 avatar_url VARCHAR(255)
10);
11
12CREATE TABLE perfiles (
13 id_perfil BIGSERIAL PRIMARY KEY,
14 id_usuario BIGINT UNIQUE NOT NULL,
15 nombre VARCHAR(80) NOT NULL,
16 telefono VARCHAR(20),
17 fecha_nacimiento DATE,
18 genero VARCHAR(10),
19 FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE
20);
21
22-- 2. Direcciones
23CREATE TABLE direcciones (
24 id_direccion BIGSERIAL PRIMARY KEY,
25 id_usuario BIGINT NOT NULL,
26 calle VARCHAR(150) NOT NULL,
27 ciudad VARCHAR(60) NOT NULL,
28 region VARCHAR(60),
29 codigo_postal VARCHAR(10),
30 es_principal BOOLEAN DEFAULT FALSE,
31 FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE
32);
33
34-- 3. Categorías y Productos
35CREATE TABLE categorias (
36 id_categoria SERIAL PRIMARY KEY,
37 nombre_categoria VARCHAR(60) UNIQUE NOT NULL,
38 descripcion TEXT,
39 activo BOOLEAN DEFAULT TRUE,
40 orden INT,
41 fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
42);
43
44CREATE TABLE productos (
45 id_producto BIGSERIAL PRIMARY KEY,
46 id_categoria INT NOT NULL,
47 sku VARCHAR(30) UNIQUE NOT NULL,
48 nombre_producto VARCHAR(120) NOT NULL,
49 precio DECIMAL(12,2) NOT NULL CHECK (precio > 0),
50 descripcion TEXT,
51 activo BOOLEAN DEFAULT TRUE,
52 FOREIGN KEY (id_categoria) REFERENCES categorias(id_categoria)
53);
54
55-- 4. Inventario Multibodega
56CREATE TABLE inventario_bodega (
57 id_inventario BIGSERIAL PRIMARY KEY,
58 id_producto BIGINT NOT NULL,
59 bodega_codigo VARCHAR(20) NOT NULL,
60 stock_disponible INT NOT NULL CHECK (stock_disponible >= 0),
61 stock_minimo INT DEFAULT 5,
62 fecha_ultima_entrada TIMESTAMP,
63 UNIQUE (id_producto, bodega_codigo),
64 FOREIGN KEY (id_producto) REFERENCES productos(id_producto) ON DELETE CASCADE
65);
66
67-- 5. Pedidos y Detalle (N:M)
68CREATE TABLE pedidos (
69 id_pedido BIGSERIAL PRIMARY KEY,
70 id_usuario BIGINT NOT NULL,
71 id_direccion_envio BIGINT NOT NULL,
72 fecha_pedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
73 monto_total DECIMAL(12,2) NOT NULL CHECK (monto_total >= 0),
74 estado VARCHAR(20) DEFAULT 'PENDIENTE',
75 canal VARCHAR(30) DEFAULT 'WEB',
76 FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario),
77 FOREIGN KEY (id_direccion_envio) REFERENCES direcciones(id_direccion)
78);
79
80CREATE TABLE detalle_pedidos (
81 id_detalle BIGSERIAL PRIMARY KEY,
82 id_pedido BIGINT NOT NULL,
83 id_producto BIGINT NOT NULL,
84 cantidad INT NOT NULL CHECK (cantidad > 0),
85 precio_unitario DECIMAL(12,2) NOT NULL CHECK (precio_unitario > 0),
86 descuento DECIMAL(12,2) DEFAULT 0,
87 UNIQUE (id_pedido, id_producto),
88 FOREIGN KEY (id_pedido) REFERENCES pedidos(id_pedido) ON DELETE CASCADE,
89 FOREIGN KEY (id_producto) REFERENCES productos(id_producto)
90);
91
92-- 6. Pasarela y Transacciones
93CREATE TABLE metodos_pago (
94 id_metodo SERIAL PRIMARY KEY,
95 codigo VARCHAR(30) UNIQUE NOT NULL,
96 nombre VARCHAR(50) NOT NULL,
97 descripcion TEXT,
98 activo BOOLEAN DEFAULT TRUE
99);
100
101CREATE TABLE pagos_transaccion (
102 id_pago BIGSERIAL PRIMARY KEY,
103 id_pedido BIGINT NOT NULL,
104 id_metodo INT NOT NULL,
105 monto_pagado DECIMAL(12,2) NOT NULL,
106 estado_pago VARCHAR(20) DEFAULT 'APROBADO' CHECK (estado_pago IN ('APROBADO', 'RECHAZADO', 'PENDIENTE')),
107 fecha_pago TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
108 observaciones TEXT,
109 FOREIGN KEY (id_pedido) REFERENCES pedidos(id_pedido) ON DELETE CASCADE,
110 FOREIGN KEY (id_metodo) REFERENCES metodos_pago(id_metodo)
111);

✅ Checklist de Dominio Técnico

32
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Sistema Integral Hospitalario y Farmacéutico (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Un complejo hospitalario clínico gestiona pacientes, historiales clínicos 1:1, médicos, especialidades, turnos de guardia, citas médicas, diagnósticos CIE-10, catálogo de medicamentos, recetas médicas y dispensaciones de farmacia.

🎯 Requerimiento Técnico

Crear el esquema relacional hospitalario de 10 tablas y formular la consulta de trazabilidad de medicamentos dispensados a pacientes.

⚡Sistema Integral Hospitalario y Farmacéutico (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:1
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
🗄️pacientes
6 cols
PK*id_paciente
BIGINT
orut
VARCHAR(12)
*nombre
VARCHAR(80)
ofecha_nacimiento
DATE
otelefono
VARCHAR(20)
osexo
VARCHAR(1)
🗄️historiales_clinicos
5 cols
PK*id_historial
BIGINT
FKoid_paciente
BIGINT
ogrupo_sangre
VARCHAR(3)
oalergias
TEXT
ofecha_apertura
TIMESTAMP
🗄️especialidades
5 cols
PK*id_especialidad
INT
onombre_especialidad
VARCHAR(60)
odescripcion
TEXT
oactivo
BOOLEAN
oorden
INT
🗄️medicos
6 cols
PK*id_medico
INT
FKoid_especialidad
INT
*nombre
VARCHAR(80)
orut
VARCHAR(12)
otelefono
VARCHAR(20)
oactivo
BOOLEAN
🗄️turnos_guardia
6 cols
PK*id_turno
BIGINT
FKoid_medico
INT
*fecha
DATE
ohora_inicio
TIMESTAMP
ohora_fin
TIMESTAMP
otipo_turno
VARCHAR(20)
🗄️citas_medicas
7 cols
PK*id_cita
BIGINT
FKoid_paciente
BIGINT
FKoid_medico
INT
*fecha_hora
TIMESTAMP
oestado
VARCHAR(20)
omotivo
TEXT
ocanal
VARCHAR(30)
🗄️diagnosticos
6 cols
PK*id_diagnostico
BIGINT
FKoid_cita
BIGINT
*codigo_cie10
VARCHAR(10)
*descripcion
TEXT
oseveridad
VARCHAR(20)
ofecha_diagnostico
TIMESTAMP
🗄️medicamentos
6 cols
PK*id_medicamento
INT
onombre_generico
VARCHAR(100)
*stock
INT
olaboratorio
VARCHAR(80)
ostock_minimo
INT
ofecha_vencimiento
DATE
🗄️recetas
7 cols
PK*id_receta
BIGINT
FKoid_cita
BIGINT
FKoid_medicamento
INT
odosis
VARCHAR(100)
ofrecuencia
VARCHAR(50)
oduracion_dias
INT
ofecha_receta
TIMESTAMP
🗄️dispensaciones_farmacia
6 cols
PK*id_dispensacion
BIGINT
FKoid_receta
BIGINT
*cantidad_entregada
INT
ofecha_entrega
TIMESTAMP
odispensario
VARCHAR(50)
oestado
VARCHAR(20)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE pacientes (
2 id_paciente BIGSERIAL PRIMARY KEY,
3 rut VARCHAR(12) UNIQUE NOT NULL,
4 nombre VARCHAR(80) NOT NULL,
5 fecha_nacimiento DATE,
6 telefono VARCHAR(20),
7 sexo VARCHAR(1)
8);
9
10CREATE TABLE historiales_clinicos (
11 id_historial BIGSERIAL PRIMARY KEY,
12 id_paciente BIGINT UNIQUE NOT NULL,
13 grupo_sangre VARCHAR(3) NOT NULL,
14 alergias TEXT,
15 fecha_apertura TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
16 FOREIGN KEY (id_paciente) REFERENCES pacientes(id_paciente) ON DELETE CASCADE
17);
18
19CREATE TABLE especialidades (
20 id_especialidad SERIAL PRIMARY KEY,
21 nombre_especialidad VARCHAR(60) UNIQUE NOT NULL,
22 descripcion TEXT,
23 activo BOOLEAN DEFAULT TRUE,
24 orden INT
25);
26
27CREATE TABLE medicos (
28 id_medico SERIAL PRIMARY KEY,
29 id_especialidad INT NOT NULL,
30 nombre VARCHAR(80) NOT NULL,
31 rut VARCHAR(12),
32 telefono VARCHAR(20),
33 activo BOOLEAN DEFAULT TRUE,
34 FOREIGN KEY (id_especialidad) REFERENCES especialidades(id_especialidad)
35);
36
37CREATE TABLE turnos_guardia (
38 id_turno BIGSERIAL PRIMARY KEY,
39 id_medico INT NOT NULL,
40 fecha DATE NOT NULL,
41 hora_inicio TIMESTAMP,
42 hora_fin TIMESTAMP,
43 tipo_turno VARCHAR(20) DEFAULT 'DIURNO',
44 FOREIGN KEY (id_medico) REFERENCES medicos(id_medico)
45);
46
47CREATE TABLE citas_medicas (
48 id_cita BIGSERIAL PRIMARY KEY,
49 id_paciente BIGINT NOT NULL,
50 id_medico INT NOT NULL,
51 fecha_hora TIMESTAMP NOT NULL,
52 estado VARCHAR(20) DEFAULT 'PROGRAMADA',
53 motivo TEXT,
54 canal VARCHAR(30) DEFAULT 'PRESENCIAL',
55 FOREIGN KEY (id_paciente) REFERENCES pacientes(id_paciente),
56 FOREIGN KEY (id_medico) REFERENCES medicos(id_medico)
57);
58
59CREATE TABLE diagnosticos (
60 id_diagnostico BIGSERIAL PRIMARY KEY,
61 id_cita BIGINT NOT NULL,
62 codigo_cie10 VARCHAR(10) NOT NULL,
63 descripcion TEXT NOT NULL,
64 severidad VARCHAR(20),
65 fecha_diagnostico TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
66 FOREIGN KEY (id_cita) REFERENCES citas_medicas(id_cita)
67);
68
69CREATE TABLE medicamentos (
70 id_medicamento SERIAL PRIMARY KEY,
71 nombre_generico VARCHAR(100) UNIQUE NOT NULL,
72 stock INT NOT NULL CHECK (stock >= 0),
73 laboratorio VARCHAR(80),
74 stock_minimo INT DEFAULT 10,
75 fecha_vencimiento DATE
76);
77
78CREATE TABLE recetas (
79 id_receta BIGSERIAL PRIMARY KEY,
80 id_cita BIGINT NOT NULL,
81 id_medicamento INT NOT NULL,
82 dosis VARCHAR(100) NOT NULL,
83 frecuencia VARCHAR(50),
84 duracion_dias INT,
85 fecha_receta TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
86 FOREIGN KEY (id_cita) REFERENCES citas_medicas(id_cita),
87 FOREIGN KEY (id_medicamento) REFERENCES medicamentos(id_medicamento)
88);
89
90CREATE TABLE dispensaciones_farmacia (
91 id_dispensacion BIGSERIAL PRIMARY KEY,
92 id_receta BIGINT NOT NULL,
93 cantidad_entregada INT NOT NULL CHECK (cantidad_entregada > 0),
94 fecha_entrega TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
95 dispensario VARCHAR(50),
96 estado VARCHAR(20) DEFAULT 'ENTREGADA',
97 FOREIGN KEY (id_receta) REFERENCES recetas(id_receta)
98);

✅ Checklist de Dominio Técnico

33
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Plataforma Educativa LMS / Universidad Virtual (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Una plataforma tipo Platzi/Canvas estructura instituciones, usuarios, roles, carreras, cursos, módulos, lecciones de video, inscripciones, evaluaciones y calificaciones.

🎯 Requerimiento Técnico

Crear el esquema educativo de 10 tablas y calcular el promedio ponderado de calificaciones de los estudiantes en cada curso.

⚡Plataforma Educativa LMS / Universidad Virtual (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
🗄️instituciones
5 cols
PK*id_institucion
INT
onombre_institucion
VARCHAR(100)
odescripcion
TEXT
oactivo
BOOLEAN
oorden
INT
🗄️roles
5 cols
PK*id_rol
INT
onombre_rol
VARCHAR(30)
odescripcion
TEXT
oactivo
BOOLEAN
oorden
INT
🗄️usuarios
7 cols
PK*id_usuario
BIGINT
FKoid_institucion
INT
FKoid_rol
INT
oemail
VARCHAR(100)
*nombre
VARCHAR(80)
ofecha_registro
TIMESTAMP
oestado
VARCHAR(20)
🗄️carreras
5 cols
PK*id_carrera
INT
onombre_carrera
VARCHAR(80)
odescripcion
TEXT
oduracion_semestres
INT
oactivo
BOOLEAN
🗄️cursos
6 cols
PK*id_curso
BIGINT
FKoid_carrera
INT
otitulo
VARCHAR(100)
odescripcion
TEXT
ocreditos
INT
oactivo
BOOLEAN
🗄️modulos
6 cols
PK*id_modulo
BIGINT
FKoid_curso
BIGINT
otitulo_modulo
VARCHAR(80)
oorden
INT
odescripcion
TEXT
oactivo
BOOLEAN
🗄️lecciones
6 cols
PK*id_leccion
BIGINT
FKoid_modulo
BIGINT
otitulo_leccion
VARCHAR(100)
*duracion_min
INT
oorden
INT
otipo_recurso
VARCHAR(30)
🗄️inscripciones
6 cols
PK*id_inscripcion
BIGINT
FKoid_usuario
BIGINT
FKoid_curso
BIGINT
ofecha_inscripcion
TIMESTAMP
oestado
VARCHAR(20)
oprogreso_pct
DECIMAL(5,2)
🗄️evaluaciones
6 cols
PK*id_evaluacion
BIGINT
FKoid_curso
BIGINT
*nombre_evaluacion
VARCHAR(60)
oponderacion
DECIMAL(4,2)
ofecha_evaluacion
DATE
otipo
VARCHAR(30)
🗄️calificaciones
6 cols
PK*id_calificacion
BIGINT
FKoid_inscripcion
BIGINT
FKoid_evaluacion
BIGINT
onota
DECIMAL(3,2)
ofecha_calificacion
TIMESTAMP
ointento
INT
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE instituciones (id_institucion SERIAL PRIMARY KEY, nombre_institucion VARCHAR(100) UNIQUE NOT NULL, descripcion TEXT, activo BOOLEAN DEFAULT TRUE, orden INT);
2CREATE TABLE roles (id_rol SERIAL PRIMARY KEY, nombre_rol VARCHAR(30) UNIQUE NOT NULL, descripcion TEXT, activo BOOLEAN DEFAULT TRUE, orden INT);
3CREATE TABLE usuarios (id_usuario BIGSERIAL PRIMARY KEY, id_institucion INT NOT NULL, id_rol INT NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, nombre VARCHAR(80) NOT NULL, fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP, estado VARCHAR(20) DEFAULT 'ACTIVO', FOREIGN KEY (id_institucion) REFERENCES instituciones(id_institucion), FOREIGN KEY (id_rol) REFERENCES roles(id_rol));
4CREATE TABLE carreras (id_carrera SERIAL PRIMARY KEY, nombre_carrera VARCHAR(80) NOT NULL, descripcion TEXT, duracion_semestres INT, activo BOOLEAN DEFAULT TRUE);
5CREATE TABLE cursos (id_curso BIGSERIAL PRIMARY KEY, id_carrera INT NOT NULL, titulo VARCHAR(100) NOT NULL, descripcion TEXT, creditos INT, activo BOOLEAN DEFAULT TRUE, FOREIGN KEY (id_carrera) REFERENCES carreras(id_carrera));
6CREATE TABLE modulos (id_modulo BIGSERIAL PRIMARY KEY, id_curso BIGINT NOT NULL, titulo_modulo VARCHAR(80) NOT NULL, orden INT, descripcion TEXT, activo BOOLEAN DEFAULT TRUE, FOREIGN KEY (id_curso) REFERENCES cursos(id_curso) ON DELETE CASCADE);
7CREATE TABLE lecciones (id_leccion BIGSERIAL PRIMARY KEY, id_modulo BIGINT NOT NULL, titulo_leccion VARCHAR(100) NOT NULL, duracion_min INT NOT NULL, orden INT, tipo_recurso VARCHAR(30) DEFAULT 'VIDEO', FOREIGN KEY (id_modulo) REFERENCES modulos(id_modulo) ON DELETE CASCADE);
8CREATE TABLE inscripciones (id_inscripcion BIGSERIAL PRIMARY KEY, id_usuario BIGINT NOT NULL, id_curso BIGINT NOT NULL, fecha_inscripcion TIMESTAMP DEFAULT CURRENT_TIMESTAMP, estado VARCHAR(20) DEFAULT 'ACTIVA', progreso_pct DECIMAL(5,2) DEFAULT 0, UNIQUE (id_usuario, id_curso), FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario), FOREIGN KEY (id_curso) REFERENCES cursos(id_curso));
9CREATE TABLE evaluaciones (id_evaluacion BIGSERIAL PRIMARY KEY, id_curso BIGINT NOT NULL, nombre_evaluacion VARCHAR(60) NOT NULL, ponderacion DECIMAL(4,2) NOT NULL, fecha_evaluacion DATE, tipo VARCHAR(30) DEFAULT 'EXAMEN', FOREIGN KEY (id_curso) REFERENCES cursos(id_curso));
10CREATE TABLE calificaciones (id_calificacion BIGSERIAL PRIMARY KEY, id_inscripcion BIGINT NOT NULL, id_evaluacion BIGINT NOT NULL, nota DECIMAL(3,2) NOT NULL CHECK (nota BETWEEN 1.00 AND 7.00), fecha_calificacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP, intento INT DEFAULT 1, UNIQUE (id_inscripcion, id_evaluacion), FOREIGN KEY (id_inscripcion) REFERENCES inscripciones(id_inscripcion) ON DELETE CASCADE, FOREIGN KEY (id_evaluacion) REFERENCES evaluaciones(id_evaluacion));

✅ Checklist de Dominio Técnico

34
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Sistema Bancario y Financiero Multi-Divisa (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Una institución bancaria diseña su núcleo transaccional: clientes, sucursales físicas, empleados bancarios, cuentas de ahorro/corriente, tipos de cuenta, tarjetas de débito/crédito, transacciones de saldo, transferencias interbancarias, créditos/préstamos otorgados y cuotas de pago.

🎯 Requerimiento Técnico

Implementar el esquema bancario de 10 tablas con validaciones ACID y reporte de saldos consolidados.

⚡Sistema Bancario y Financiero Multi-Divisa (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
🗄️sucursales
6 cols
PK*id_sucursal
INT
onombre_sucursal
VARCHAR(60)
ociudad
VARCHAR(60)
odireccion
VARCHAR(150)
otelefono
VARCHAR(20)
oactivo
BOOLEAN
🗄️empleados
6 cols
PK*id_empleado
INT
FKoid_sucursal
INT
onombre
VARCHAR(80)
ocargo
VARCHAR(60)
oemail
VARCHAR(100)
ofecha_ingreso
DATE
🗄️clientes
7 cols
PK*id_cliente
BIGINT
orut
VARCHAR(12)
onombre
VARCHAR(80)
oemail
VARCHAR(100)
otelefono
VARCHAR(20)
ofecha_nacimiento
DATE
oestado
VARCHAR(20)
🗄️tipos_cuenta
5 cols
PK*id_tipo_cuenta
INT
onombre_tipo
VARCHAR(40)
odescripcion
TEXT
oactivo
BOOLEAN
oorden
INT
🗄️cuentas
7 cols
PK*id_cuenta
BIGINT
FKoid_cliente
BIGINT
FKoid_tipo_cuenta
INT
*numero_cuenta
VARCHAR(20)
*saldo
DECIMAL(14,2)
ofecha_apertura
TIMESTAMP
oestado
VARCHAR(20)
🗄️tarjetas
6 cols
PK*id_tarjeta
BIGINT
FKoid_cuenta
BIGINT
onumero_tarjeta_mask
VARCHAR(20)
otipo_tarjeta
VARCHAR(20)
ofecha_vencimiento
DATE
oestado
VARCHAR(20)
🗄️transacciones
6 cols
PK*id_transaccion
BIGINT
FKoid_cuenta
BIGINT
*tipo
VARCHAR(20)
omonto
DECIMAL(14,2)
ofecha_hora
TIMESTAMP
ocanal
VARCHAR(30)
🗄️transferencias_interbancarias
6 cols
PK*id_transferencia
BIGINT
FKoid_cuenta_origen
BIGINT
FKoid_cuenta_destino
BIGINT
*monto
DECIMAL(14,2)
ofecha
TIMESTAMP
oestado
VARCHAR(20)
🗄️creditos_prestamos
7 cols
PK*id_credito
BIGINT
FKoid_cliente
BIGINT
omonto_solicitado
DECIMAL(14,2)
*tasa_interes
DECIMAL(4,2)
*plazo_meses
INT
ofecha_solicitud
TIMESTAMP
oestado
VARCHAR(20)
🗄️cuotas_pago
6 cols
PK*id_cuota
BIGINT
FKoid_credito
BIGINT
onumero_cuota
INT
omonto_cuota
DECIMAL(14,2)
ofecha_vencimiento
DATE
opagada
BOOLEAN
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE sucursales (id_sucursal SERIAL PRIMARY KEY, nombre_sucursal VARCHAR(60) NOT NULL, ciudad VARCHAR(60), direccion VARCHAR(150), telefono VARCHAR(20), activo BOOLEAN DEFAULT TRUE);
2CREATE TABLE empleados (id_empleado SERIAL PRIMARY KEY, id_sucursal INT NOT NULL, nombre VARCHAR(80) NOT NULL, cargo VARCHAR(60), email VARCHAR(100), fecha_ingreso DATE, FOREIGN KEY (id_sucursal) REFERENCES sucursales(id_sucursal));
3CREATE TABLE clientes (id_cliente BIGSERIAL PRIMARY KEY, rut VARCHAR(12) UNIQUE NOT NULL, nombre VARCHAR(80) NOT NULL, email VARCHAR(100), telefono VARCHAR(20), fecha_nacimiento DATE, estado VARCHAR(20) DEFAULT 'ACTIVO');
4CREATE TABLE tipos_cuenta (id_tipo_cuenta SERIAL PRIMARY KEY, nombre_tipo VARCHAR(40) UNIQUE NOT NULL, descripcion TEXT, activo BOOLEAN DEFAULT TRUE, orden INT);
5CREATE TABLE cuentas (id_cuenta BIGSERIAL PRIMARY KEY, id_cliente BIGINT NOT NULL, id_tipo_cuenta INT NOT NULL, numero_cuenta VARCHAR(20) UNIQUE NOT NULL, saldo DECIMAL(14,2) DEFAULT 0.00 CHECK (saldo >= 0), fecha_apertura TIMESTAMP DEFAULT CURRENT_TIMESTAMP, estado VARCHAR(20) DEFAULT 'ACTIVA', FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente), FOREIGN KEY (id_tipo_cuenta) REFERENCES tipos_cuenta(id_tipo_cuenta));
6CREATE TABLE tarjetas (id_tarjeta BIGSERIAL PRIMARY KEY, id_cuenta BIGINT NOT NULL, numero_tarjeta_mask VARCHAR(20) NOT NULL, tipo_tarjeta VARCHAR(20) DEFAULT 'DEBITO', fecha_vencimiento DATE, estado VARCHAR(20) DEFAULT 'ACTIVA', FOREIGN KEY (id_cuenta) REFERENCES cuentas(id_cuenta));
7CREATE TABLE transacciones (id_transaccion BIGSERIAL PRIMARY KEY, id_cuenta BIGINT NOT NULL, tipo VARCHAR(20) NOT NULL, monto DECIMAL(14,2) NOT NULL, fecha_hora TIMESTAMP DEFAULT CURRENT_TIMESTAMP, canal VARCHAR(30) DEFAULT 'APP', FOREIGN KEY (id_cuenta) REFERENCES cuentas(id_cuenta));
8CREATE TABLE transferencias_interbancarias (id_transferencia BIGSERIAL PRIMARY KEY, id_cuenta_origen BIGINT NOT NULL, id_cuenta_destino BIGINT NOT NULL, monto DECIMAL(14,2) NOT NULL, fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP, estado VARCHAR(20) DEFAULT 'COMPLETADA', CHECK (id_cuenta_origen <> id_cuenta_destino), FOREIGN KEY (id_cuenta_origen) REFERENCES cuentas(id_cuenta), FOREIGN KEY (id_cuenta_destino) REFERENCES cuentas(id_cuenta));
9CREATE TABLE creditos_prestamos (id_credito BIGSERIAL PRIMARY KEY, id_cliente BIGINT NOT NULL, monto_solicitado DECIMAL(14,2) NOT NULL, tasa_interes DECIMAL(4,2) NOT NULL, plazo_meses INT NOT NULL, fecha_solicitud TIMESTAMP DEFAULT CURRENT_TIMESTAMP, estado VARCHAR(20) DEFAULT 'PENDIENTE', FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente));
10CREATE TABLE cuotas_pago (id_cuota BIGSERIAL PRIMARY KEY, id_credito BIGINT NOT NULL, numero_cuota INT NOT NULL, monto_cuota DECIMAL(14,2) NOT NULL, pagada BOOLEAN DEFAULT FALSE, fecha_vencimiento DATE, FOREIGN KEY (id_credito) REFERENCES creditos_prestamos(id_credito));

✅ Checklist de Dominio Técnico

35
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Cadena Hotelera Internacional y Reservas (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Una cadena hotelera gestiona sucursales en el mundo, tipos de habitación, inventario de cuartos, amenidades (WiFi, Jacuzzi, Vista al Mar), relación habitación-amenidad (N:M), huéspedes, reservas, desglose de noches, consumos adicionales y facturación al checkout.

🎯 Requerimiento Técnico

Crear el esquema de 10 tablas hoteleras y calcular la factura de liquidación final al momento del check-out.

⚡Cadena Hotelera Internacional y Reservas (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
N:M
N:M
1:N
1:N
1:N
1:N
1:1
🗄️hoteles
6 cols
PK*id_hotel
INT
onombre
VARCHAR(80)
ociudad
VARCHAR(60)
opais
VARCHAR(60)
odireccion
VARCHAR(150)
oestrellas
INT
🗄️tipos_habitacion
5 cols
PK*id_tipo
INT
onombre_tipo
VARCHAR(40)
odescripcion
TEXT
ocapacidad
INT
oactivo
BOOLEAN
🗄️habitaciones
7 cols
PK*id_habitacion
INT
FKoid_hotel
INT
FKoid_tipo
INT
*numero_cuarto
VARCHAR(10)
otarifa_base
DECIMAL(10,2)
opiso
INT
oestado
VARCHAR(20)
🗄️amenidades
5 cols
PK*id_amenidad
INT
onombre_amenidad
VARCHAR(50)
odescripcion
TEXT
ocategoria
VARCHAR(40)
oactivo
BOOLEAN
🗄️habitacion_amenidades
4 cols
PF*id_habitacion
INT
PF*id_amenidad
INT
ofecha_vinculo
TIMESTAMP
oactivo
BOOLEAN
🗄️huespedes
6 cols
PK*id_huesped
BIGINT
opasaporte
VARCHAR(20)
onombre
VARCHAR(80)
oemail
VARCHAR(100)
otelefono
VARCHAR(20)
opais
VARCHAR(60)
🗄️reservas
7 cols
PK*id_reserva
BIGINT
FKoid_huesped
BIGINT
FKoid_habitacion
INT
ofecha_checkin
DATE
ofecha_checkout
DATE
oestado
VARCHAR(20)
ofecha_reserva
TIMESTAMP
🗄️detalle_reserva_noches
6 cols
PK*id_noche
BIGINT
FKoid_reserva
BIGINT
ofecha
DATE
otarifa_noche
DECIMAL(10,2)
odescuento
DECIMAL(10,2)
oes_festivo
BOOLEAN
🗄️servicios_adicionales
6 cols
PK*id_servicio
BIGINT
FKoid_reserva
BIGINT
oconcepto
VARCHAR(80)
omonto
DECIMAL(10,2)
ofecha_consumo
TIMESTAMP
ocategoria
VARCHAR(40)
🗄️facturas_checkout
6 cols
PK*id_factura
BIGINT
FKoid_reserva
BIGINT
ototal_final
DECIMAL(12,2)
ofecha_emision
TIMESTAMP
oestado
VARCHAR(20)
ometodo_pago
VARCHAR(30)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE hoteles (id_hotel SERIAL PRIMARY KEY, nombre VARCHAR(80) NOT NULL, ciudad VARCHAR(60), pais VARCHAR(60), direccion VARCHAR(150), estrellas INT);
2CREATE TABLE tipos_habitacion (id_tipo SERIAL PRIMARY KEY, nombre_tipo VARCHAR(40) NOT NULL, descripcion TEXT, capacidad INT, activo BOOLEAN DEFAULT TRUE);
3CREATE TABLE habitaciones (id_habitacion SERIAL PRIMARY KEY, id_hotel INT NOT NULL, id_tipo INT NOT NULL, numero_cuarto VARCHAR(10) NOT NULL, tarifa_base DECIMAL(10,2) NOT NULL, piso INT, estado VARCHAR(20) DEFAULT 'DISPONIBLE', UNIQUE(id_hotel, numero_cuarto), FOREIGN KEY (id_hotel) REFERENCES hoteles(id_hotel), FOREIGN KEY (id_tipo) REFERENCES tipos_habitacion(id_tipo));
4CREATE TABLE amenidades (id_amenidad SERIAL PRIMARY KEY, nombre_amenidad VARCHAR(50) UNIQUE NOT NULL, descripcion TEXT, categoria VARCHAR(40), activo BOOLEAN DEFAULT TRUE);
5CREATE TABLE habitacion_amenidades (id_habitacion INT NOT NULL, id_amenidad INT NOT NULL, PRIMARY KEY (id_habitacion, id_amenidad), fecha_vinculo TIMESTAMP DEFAULT CURRENT_TIMESTAMP, activo BOOLEAN DEFAULT TRUE, FOREIGN KEY (id_habitacion) REFERENCES habitaciones(id_habitacion), FOREIGN KEY (id_amenidad) REFERENCES amenidades(id_amenidad));
6CREATE TABLE huespedes (id_huesped BIGSERIAL PRIMARY KEY, pasaporte VARCHAR(20) UNIQUE NOT NULL, nombre VARCHAR(80) NOT NULL, email VARCHAR(100), telefono VARCHAR(20), pais VARCHAR(60));
7CREATE TABLE reservas (id_reserva BIGSERIAL PRIMARY KEY, id_huesped BIGINT NOT NULL, id_habitacion INT NOT NULL, fecha_checkin DATE NOT NULL, fecha_checkout DATE NOT NULL, estado VARCHAR(20) DEFAULT 'CONFIRMADA', fecha_reserva TIMESTAMP DEFAULT CURRENT_TIMESTAMP, CHECK (fecha_checkout > fecha_checkin), FOREIGN KEY (id_huesped) REFERENCES huespedes(id_huesped), FOREIGN KEY (id_habitacion) REFERENCES habitaciones(id_habitacion));
8CREATE TABLE detalle_reserva_noches (id_noche BIGSERIAL PRIMARY KEY, id_reserva BIGINT NOT NULL, fecha DATE NOT NULL, tarifa_noche DECIMAL(10,2) NOT NULL, descuento DECIMAL(10,2) DEFAULT 0, es_festivo BOOLEAN DEFAULT FALSE, FOREIGN KEY (id_reserva) REFERENCES reservas(id_reserva));
9CREATE TABLE servicios_adicionales (id_servicio BIGSERIAL PRIMARY KEY, id_reserva BIGINT NOT NULL, concepto VARCHAR(80) NOT NULL, monto DECIMAL(10,2) NOT NULL, fecha_consumo TIMESTAMP DEFAULT CURRENT_TIMESTAMP, categoria VARCHAR(40) DEFAULT 'ROOM_SERVICE', FOREIGN KEY (id_reserva) REFERENCES reservas(id_reserva));
10CREATE TABLE facturas_checkout (id_factura BIGSERIAL PRIMARY KEY, id_reserva BIGINT UNIQUE NOT NULL, total_final DECIMAL(12,2) NOT NULL, fecha_emision TIMESTAMP DEFAULT CURRENT_TIMESTAMP, estado VARCHAR(20) DEFAULT 'EMITIDA', metodo_pago VARCHAR(30), FOREIGN KEY (id_reserva) REFERENCES reservas(id_reserva));

✅ Checklist de Dominio Técnico

36
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Aerolínea y Control de Vuelos Internacionales (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Una aerolínea internacional modela aeropuertos, rutas de vuelo, flota de aviones, asientos configurados, tripulación (pilotos, sobrecargos), vuelos programados, asignación de tripulantes a vuelos, pasajeros, reservas de vuelo y boletos con check-in emitidos.

🎯 Requerimiento Técnico

Crear el esquema aeronáutico de 10 tablas con validaciones IATA y cálculo de manifiesto de vuelo.

⚡Aerolínea y Control de Vuelos Internacionales (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
1:N
1:N
N:M
N:M
1:N
1:N
1:N
1:N
🗄️aeropuertos
5 cols
PK*codigo_iata
VARCHAR(3)
onombre_aeropuerto
VARCHAR(80)
ociudad
VARCHAR(50)
opais
VARCHAR(50)
ofuso_horario
VARCHAR(20)
🗄️rutas
5 cols
PK*id_ruta
INT
FKoorigen_iata
VARCHAR(3)
FKodestino_iata
VARCHAR(3)
odistancia_km
DECIMAL(8,2)
oduracion_minutos
INT
🗄️aviones
6 cols
PK*id_avion
INT
omatricula
VARCHAR(10)
omodelo
VARCHAR(40)
oanio_fabricacion
INT
ocapacidad_pasajeros
INT
oestado_avion
VARCHAR(20)
🗄️asientos
6 cols
PK*id_asiento
INT
FKoid_avion
INT
ocodigo_asiento
VARCHAR(5)
oclase
VARCHAR(20)
ofila
INT
oequipaje_cabina_kg
DECIMAL(5,2)
🗄️tripulacion
6 cols
PK*id_tripulante
INT
onombre
VARCHAR(80)
orol
VARCHAR(20)
onumero_licencia
VARCHAR(20)
ofecha_vencimiento_licencia
DATE
otelefono
VARCHAR(20)
🗄️vuelos
7 cols
PK*id_vuelo
BIGINT
onumero_vuelo
VARCHAR(10)
FKoid_ruta
INT
FKoid_avion
INT
*fecha_salida
TIMESTAMP
ofecha_llegada
TIMESTAMP
oestado_vuelo
VARCHAR(20)
🗄️asignacion_tripulacion
5 cols
PF*id_vuelo
BIGINT
PF*id_tripulante
INT
ofecha_asignacion
TIMESTAMP
orol_vuelo
VARCHAR(20)
oactivo
BOOLEAN
🗄️pasajeros
6 cols
PK*id_pasajero
BIGINT
opasaporte
VARCHAR(20)
onombre
VARCHAR(80)
oemail
VARCHAR(100)
ofecha_nacimiento
DATE
otelefono
VARCHAR(20)
🗄️reservas_vuelo
6 cols
PK*id_reserva
BIGINT
ocodigo_pnr
VARCHAR(6)
FKoid_pasajero
BIGINT
ofecha_reserva
TIMESTAMP
oestado_reserva
VARCHAR(20)
oprecio_base
DECIMAL(10,2)
🗄️boletos_checkin
6 cols
PK*id_boleto
BIGINT
FKoid_reserva
BIGINT
FKoid_vuelo
BIGINT
FKoid_asiento
INT
ofecha_checkin
TIMESTAMP
oequipaje_facturado_kg
DECIMAL(5,2)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE aeropuertos (codigo_iata VARCHAR(3) PRIMARY KEY, nombre_aeropuerto VARCHAR(80) NOT NULL, ciudad VARCHAR(50) NOT NULL, pais VARCHAR(50) DEFAULT 'Chile', fuso_horario VARCHAR(20));
2CREATE TABLE rutas (id_ruta SERIAL PRIMARY KEY, origen_iata VARCHAR(3) NOT NULL, destino_iata VARCHAR(3) NOT NULL, distancia_km DECIMAL(8,2), duracion_minutos INT, CHECK (origen_iata <> destino_iata), FOREIGN KEY (origen_iata) REFERENCES aeropuertos(codigo_iata), FOREIGN KEY (destino_iata) REFERENCES aeropuertos(codigo_iata));
3CREATE TABLE aviones (id_avion SERIAL PRIMARY KEY, matricula VARCHAR(10) UNIQUE NOT NULL, modelo VARCHAR(40) NOT NULL, anio_fabricacion INT, capacidad_pasajeros INT, estado_avion VARCHAR(20) DEFAULT 'OPERATIVO');
4CREATE TABLE asientos (id_asiento SERIAL PRIMARY KEY, id_avion INT NOT NULL, codigo_asiento VARCHAR(5) NOT NULL, clase VARCHAR(20) DEFAULT 'ECONOMY', fila INT, equipaje_cabina_kg DECIMAL(5,2) DEFAULT 10, UNIQUE (id_avion, codigo_asiento), FOREIGN KEY (id_avion) REFERENCES aviones(id_avion));
5CREATE TABLE tripulacion (id_tripulante SERIAL PRIMARY KEY, nombre VARCHAR(80) NOT NULL, rol VARCHAR(20) NOT NULL, numero_licencia VARCHAR(20), fecha_vencimiento_licencia DATE, telefono VARCHAR(20));
6CREATE TABLE vuelos (id_vuelo BIGSERIAL PRIMARY KEY, numero_vuelo VARCHAR(10) NOT NULL, id_ruta INT NOT NULL, id_avion INT NOT NULL, fecha_salida TIMESTAMP NOT NULL, fecha_llegada TIMESTAMP, estado_vuelo VARCHAR(20) DEFAULT 'PROGRAMADO', FOREIGN KEY (id_ruta) REFERENCES rutas(id_ruta), FOREIGN KEY (id_avion) REFERENCES aviones(id_avion));
7CREATE TABLE asignacion_tripulacion (id_vuelo BIGINT NOT NULL, id_tripulante INT NOT NULL, fecha_asignacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP, rol_vuelo VARCHAR(20), activo BOOLEAN DEFAULT TRUE, PRIMARY KEY (id_vuelo, id_tripulante), FOREIGN KEY (id_vuelo) REFERENCES vuelos(id_vuelo), FOREIGN KEY (id_tripulante) REFERENCES tripulacion(id_tripulante));
8CREATE TABLE pasajeros (id_pasajero BIGSERIAL PRIMARY KEY, pasaporte VARCHAR(20) UNIQUE NOT NULL, nombre VARCHAR(80) NOT NULL, email VARCHAR(100), fecha_nacimiento DATE, telefono VARCHAR(20));
9CREATE TABLE reservas_vuelo (id_reserva BIGSERIAL PRIMARY KEY, codigo_pnr VARCHAR(6) UNIQUE NOT NULL, id_pasajero BIGINT NOT NULL, fecha_reserva TIMESTAMP DEFAULT CURRENT_TIMESTAMP, estado_reserva VARCHAR(20) DEFAULT 'CONFIRMADA', precio_base DECIMAL(10,2), FOREIGN KEY (id_pasajero) REFERENCES pasajeros(id_pasajero));
10CREATE TABLE boletos_checkin (id_boleto BIGSERIAL PRIMARY KEY, id_reserva BIGINT NOT NULL, id_vuelo BIGINT NOT NULL, id_asiento INT NOT NULL, fecha_checkin TIMESTAMP DEFAULT CURRENT_TIMESTAMP, equipaje_facturado_kg DECIMAL(5,2), UNIQUE (id_vuelo, id_asiento), FOREIGN KEY (id_reserva) REFERENCES reservas_vuelo(id_reserva), FOREIGN KEY (id_vuelo) REFERENCES vuelos(id_vuelo), FOREIGN KEY (id_asiento) REFERENCES asientos(id_asiento));

✅ Checklist de Dominio Técnico

37
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Red Social y Contenidos Multimedia (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Una red social tipo Instagram/Twitter estructura usuarios, perfiles 1:1, seguidores (seguidor/seguido), publicaciones, etiquetas/hashtags, post_etiquetas (N:M), comentarios, reacciones con emoji, mensajes directos de chat y notificaciones.

🎯 Requerimiento Técnico

Diseñar las 10 tablas de la red social y calcular el engagement total (reacciones + comentarios) de cada post.

⚡Red Social y Contenidos Multimedia (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:1
N:M
N:M
1:N
N:M
N:M
1:N
1:N
N:M
N:M
1:N
1:N
1:N
🗄️usuarios
5 cols
PK*id_usuario
BIGINT
ohandle
VARCHAR(30)
*email
VARCHAR(100)
ofecha_registro
TIMESTAMP
oes_verificado
BOOLEAN
🗄️perfiles
6 cols
PK*id_perfil
BIGINT
FKoid_usuario
BIGINT
obio
TEXT
ofoto_url
VARCHAR(255)
ofecha_nacimiento
DATE
ovisibilidad
VARCHAR(20)
🗄️seguidores
4 cols
PF*id_seguidor
BIGINT
PF*id_seguido
BIGINT
ofecha_vinculo
TIMESTAMP
oactivo
BOOLEAN
🗄️publicaciones
6 cols
PK*id_post
BIGINT
FKoid_usuario
BIGINT
*contenido
TEXT
ofecha_publicacion
TIMESTAMP
otipo_contenido
VARCHAR(20)
oestado_post
VARCHAR(20)
🗄️etiquetas
5 cols
PK*id_tag
INT
ohashtag
VARCHAR(50)
ofecha_creacion
TIMESTAMP
odescripcion
VARCHAR(150)
oes_trending
BOOLEAN
🗄️publicacion_etiquetas
4 cols
PF*id_post
BIGINT
PF*id_tag
INT
ofecha_vinculo
TIMESTAMP
oorden
INT
🗄️comentarios
6 cols
PK*id_comentario
BIGINT
FKoid_post
BIGINT
FKoid_usuario
BIGINT
*texto
VARCHAR(500)
ofecha_comentario
TIMESTAMP
oes_editado
BOOLEAN
🗄️reacciones
5 cols
PF*id_post
BIGINT
PF*id_usuario
BIGINT
otipo_reaccion
VARCHAR(20)
ofecha_reaccion
TIMESTAMP
oactivo
BOOLEAN
🗄️mensajes_chat
6 cols
PK*id_mensaje
BIGINT
FKoid_emisor
BIGINT
FKoid_receptor
BIGINT
*mensaje
TEXT
ofecha_envio
TIMESTAMP
oleido
BOOLEAN
🗄️notificaciones
6 cols
PK*id_notificacion
BIGINT
FKoid_usuario
BIGINT
omensaje
VARCHAR(255)
oleida
BOOLEAN
otipo_notificacion
VARCHAR(30)
ofecha_notificacion
TIMESTAMP
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE usuarios (id_usuario BIGSERIAL PRIMARY KEY, handle VARCHAR(30) UNIQUE NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP, es_verificado BOOLEAN DEFAULT FALSE);
2CREATE TABLE perfiles (id_perfil BIGSERIAL PRIMARY KEY, id_usuario BIGINT UNIQUE NOT NULL, bio TEXT, foto_url VARCHAR(255), fecha_nacimiento DATE, visibilidad VARCHAR(20) DEFAULT 'PUBLICO', FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE);
3CREATE TABLE seguidores (id_seguidor BIGINT NOT NULL, id_seguido BIGINT NOT NULL, fecha_vinculo TIMESTAMP DEFAULT CURRENT_TIMESTAMP, activo BOOLEAN DEFAULT TRUE, PRIMARY KEY (id_seguidor, id_seguido), CHECK (id_seguidor <> id_seguido), FOREIGN KEY (id_seguidor) REFERENCES usuarios(id_usuario), FOREIGN KEY (id_seguido) REFERENCES usuarios(id_usuario));
4CREATE TABLE publicaciones (id_post BIGSERIAL PRIMARY KEY, id_usuario BIGINT NOT NULL, contenido TEXT NOT NULL, fecha_publicacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP, tipo_contenido VARCHAR(20) DEFAULT 'TEXTO', estado_post VARCHAR(20) DEFAULT 'PUBLICADO', FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario));
5CREATE TABLE etiquetas (id_tag SERIAL PRIMARY KEY, hashtag VARCHAR(50) UNIQUE NOT NULL, fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP, descripcion VARCHAR(150), es_trending BOOLEAN DEFAULT FALSE);
6CREATE TABLE publicacion_etiquetas (id_post BIGINT NOT NULL, id_tag INT NOT NULL, fecha_vinculo TIMESTAMP DEFAULT CURRENT_TIMESTAMP, orden INT, PRIMARY KEY (id_post, id_tag), FOREIGN KEY (id_post) REFERENCES publicaciones(id_post) ON DELETE CASCADE, FOREIGN KEY (id_tag) REFERENCES etiquetas(id_tag));
7CREATE TABLE comentarios (id_comentario BIGSERIAL PRIMARY KEY, id_post BIGINT NOT NULL, id_usuario BIGINT NOT NULL, texto VARCHAR(500) NOT NULL, fecha_comentario TIMESTAMP DEFAULT CURRENT_TIMESTAMP, es_editado BOOLEAN DEFAULT FALSE, FOREIGN KEY (id_post) REFERENCES publicaciones(id_post) ON DELETE CASCADE, FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario));
8CREATE TABLE reacciones (id_post BIGINT NOT NULL, id_usuario BIGINT NOT NULL, tipo_reaccion VARCHAR(20) NOT NULL, fecha_reaccion TIMESTAMP DEFAULT CURRENT_TIMESTAMP, activo BOOLEAN DEFAULT TRUE, PRIMARY KEY (id_post, id_usuario), FOREIGN KEY (id_post) REFERENCES publicaciones(id_post) ON DELETE CASCADE, FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario));
9CREATE TABLE mensajes_chat (id_mensaje BIGSERIAL PRIMARY KEY, id_emisor BIGINT NOT NULL, id_receptor BIGINT NOT NULL, mensaje TEXT NOT NULL, fecha_envio TIMESTAMP DEFAULT CURRENT_TIMESTAMP, leido BOOLEAN DEFAULT FALSE, CHECK (id_emisor <> id_receptor), FOREIGN KEY (id_emisor) REFERENCES usuarios(id_usuario), FOREIGN KEY (id_receptor) REFERENCES usuarios(id_usuario));
10CREATE TABLE notificaciones (id_notificacion BIGSERIAL PRIMARY KEY, id_usuario BIGINT NOT NULL, mensaje VARCHAR(255) NOT NULL, leida BOOLEAN DEFAULT FALSE, tipo_notificacion VARCHAR(30) DEFAULT 'SISTEMA', fecha_notificacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE);

✅ Checklist de Dominio Técnico

38
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Logística Global, Puertos y Cadena de Suministro (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Una multinacional naviera y de supply chain opera proveedores de carga, puertos/aduanas marítimas, buques portacontenedores, contenedores ISO, almacenes de depósito fiscal, órdenes de importación, ítems de carga, guías de despacho, rutas marítimas y eventos de tracking satelital.

🎯 Requerimiento Técnico

Crear el esquema de 10 tablas marítimas y reportar el estado de contenedores en altamar.

⚡Logística Global, Puertos y Cadena de Suministro (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
🗄️proveedores
5 cols
PK*id_proveedor
BIGINT
orazon_social
VARCHAR(100)
opais
VARCHAR(50)
ocontacto_email
VARCHAR(100)
oestado_proveedor
VARCHAR(20)
🗄️puertos_aduanas
5 cols
PK*codigo_puerto
VARCHAR(5)
onombre_puerto
VARCHAR(80)
*pais
VARCHAR(50)
ociudad
VARCHAR(60)
oes_aduana
BOOLEAN
🗄️buques_transporte
6 cols
PK*id_buque
INT
onombre_buque
VARCHAR(80)
oimo_number
VARCHAR(10)
ocapacidad_teu
INT
obandera
VARCHAR(50)
oestado_buque
VARCHAR(20)
🗄️contenedores
5 cols
PK*codigo_contenedor
VARCHAR(11)
otipo
VARCHAR(20)
*capacidad_toneladas
DECIMAL(6,2)
oestado_contenedor
VARCHAR(20)
ofecha_ultima_inspeccion
DATE
🗄️almacenes
5 cols
PK*id_almacen
INT
FKocodigo_puerto
VARCHAR(5)
*nombre_almacen
VARCHAR(80)
ocapacidad_m2
DECIMAL(10,2)
oes_fiscal
BOOLEAN
🗄️ordenes_compra
5 cols
PK*id_orden
BIGINT
FKoid_proveedor
BIGINT
*fecha_orden
DATE
oestado_orden
VARCHAR(20)
omonto_total
DECIMAL(12,2)
🗄️items_compra
6 cols
PK*id_item
BIGINT
FKoid_orden
BIGINT
FKocodigo_contenedor
VARCHAR(11)
*descripcion_mercancia
TEXT
opeso_toneladas
DECIMAL(8,3)
ocantidad
INT
🗄️rutas_envio
5 cols
PK*id_ruta
INT
FKopuerto_origen
VARCHAR(5)
FKopuerto_destino
VARCHAR(5)
oduracion_dias
INT
oestado_ruta
VARCHAR(20)
🗄️guias_despacho
7 cols
PK*id_guia
BIGINT
obl_number
VARCHAR(30)
FKoid_buque
INT
FK*id_ruta
INT
ofecha_emision
DATE
ofecha_estimada_llegada
DATE
oestado_despacho
VARCHAR(30)
🗄️tracking_eventos
7 cols
PK*id_evento
BIGINT
FKoid_guia
BIGINT
olatitud
DECIMAL(9,6)
olongitud
DECIMAL(9,6)
*estado
VARCHAR(30)
ofecha_hora
TIMESTAMP
ovelocidad_nudos
DECIMAL(5,1)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE proveedores (id_proveedor BIGSERIAL PRIMARY KEY, razon_social VARCHAR(100) NOT NULL, pais VARCHAR(50), contacto_email VARCHAR(100), estado_proveedor VARCHAR(20) DEFAULT 'ACTIVO');
2CREATE TABLE puertos_aduanas (codigo_puerto VARCHAR(5) PRIMARY KEY, nombre_puerto VARCHAR(80) NOT NULL, pais VARCHAR(50) NOT NULL, ciudad VARCHAR(60), es_aduana BOOLEAN DEFAULT TRUE);
3CREATE TABLE buques_transporte (id_buque SERIAL PRIMARY KEY, nombre_buque VARCHAR(80) NOT NULL, imo_number VARCHAR(10) UNIQUE NOT NULL, capacidad_teu INT, bandera VARCHAR(50), estado_buque VARCHAR(20) DEFAULT 'EN_OPERACION');
4CREATE TABLE contenedores (codigo_contenedor VARCHAR(11) PRIMARY KEY, tipo VARCHAR(20) NOT NULL, capacidad_toneladas DECIMAL(6,2) NOT NULL, estado_contenedor VARCHAR(20) DEFAULT 'VACIO', fecha_ultima_inspeccion DATE);
5CREATE TABLE almacenes (id_almacen SERIAL PRIMARY KEY, codigo_puerto VARCHAR(5) NOT NULL, nombre_almacen VARCHAR(80) NOT NULL, capacidad_m2 DECIMAL(10,2), es_fiscal BOOLEAN DEFAULT TRUE, FOREIGN KEY (codigo_puerto) REFERENCES puertos_aduanas(codigo_puerto));
6CREATE TABLE ordenes_compra (id_orden BIGSERIAL PRIMARY KEY, id_proveedor BIGINT NOT NULL, fecha_orden DATE NOT NULL, estado_orden VARCHAR(20) DEFAULT 'EMITIDA', monto_total DECIMAL(12,2), FOREIGN KEY (id_proveedor) REFERENCES proveedores(id_proveedor));
7CREATE TABLE items_compra (id_item BIGSERIAL PRIMARY KEY, id_orden BIGINT NOT NULL, codigo_contenedor VARCHAR(11) NOT NULL, descripcion_mercancia TEXT NOT NULL, peso_toneladas DECIMAL(8,3), cantidad INT DEFAULT 1, FOREIGN KEY (id_orden) REFERENCES ordenes_compra(id_orden), FOREIGN KEY (codigo_contenedor) REFERENCES contenedores(codigo_contenedor));
8CREATE TABLE rutas_envio (id_ruta SERIAL PRIMARY KEY, puerto_origen VARCHAR(5) NOT NULL, puerto_destino VARCHAR(5) NOT NULL, duracion_dias INT, estado_ruta VARCHAR(20) DEFAULT 'ACTIVA', FOREIGN KEY (puerto_origen) REFERENCES puertos_aduanas(codigo_puerto), FOREIGN KEY (puerto_destino) REFERENCES puertos_aduanas(codigo_puerto));
9CREATE TABLE guias_despacho (id_guia BIGSERIAL PRIMARY KEY, bl_number VARCHAR(30) UNIQUE NOT NULL, id_buque INT NOT NULL, id_ruta INT NOT NULL, fecha_emision DATE DEFAULT CURRENT_DATE, fecha_estimada_llegada DATE, estado_despacho VARCHAR(30) DEFAULT 'EN_TRANSITO', FOREIGN KEY (id_buque) REFERENCES buques_transporte(id_buque), FOREIGN KEY (id_ruta) REFERENCES rutas_envio(id_ruta));
10CREATE TABLE tracking_eventos (id_evento BIGSERIAL PRIMARY KEY, id_guia BIGINT NOT NULL, estado VARCHAR(30) NOT NULL, latitud DECIMAL(9,6), longitud DECIMAL(9,6), fecha_hora TIMESTAMP DEFAULT CURRENT_TIMESTAMP, velocidad_nudos DECIMAL(5,1), FOREIGN KEY (id_guia) REFERENCES guias_despacho(id_guia));

✅ Checklist de Dominio Técnico

39
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

SaaS de Gestión Ágil de Proyectos (Jira / Asana Clone) (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Un software SaaS B2B de gestión de ingeniería administra organizaciones cliente, planes de suscripción, facturación recurrente, usuarios, equipos de trabajo, miembros de equipo, proyectos ágiles, sprints de desarrollo, tareas/issues y bitácora de auditoría de cambios.

🎯 Requerimiento Técnico

Crear el esquema de 10 tablas para la plataforma SaaS y formular la consulta del burndown de tareas por sprint.

⚡SaaS de Gestión Ágil de Proyectos (Jira / Asana Clone) (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
1:N
N:M
N:M
1:N
1:N
1:N
1:N
1:N
🗄️planes_suscripcion
5 cols
PK*id_plan
INT
onombre_plan
VARCHAR(40)
*precio_mensual
DECIMAL(10,2)
olimite_usuarios
INT
odias_trial
INT
🗄️organizaciones
6 cols
PK*id_organizacion
BIGINT
FKoid_plan
INT
onombre_empresa
VARCHAR(100)
oestado_suscripcion
VARCHAR(20)
ofecha_trial_termino
DATE
ofecha_registro
TIMESTAMP
🗄️facturacion_saas
6 cols
PK*id_factura
BIGINT
FKoid_organizacion
BIGINT
omonto_mensual
DECIMAL(10,2)
opagada
BOOLEAN
ofecha_emision
DATE
ofecha_vencimiento
DATE
🗄️usuarios
6 cols
PK*id_usuario
BIGINT
FKoid_organizacion
BIGINT
oemail
VARCHAR(100)
*nombre
VARCHAR(80)
ocargo
VARCHAR(60)
ofecha_registro
TIMESTAMP
🗄️equipos
5 cols
PK*id_equipo
INT
FKoid_organizacion
BIGINT
onombre_squad
VARCHAR(50)
ofecha_creacion
TIMESTAMP
oactivo
BOOLEAN
🗄️miembros_equipo
5 cols
PF*id_equipo
INT
PF*id_usuario
BIGINT
ofecha_vinculo
TIMESTAMP
orol_equipo
VARCHAR(20)
oactivo
BOOLEAN
🗄️proyectos
6 cols
PK*id_proyecto
BIGINT
FKoid_equipo
INT
oclave_proyecto
VARCHAR(10)
*nombre
VARCHAR(80)
oestado_proyecto
VARCHAR(20)
ofecha_creacion
DATE
🗄️sprints
6 cols
PK*id_sprint
BIGINT
FKoid_proyecto
BIGINT
onombre_sprint
VARCHAR(50)
*fecha_inicio
DATE
*fecha_fin
DATE
oobjetivo
TEXT
🗄️tareas_issues
7 cols
PK*id_issue
BIGINT
FKoid_sprint
BIGINT
FKoid_asignado
BIGINT
ostory_points
INT
oestado
VARCHAR(20)
*titulo
VARCHAR(120)
oprioridad
VARCHAR(10)
🗄️historial_cambios
6 cols
PK*id_log
BIGINT
FKoid_issue
BIGINT
ocambio
TEXT
ofecha_cambio
TIMESTAMP
ocampo
VARCHAR(50)
ovalor_anterior
TEXT
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE planes_suscripcion (id_plan SERIAL PRIMARY KEY, nombre_plan VARCHAR(40) UNIQUE NOT NULL, precio_mensual DECIMAL(10,2) NOT NULL, limite_usuarios INT, dias_trial INT DEFAULT 14);
2CREATE TABLE organizaciones (id_organizacion BIGSERIAL PRIMARY KEY, id_plan INT NOT NULL, nombre_empresa VARCHAR(100) NOT NULL, estado_suscripcion VARCHAR(20) DEFAULT 'TRIAL', fecha_trial_termino DATE, fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_plan) REFERENCES planes_suscripcion(id_plan));
3CREATE TABLE facturacion_saas (id_factura BIGSERIAL PRIMARY KEY, id_organizacion BIGINT NOT NULL, monto_mensual DECIMAL(10,2) NOT NULL, pagada BOOLEAN DEFAULT TRUE, fecha_emision DATE DEFAULT CURRENT_DATE, fecha_vencimiento DATE, FOREIGN KEY (id_organizacion) REFERENCES organizaciones(id_organizacion));
4CREATE TABLE usuarios (id_usuario BIGSERIAL PRIMARY KEY, id_organizacion BIGINT NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, nombre VARCHAR(80) NOT NULL, cargo VARCHAR(60), fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_organizacion) REFERENCES organizaciones(id_organizacion) ON DELETE CASCADE);
5CREATE TABLE equipos (id_equipo SERIAL PRIMARY KEY, id_organizacion BIGINT NOT NULL, nombre_squad VARCHAR(50) NOT NULL, fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP, activo BOOLEAN DEFAULT TRUE, FOREIGN KEY (id_organizacion) REFERENCES organizaciones(id_organizacion));
6CREATE TABLE miembros_equipo (id_equipo INT NOT NULL, id_usuario BIGINT NOT NULL, fecha_vinculo TIMESTAMP DEFAULT CURRENT_TIMESTAMP, rol_equipo VARCHAR(20) DEFAULT 'MIEMBRO', activo BOOLEAN DEFAULT TRUE, PRIMARY KEY (id_equipo, id_usuario), FOREIGN KEY (id_equipo) REFERENCES equipos(id_equipo) ON DELETE CASCADE, FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE);
7CREATE TABLE proyectos (id_proyecto BIGSERIAL PRIMARY KEY, id_equipo INT NOT NULL, clave_proyecto VARCHAR(10) UNIQUE NOT NULL, nombre VARCHAR(80) NOT NULL, estado_proyecto VARCHAR(20) DEFAULT 'ACTIVO', fecha_creacion DATE DEFAULT CURRENT_DATE, FOREIGN KEY (id_equipo) REFERENCES equipos(id_equipo));
8CREATE TABLE sprints (id_sprint BIGSERIAL PRIMARY KEY, id_proyecto BIGINT NOT NULL, nombre_sprint VARCHAR(50) NOT NULL, fecha_inicio DATE NOT NULL, fecha_fin DATE NOT NULL, objetivo TEXT, FOREIGN KEY (id_proyecto) REFERENCES proyectos(id_proyecto));
9CREATE TABLE tareas_issues (id_issue BIGSERIAL PRIMARY KEY, id_sprint BIGINT NOT NULL, id_asignado BIGINT, titulo VARCHAR(120) NOT NULL, story_points INT DEFAULT 1 CHECK (story_points >= 0), estado VARCHAR(20) DEFAULT 'TODO' CHECK (estado IN ('TODO', 'IN_PROGRESS', 'REVIEW', 'DONE')), prioridad VARCHAR(10) DEFAULT 'MEDIA', FOREIGN KEY (id_sprint) REFERENCES sprints(id_sprint), FOREIGN KEY (id_asignado) REFERENCES usuarios(id_usuario));
10CREATE TABLE historial_cambios (id_log BIGSERIAL PRIMARY KEY, id_issue BIGINT NOT NULL, cambio TEXT NOT NULL, fecha_cambio TIMESTAMP DEFAULT CURRENT_TIMESTAMP, campo VARCHAR(50), valor_anterior TEXT, FOREIGN KEY (id_issue) REFERENCES tareas_issues(id_issue) ON DELETE CASCADE);

✅ Checklist de Dominio Técnico

40
Macro-Casos Empresariales (10 Tablas Completas)10 Tablas

Cadena de Concesionarios y Taller Mecánico Especializado (10 Tablas)

0 / 3▼

🏢 Contexto Real de Negocio

Una red automotriz de concesionarios y servicios técnicos gestiona sucursales de venta, clientes, marcas, catálogo maestro de autos, inventario físico de vehículos, ventas de autos nuevos/usados, mecánicos de taller, órdenes de reparación/mantención, catálogo de servicios de taller y detalle de repuestos utilizados con descuento de bodega.

🎯 Requerimiento Técnico

Crear el esquema de 10 tablas automotrices y formular el cálculo de la liquidación de una orden de taller (Mano de obra + Repuestos).

⚡Cadena de Concesionarios y Taller Mecánico Especializado (10 Tablas) · Esquema Relacional● Interactivo (Arrastra las tablas)
100%
1:N
1:N
1:N
1:1
1:N
1:N
1:N
1:N
1:N
🗄️concesionarios
5 cols
PK*id_concesionario
INT
onombre_sucursal
VARCHAR(80)
ociudad
VARCHAR(50)
odireccion
VARCHAR(120)
oes_taller
BOOLEAN
🗄️clientes
6 cols
PK*id_cliente
BIGINT
orut
VARCHAR(12)
onombre
VARCHAR(80)
oemail
VARCHAR(100)
otelefono
VARCHAR(20)
ofecha_registro
TIMESTAMP
🗄️marcas
5 cols
PK*id_marca
INT
onombre_marca
VARCHAR(40)
opais_origen
VARCHAR(50)
ositio_web
VARCHAR(100)
oactiva
BOOLEAN
🗄️inventario_vehiculos
7 cols
PK*id_vehiculo
BIGINT
FKoid_concesionario
INT
ovin_chasis
VARCHAR(17)
FK*id_modelo
INT
*precio_lista
DECIMAL(12,2)
ovendido
BOOLEAN
oestado_vehiculo
VARCHAR(20)
🗄️ventas_autos
6 cols
PK*id_venta
BIGINT
FKoid_vehiculo
BIGINT
FKoid_cliente
BIGINT
omonto_venta
DECIMAL(12,2)
ofecha_venta
DATE
oforma_pago
VARCHAR(30)
🗄️mecanicos
5 cols
PK*id_mecanico
INT
onombre
VARCHAR(80)
otarifa_hora
DECIMAL(8,2)
oespecialidad
VARCHAR(50)
otelefono
VARCHAR(20)
🗄️ordenes_taller
7 cols
PK*id_orden
BIGINT
FKoid_cliente
BIGINT
FKoid_mecanico
INT
opatente_auto
VARCHAR(8)
FK*id_servicio
INT
ofecha_ingreso
TIMESTAMP
oestado_orden
VARCHAR(20)
🗄️detalle_repuestos_utilizados
6 cols
PK*id_detalle
BIGINT
FKoid_orden
BIGINT
onombre_repuesto
VARCHAR(80)
oprecio_repuesto
DECIMAL(10,2)
*cantidad
INT
odescuento_bodega_pct
DECIMAL(5,2)
PK: Primary Key FK: Foreign Key* NOT NULLTipo: Verde DataModeler
💡 Puedes arrastrar las tablas libremente o hacer zoom en el canvas.
1CREATE TABLE concesionarios (id_concesionario SERIAL PRIMARY KEY, nombre_sucursal VARCHAR(80) NOT NULL, ciudad VARCHAR(50), direccion VARCHAR(120), es_taller BOOLEAN DEFAULT TRUE);
2CREATE TABLE clientes (id_cliente BIGSERIAL PRIMARY KEY, rut VARCHAR(12) UNIQUE NOT NULL, nombre VARCHAR(80) NOT NULL, email VARCHAR(100), telefono VARCHAR(20), fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
3CREATE TABLE marcas (id_marca SERIAL PRIMARY KEY, nombre_marca VARCHAR(40) UNIQUE NOT NULL, pais_origen VARCHAR(50), sitio_web VARCHAR(100), activa BOOLEAN DEFAULT TRUE);
4CREATE TABLE vehiculos_catalogo (id_modelo SERIAL PRIMARY KEY, id_marca INT NOT NULL, modelo VARCHAR(50) NOT NULL, anio_modelo INT, tipo_combustible VARCHAR(20), FOREIGN KEY (id_marca) REFERENCES marcas(id_marca));
5CREATE TABLE inventario_vehiculos (id_vehiculo BIGSERIAL PRIMARY KEY, id_concesionario INT NOT NULL, id_modelo INT NOT NULL, vin_chasis VARCHAR(17) UNIQUE NOT NULL, precio_lista DECIMAL(12,2) NOT NULL, vendido BOOLEAN DEFAULT FALSE, estado_vehiculo VARCHAR(20) DEFAULT 'DISPONIBLE', FOREIGN KEY (id_concesionario) REFERENCES concesionarios(id_concesionario), FOREIGN KEY (id_modelo) REFERENCES vehiculos_catalogo(id_modelo));
6CREATE TABLE ventas_autos (id_venta BIGSERIAL PRIMARY KEY, id_vehiculo BIGINT UNIQUE NOT NULL, id_cliente BIGINT NOT NULL, monto_venta DECIMAL(12,2) NOT NULL, fecha_venta DATE DEFAULT CURRENT_DATE, forma_pago VARCHAR(30) DEFAULT 'CONTADO', FOREIGN KEY (id_vehiculo) REFERENCES inventario_vehiculos(id_vehiculo), FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente));
7CREATE TABLE mecanicos (id_mecanico SERIAL PRIMARY KEY, nombre VARCHAR(80) NOT NULL, tarifa_hora DECIMAL(8,2) NOT NULL, especialidad VARCHAR(50), telefono VARCHAR(20));
8CREATE TABLE servicios_catalogo (id_servicio SERIAL PRIMARY KEY, nombre_servicio VARCHAR(80) NOT NULL, precio_mano_obra DECIMAL(10,2) NOT NULL, categoria VARCHAR(40), duracion_minutos INT);
9CREATE TABLE ordenes_taller (id_orden BIGSERIAL PRIMARY KEY, id_cliente BIGINT NOT NULL, id_mecanico INT NOT NULL, id_servicio INT NOT NULL, patente_auto VARCHAR(8) NOT NULL, fecha_ingreso TIMESTAMP DEFAULT CURRENT_TIMESTAMP, estado_orden VARCHAR(20) DEFAULT 'EN_PROCESO', FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente), FOREIGN KEY (id_mecanico) REFERENCES mecanicos(id_mecanico), FOREIGN KEY (id_servicio) REFERENCES servicios_catalogo(id_servicio));
10CREATE TABLE detalle_repuestos_utilizados (id_detalle BIGSERIAL PRIMARY KEY, id_orden BIGINT NOT NULL, nombre_repuesto VARCHAR(80) NOT NULL, cantidad INT NOT NULL CHECK (cantidad > 0), precio_repuesto DECIMAL(10,2) NOT NULL, descuento_bodega_pct DECIMAL(5,2) DEFAULT 0, FOREIGN KEY (id_orden) REFERENCES ordenes_taller(id_orden) ON DELETE CASCADE);

✅ Checklist de Dominio Técnico

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.