Crear tablas con relaciones lógicas en MySQL
Clase 9 de 24 • Curso de SQL y MySQL 2018
Contenido del curso
CREATE
INSERT
Bash y archivos SQL
SELECT
Consultas en MySQL
Contenido Bonus
Construir bases de datos confiables empieza por definir relaciones lógicas claras y aplicar buenas prácticas al crear tablas. Aquí verás cómo vincular columnas por ID, leer errores y warnings útiles de MySQL, inspeccionar estructuras con comandos esenciales y evitar pérdidas irreversibles con DROP, todo con un enfoque práctico y directo.
¿Cómo se relacionan lógicamente las tablas sin claves foráneas?
En este enfoque, la relación entre tablas es lógica, no dura: no hay restricción activa y puede existir un libro sin autor. La vinculación se hace por ID coincidentes y tipos de datos iguales en ambas tablas.
- Usa el mismo tipo y atributos en las columnas relacionadas: por ejemplo, INT UNSIGNED en ambas tablas.
- Define la llave primaria solo en la tabla dueña del dato (authors), y como entero simple en la referenciada (books).
- Aclara criterios de nulabilidad: por ejemplo, nombre NOT NULL y país opcional.
- Adopta una convención de estilo: palabras reservadas en mayúsculas y nombres de tablas/columnas en minúsculas para mejorar lectura.
Ejemplo de tabla de autores y referencia lógica en books:
CREATE TABLE IF NOT EXISTS authors (
author_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
country_code VARCHAR(3) NULL
);
-- En books, author_id es solo referencia lógica (no PRIMARY KEY)
-- Debe coincidir el tipo: INT UNSIGNED.
ALTER TABLE books
ADD COLUMN author_id INT UNSIGNED;
Claves prácticas: - PRIMARY KEY y AUTO_INCREMENT donde nace el dato (authors). - En la otra tabla, la columna es solo referencia y no controla la operación de esa tabla. - Mantén coherencia de tipos siempre que una columna relacione dos o más tablas.
¿Qué buenas prácticas y comandos evitan errores al crear tablas?
MySQL ofrece mensajes de error y warnings muy descriptivos. Úsalos a tu favor y protege tus workflows.
- Crea tablas de forma idempotente con IF NOT EXISTS.
- Verifica si ya existen tablas con SHOW TABLES.
- Lee advertencias con SHOW WARNINGS si ves “One warning”.
- Comprueba contenido inicial con SELECT.
Fragmentos útiles:
-- Crear sin romper el flujo si la tabla ya existe
CREATE TABLE IF NOT EXISTS authors (...);
-- Ver tablas disponibles
SHOW TABLES;
-- Consultar advertencias tras un “Query OK, 1 warning”
SHOW WARNINGS;
-- Verificar que está vacía
SELECT * FROM authors;
Cuidado extremo con DROP: es un “delete sin papelera”. Borra estructura y datos.
-- Confirmar dos veces antes de ejecutar
DROP TABLE authors; -- irreversible sin respaldo
Notas clave: - IF NOT EXISTS evita errores que pueden romper un workflow automatizado. - Un warning no rompe la ejecución, pero debe revisarse. - DROP elimina todo; más adelante se puede usar TRUNCATE cuando solo se requiere vaciar, no borrar estructura.
¿Cómo inspeccionar estructura, comentarios y palabras reservadas?
Antes de modificar o consultar, entiende la estructura con comandos de inspección. Además, evita choques con palabras reservadas usando comillas invertidas.
- Usa DESCRIBE o su acrónimo DESC para ver columnas y tipos.
- Emplea SHOW FULL COLUMNS FROM para ver comentarios, collation y privilegios.
- Si una columna necesita un nombre reservado (p. ej., YEAR), encierra el identificador con
backticks.
Comandos clave:
-- Estructura de una tabla
DESCRIBE authors;
DESC books;
-- Estructura ampliada: comentarios y más metadatos
SHOW FULL COLUMNS FROM books;
-- Evitar ambigüedades con palabras reservadas
CREATE TABLE ejemplo (
`year` INT, -- nombre reservado protegido
`sum` DOUBLE -- otro ejemplo de identificador sensible
);
Habilidades y conceptos reforzados: - Relaciones lógicas por ID: coherencia de tipos y ausencia de restricción física. - Convención de estilo: SQL en mayúsculas; identificadores en minúsculas para lectura clara. - Tipos de datos: INT, DOUBLE, VARCHAR, TINYINT como bandera booleana. - Nulabilidad: uso de NOT NULL y posibilidad de NULL donde aplica (p. ej., country_code). - Manejo de errores y warnings: lectura del mensaje “near ...” y uso de SHOW WARNINGS. - Seguridad operativa: uso responsable de DROP TABLE. - Metadatos de columnas: comentarios, collation y permisos con SHOW FULL COLUMNS. - Identificadores con backticks: protección ante palabras reservadas y definición de alias sin ambigüedades.
Más adelante, se aplicarán tipos de fecha y se construirá la tabla de clientes como pilar del proyecto, integrando estos principios desde el diseño.
¿Tienes dudas o quieres compartir una práctica que te funcione? Deja tu comentario y conversemos.