Base de datos con oxmysql · Lección 3/3 · 9 min

Diseñar la tabla de tu recurso

Una buena tabla te ahorra dolores. Tipos correctos, clave primaria e índices donde toca.

Antes de guardar nada, piensa la tabla. Una tabla bien diseñada es rápida y no se corrompe; una mal diseñada te dará bugs raros meses después.

Ejemplo: una tabla de propiedades

sql
CREATE TABLE IF NOT EXISTS player_houses (
  id INT AUTO_INCREMENT PRIMARY KEY,
  owner VARCHAR(60) NOT NULL,        -- identifier del dueño
  label VARCHAR(80) NOT NULL,
  price INT NOT NULL DEFAULT 0,
  coords JSON NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_owner (owner)            -- buscar por dueño es rápido
);

DDL de la tabla

  • Clave primaria (id AUTO_INCREMENT) siempre: identifica cada fila sin ambigüedad.
  • Tipos correctos: INT para números, VARCHAR(n) para textos cortos, JSON para estructuras, TIMESTAMP para fechas.
  • Índice (INDEX) en las columnas por las que filtras mucho (owner, identifier) → consultas rápidas.
  • NOT NULL y DEFAULT para no acabar con datos a medias.

Para datos complejos (un inventario, unas coords con heading) usa una columna JSON y guarda con json.encode / lee con json.decode. Evita crear 20 columnas para algo que es una estructura.

Practica lo aprendido

0/3
Rellena los huecos

Completa el CREATE TABLE de propiedades: clave primaria, texto corto, estructura y un índice.

1CREATE TABLE IF NOT EXISTS player_houses (
2 id INT AUTO_INCREMENT KEY,
3 owner (60) NOT NULL,
4 coords NOT NULL,
5 idx_owner (owner)
6);
Pista

PRIMARY KEY identifica la fila; VARCHAR(n) para texto corto; JSON para estructuras; INDEX para buscar rápido.

Test

Para guardar unas coordenadas con heading (una estructura), ¿qué tipo de columna es el más adecuado?

Pista

¿Estructura completa en una sola columna?

Ordena el código

Ordena el CREATE TABLE de un sistema de multas (id, importe e índice por ciudadano).

Coloca las líneas en el orden correcto con las flechas.

CREATE TABLE IF NOT EXISTS fines (
INDEX idx_citizen (citizen)
);
citizen VARCHAR(60) NOT NULL,
amount INT NOT NULL DEFAULT 0,
id INT AUTO_INCREMENT PRIMARY KEY,
Pista

Empieza por CREATE TABLE, luego las columnas (id primero) y cierra con el índice y el paréntesis.

Reto: prográmalo tú

Diseña una tabla para guardar multas de policía: quién la pone, a quién, importe, motivo y fecha.

Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.

Ver pista

PRIMARY KEY en id, INDEX en ciudadano para listar sus multas, TINYINT(1) para pagada.

Escribe aquí tu solución:

¿Qué tal esta lección?