WarGame Data Model
This is a simple data model for storing data that could be used in a game like War Thunder.
-- SQL Script for creating the database and seeding test data
-- Create databaseCREATE DATABASE IF NOT EXISTS wargame;USE wargame;
-- Drop tables if they exist (for reruns)DROP TABLE IF EXISTS tank_weapon, tank_stat, tank, weapon, tank_type, faction, country;
-- COUNTRY TABLECREATE TABLE country ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, continent VARCHAR(50));
-- FACTION TABLECREATE TABLE faction ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, ideology VARCHAR(100), country_id INT, FOREIGN KEY (country_id) REFERENCES country(id));
-- TANK_TYPE TABLECREATE TABLE tank_type ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, description VARCHAR(255));
-- TANK TABLECREATE TABLE tank ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, year_introduced INT, country_id INT, faction_id INT, tank_type_id INT, FOREIGN KEY (country_id) REFERENCES country(id), FOREIGN KEY (faction_id) REFERENCES faction(id), FOREIGN KEY (tank_type_id) REFERENCES tank_type(id));
-- TANK_STAT TABLECREATE TABLE tank_stat ( id INT AUTO_INCREMENT PRIMARY KEY, tank_id INT, armor_thickness FLOAT, top_speed FLOAT, weight FLOAT, engine_power FLOAT, FOREIGN KEY (tank_id) REFERENCES tank(id));
-- WEAPON TABLECREATE TABLE weapon ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, type VARCHAR(50), caliber_mm FLOAT, rate_of_fire FLOAT);
-- TANK_WEAPON TABLECREATE TABLE tank_weapon ( id INT AUTO_INCREMENT PRIMARY KEY, tank_id INT, weapon_id INT, mount_position VARCHAR(50), ammo_count INT, FOREIGN KEY (tank_id) REFERENCES tank(id), FOREIGN KEY (weapon_id) REFERENCES weapon(id));
-- ----------------------------------------------------- INSERT DATA-- ---------------------------------------------------
-- COUNTRIESINSERT INTO country (name, continent) VALUES('Germany', 'Europe'),('USA', 'North America'),('USSR', 'Europe/Asia'),('UK', 'Europe'),('France', 'Europe'),('Japan', 'Asia');
-- FACTIONSINSERT INTO faction (name, ideology, country_id) VALUES('Wehrmacht', 'Axis', 1),('US Army', 'Allies', 2),('Red Army', 'Communist', 3),('British Army', 'Allies', 4),('French Army', 'Allies', 5),('Imperial Army', 'Axis', 6);
-- TANK TYPESINSERT INTO tank_type (name, description) VALUES('Light Tank', 'Fast and lightly armored tank used for reconnaissance'),('Medium Tank', 'Balanced tank combining firepower, armor, and speed'),('Heavy Tank', 'Heavily armored tank with strong firepower'),('Tank Destroyer', 'Designed for long-range anti-tank engagements');
-- WEAPONSINSERT INTO weapon (name, type, caliber_mm, rate_of_fire) VALUES('75 mm KwK 42 L/70', 'Cannon', 75, 10),('88 mm KwK 36 L/56', 'Cannon', 88, 6),('37 mm M5', 'Cannon', 37, 20),('75 mm M3', 'Cannon', 75, 12),('76 mm ZiS-3', 'Cannon', 76, 15),('122 mm D-25T', 'Cannon', 122, 4),('40 mm 2pdr', 'Cannon', 40, 20),('17-pounder', 'Cannon', 76.2, 10),('47 mm SA 35', 'Cannon', 47, 15),('Type 97 57mm', 'Cannon', 57, 10),('MG34', 'Machine Gun', 7.92, 600),('M1919 Browning', 'Machine Gun', 7.62, 500),('DT MG', 'Machine Gun', 7.62, 550),('BESA MG', 'Machine Gun', 7.92, 600);
-- TANKSINSERT INTO tank (name, year_introduced, country_id, faction_id, tank_type_id) VALUES('Panzer II', 1936, 1, 1, 1),('Panzer III', 1939, 1, 1, 2),('Panzer IV', 1940, 1, 1, 2),('Tiger I', 1942, 1, 1, 3),('Tiger II', 1944, 1, 1, 3),('M3 Stuart', 1941, 2, 2, 1),('M4 Sherman', 1942, 2, 2, 2),('M26 Pershing', 1945, 2, 2, 3),('T-26', 1933, 3, 3, 1),('T-34', 1940, 3, 3, 2),('KV-1', 1940, 3, 3, 3),('IS-2', 1943, 3, 3, 3),('Crusader', 1940, 4, 4, 1),('Cromwell', 1943, 4, 4, 2),('Churchill', 1941, 4, 4, 3),('Char B1', 1935, 5, 5, 3),('Somua S35', 1936, 5, 5, 2),('Type 95 Ha-Go', 1935, 6, 6, 1),('Chi-Ha', 1938, 6, 6, 2),('Chi-Nu', 1944, 6, 6, 2);
-- TANK STATSINSERT INTO tank_stat (tank_id, armor_thickness, top_speed, weight, engine_power) VALUES(1, 14, 40, 9.5, 140),(2, 30, 40, 23, 300),(3, 50, 38, 25, 300),(4, 100, 45, 57, 700),(5, 180, 41, 70, 700),(6, 25, 58, 12, 250),(7, 51, 48, 30, 400),(8, 102, 40, 41, 500),(9, 15, 30, 9, 90),(10, 45, 53, 26.5, 500),(11, 90, 35, 47, 600),(12, 120, 37, 46, 600),(13, 30, 42, 20, 340),(14, 76, 64, 27, 600),(15, 152, 25, 40, 350),(16, 60, 28, 32, 300),(17, 47, 40, 20, 250),(18, 12, 45, 7.4, 120),(19, 25, 38, 15, 170),(20, 50, 39, 20, 240);
-- TANK_WEAPON (main + MGs)INSERT INTO tank_weapon (tank_id, weapon_id, mount_position, ammo_count) VALUES(1, 3, 'Main Gun', 180),(1, 11, 'Coaxial MG', 2000),(2, 3, 'Main Gun', 150),(2, 11, 'Coaxial MG', 2000),(3, 1, 'Main Gun', 90),(3, 11, 'Coaxial MG', 2000),(4, 2, 'Main Gun', 92),(4, 11, 'Coaxial MG', 3800),(5, 2, 'Main Gun', 86),(5, 11, 'Coaxial MG', 4800),(6, 3, 'Main Gun', 200),(6, 12, 'Coaxial MG', 2500),(7, 4, 'Main Gun', 90),(7, 12, 'Coaxial MG', 3000),(8, 4, 'Main Gun', 70),(8, 12, 'Coaxial MG', 2800),(9, 5, 'Main Gun', 200),(9, 13, 'Coaxial MG', 2700),(10, 5, 'Main Gun', 100),(10, 13, 'Coaxial MG', 2800),(11, 5, 'Main Gun', 90),(11, 13, 'Coaxial MG', 3200),(12, 6, 'Main Gun', 28),(12, 13, 'Coaxial MG', 2800),(13, 7, 'Main Gun', 110),(13, 14, 'Coaxial MG', 2000),(14, 8, 'Main Gun', 65),(14, 14, 'Coaxial MG', 2200),(15, 8, 'Main Gun', 150),(15, 14, 'Coaxial MG', 3000),(16, 9, 'Main Gun', 80),(16, 14, 'Coaxial MG', 2000),(17, 9, 'Main Gun', 118),(17, 14, 'Coaxial MG', 1900),(18, 10, 'Main Gun', 120),(18, 14, 'Coaxial MG', 2000),(19, 10, 'Main Gun', 100),(19, 14, 'Coaxial MG', 1800),(20, 10, 'Main Gun', 90),(20, 14, 'Coaxial MG', 1900);