🏗️ Core Database Schema - QBCore Guide for FiveM
Introduction
This tutorial turns 🏗️ Core Database Schema into a clean, developer-friendly guide for QBCore/FiveM. You will follow a step-by-step flow, copy the relevant code patterns, and learn the “why” behind the setup.
Requirements
- QBCore installed and running on a dev server
- Basic Lua knowledge and comfort reading FiveM patterns
- A test workflow for iterating safely (dev server, not production)
- Optional: a code editor with Lua/FiveM helpers (VS Code recommended)
Step-by-Step Guide
Step 1: Core Player Tables
In this step, you will apply the core player tables concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 2: players
In this step, you will apply the players concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 3: playerskins
In this step, you will apply the playerskins concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 4: Vehicle Management
In this step, you will apply the vehicle management concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 5: player_vehicles
In this step, you will apply the player_vehicles concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 6: vehicle_categories
In this step, you will apply the vehicle_categories concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 7: Property Management
In this step, you will apply the property management concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 8: player_houses
In this step, you will apply the player_houses concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Code Example
CREATE TABLE `players` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`citizenid` varchar(50) NOT NULL,
`cid` int(11) DEFAULT NULL,
`license` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`money` text NOT NULL,
`charinfo` text DEFAULT NULL,
`job` text NOT NULL,
`gang` text DEFAULT NULL,
`position` text NOT NULL,
`metadata` text NOT NULL,
`inventory` longtext DEFAULT NULL,
`last_updated` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`citizenid`),
KEY `id` (`id`),
KEY `last_updated` (`last_updated`),
KEY `license` (`license`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;Tips & Best Practices
- Keep authority on the server: validate inputs before money/database operations.
- Start with one resource/module at a time, then refactor after you verify it works.
- Use callbacks for request/response flows and events for push/UX updates.
- When you run loops, avoid freezes: always yield with Wait() (client/server) and cache hot values.