FiveM
Veritabanı
oxmysql ile kullandığım şemalar, indexler ve migration kalıpları.
Tablo şeması
CREATE TABLE IF NOT EXISTS `player_vehicles` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`plate` VARCHAR(12) NOT NULL,
`label` VARCHAR(64) NOT NULL,
`mods` LONGTEXT NULL,
`stored` TINYINT(1) NOT NULL DEFAULT 1,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_plate` (`plate`),
KEY `idx_owner` (`citizenid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;Sık kullanılan sorgular
-- Oyuncunun garajdaki araçları
SELECT plate, label, mods
FROM player_vehicles
WHERE citizenid = ? AND stored = 1
ORDER BY created_at DESC;
-- Aracı dışarı çıkar
UPDATE player_vehicles SET stored = 0 WHERE plate = ?;
-- Upsert (varsa güncelle, yoksa ekle)
INSERT INTO player_vehicles (citizenid, plate, label)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE label = VALUES(label);Migration ekleme (diff)
Var olan tabloya kolon eklerken diff ile neyi değiştirdiğimi işaretliyorum:
ALTER TABLE player_vehicles
ADD COLUMN fuel TINYINT UNSIGNED NOT NULL DEFAULT 100; Index'i unutma
Sık WHERE ile sorguladığın kolonlara (citizenid, plate) index koy.
Yüksek oyuncu sayısında fark uçurum olur.