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
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/3En QBCore, ¿qué columna usas para vincular una fila al personaje del jugador?
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.
Completa la línea del fxmanifest que carga oxmysql en tu recurso de servidor.
server_scripts { '', 'server.lua',}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:
