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

Diseñar la tabla de tu recurso (con citizenid)

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

Antes de guardar nada, piensa la tabla. En QBCore, la mayoría de tus tablas se vincularán al personaje por su citizenid. Una tabla bien diseñada es rápida y no se corrompe.

Ejemplo: una tabla de propiedades

sql
CREATE TABLE IF NOT EXISTS player_houses (
  id INT AUTO_INCREMENT PRIMARY KEY,
  citizenid VARCHAR(50) NOT NULL,    -- dueño (clave de QBCore)
  label VARCHAR(80) NOT NULL,
  price INT NOT NULL DEFAULT 0,
  coords JSON NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_citizenid (citizenid)    -- buscar por dueño es rápido
);

DDL de la tabla

  • Clave primaria (id AUTO_INCREMENT) siempre: identifica cada fila sin ambigüedad.
  • citizenid VARCHAR para vincular al personaje (no uses el source, que cambia cada sesión).
  • Tipos correctos: INT para números, VARCHAR(n) para textos cortos, JSON para estructuras.
  • Índice (INDEX) en citizenid → listar las propiedades de un jugador es instantáneo.

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
Test

En QBCore, ¿qué columna usas para vincular una fila al personaje del jugador?

Ordena el código

Ordena el CREATE TABLE de una tabla propia que guarda un valor por personaje, con clave primaria e índice por citizenid.

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

CREATE TABLE IF NOT EXISTS mirecurso_datos (
);
valor INT NOT NULL DEFAULT 0,
id INT AUTO_INCREMENT PRIMARY KEY,
INDEX idx_citizenid (citizenid)
citizenid VARCHAR(50) NOT NULL,
Pista

Primero abres el CREATE TABLE, luego la clave primaria, después las columnas, el índice y cierras.

Rellena los huecos

Completa la línea del fxmanifest que carga oxmysql en tu recurso de servidor.

1server_scripts {
2 '',
3 'server.lua',
4}
Pista

Es el import de la librería de oxmysql; va en server_scripts, no en client.

Reto: prográmalo tú

Diseña una tabla para guardar multas de policía en QBCore: agente, ciudadano (ambos por citizenid), importe, motivo, si está pagada 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?