Files
game1.shadow-land.de/database/schema.sql

117 lines
4.0 KiB
SQL

-- Airline Tycoon Browser-MMO Datenbankschema (SQLite)
-- Phase 1: User, Airlines, Flughäfen, Basis-Routen
-- Benutzer (Spieler)
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
airline_name VARCHAR(100) DEFAULT '',
balance DECIMAL(15,2) DEFAULT 500000.00,
level INTEGER DEFAULT 1,
experience INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
last_login DATETIME DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT 1
);
-- Flughäfen (statisch, geladen aus CSV)
CREATE TABLE IF NOT EXISTS airports (
id INTEGER PRIMARY KEY,
iata_code VARCHAR(3) UNIQUE NOT NULL,
name VARCHAR(200) NOT NULL,
city VARCHAR(100) NOT NULL,
country VARCHAR(100) NOT NULL,
continent VARCHAR(50) NOT NULL,
latitude DECIMAL(10,6) NOT NULL,
longitude DECIMAL(10,6) NOT NULL,
timezone VARCHAR(50) DEFAULT 'UTC',
passenger_volume INTEGER DEFAULT 1000000,
demand_multiplier DECIMAL(3,2) DEFAULT 1.00
);
-- Flugzeuge (Fleet)
CREATE TABLE IF NOT EXISTS aircraft (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
aircraft_type VARCHAR(50) NOT NULL,
name VARCHAR(100) DEFAULT '',
condition DECIMAL(5,2) DEFAULT 100.00,
flights_count INTEGER DEFAULT 0,
purchase_price DECIMAL(15,2) NOT NULL,
seat_capacity INTEGER NOT NULL,
range_km INTEGER NOT NULL,
fuel_efficiency DECIMAL(5,2) DEFAULT 1.00,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- Routen
CREATE TABLE IF NOT EXISTS routes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
from_airport_id INTEGER NOT NULL,
to_airport_id INTEGER NOT NULL,
distance_km INTEGER NOT NULL,
base_price DECIMAL(10,2) DEFAULT 100.00,
demand_level INTEGER DEFAULT 50,
is_active BOOLEAN DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (from_airport_id) REFERENCES airports(id),
FOREIGN KEY (to_airport_id) REFERENCES airports(id)
);
-- Flüge (durchgeführte Flüge)
CREATE TABLE IF NOT EXISTS flights (
id INTEGER PRIMARY KEY AUTOINCREMENT,
route_id INTEGER NOT NULL,
aircraft_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
departure_time DATETIME NOT NULL,
arrival_time DATETIME NOT NULL,
passengers INTEGER DEFAULT 0,
revenue DECIMAL(15,2) DEFAULT 0.00,
fuel_cost DECIMAL(15,2) DEFAULT 0.00,
profit DECIMAL(15,2) DEFAULT 0.00,
status VARCHAR(20) DEFAULT 'completed',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (route_id) REFERENCES routes(id),
FOREIGN KEY (aircraft_id) REFERENCES aircraft(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- Statistiken (tägliche Auswertungen)
CREATE TABLE IF NOT EXISTS daily_stats (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
date DATE NOT NULL,
total_flights INTEGER DEFAULT 0,
total_passengers INTEGER DEFAULT 0,
total_revenue DECIMAL(15,2) DEFAULT 0.00,
total_profit DECIMAL(15,2) DEFAULT 0.00,
fuel_cost DECIMAL(15,2) DEFAULT 0.00,
UNIQUE(user_id, date),
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- Events (Werbeaktionen, Wettbewerbe)
CREATE TABLE IF NOT EXISTS events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(200) NOT NULL,
description TEXT,
event_type VARCHAR(50) DEFAULT 'special',
bonus_multiplier DECIMAL(3,2) DEFAULT 1.00,
start_date DATETIME NOT NULL,
end_date DATETIME NOT NULL,
is_active BOOLEAN DEFAULT 1
);
-- Indexes für Performance
CREATE INDEX IF NOT EXISTS idx_routes_user ON routes(user_id);
CREATE INDEX IF NOT EXISTS idx_flights_user ON flights(user_id);
CREATE INDEX IF NOT EXISTS idx_flights_route ON flights(route_id);
CREATE INDEX IF NOT EXISTS idx_aircraft_user ON aircraft(user_id);
CREATE INDEX IF NOT EXISTS idx_airports_iata ON airports(iata_code);