- Base de datos SQLite con información de vehículos - Dashboard web con Flask y Bootstrap - Scripts de web scraping para RockAuto - Interfaz CLI para consultas - Documentación completa del proyecto Incluye: - 12 marcas de vehículos - 10,923 modelos - 10,919 especificaciones de motores - 12,075 combinaciones modelo-año-motor
66 lines
2.7 KiB
SQL
66 lines
2.7 KiB
SQL
-- Vehicle Database Schema
|
|
-- Tables for storing vehicle information: brands, years, models, and engines
|
|
|
|
-- Table for vehicle brands/manufacturers
|
|
CREATE TABLE IF NOT EXISTS brands (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL UNIQUE,
|
|
country TEXT,
|
|
founded_year INTEGER,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Table for engine specifications
|
|
CREATE TABLE IF NOT EXISTS engines (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
displacement_cc REAL, -- Engine displacement in cubic centimeters
|
|
cylinders INTEGER, -- Number of cylinders
|
|
fuel_type TEXT CHECK(fuel_type IN ('gasoline', 'diesel', 'electric', 'hybrid', 'other')),
|
|
power_hp INTEGER, -- Horsepower
|
|
torque_nm INTEGER, -- Torque in Newton meters
|
|
engine_code TEXT, -- Manufacturer engine code
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Table for vehicle models
|
|
CREATE TABLE IF NOT EXISTS models (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
brand_id INTEGER NOT NULL,
|
|
name TEXT NOT NULL,
|
|
body_type TEXT CHECK(body_type IN ('sedan', 'hatchback', 'suv', 'truck', 'coupe', 'convertible', 'wagon', 'van', 'other')),
|
|
generation TEXT, -- Model generation (e.g., MK1, MK2)
|
|
production_start_year INTEGER,
|
|
production_end_year INTEGER,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (brand_id) REFERENCES brands(id)
|
|
);
|
|
|
|
-- Table for years (to link with models)
|
|
CREATE TABLE IF NOT EXISTS years (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
year INTEGER NOT NULL UNIQUE,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Junction table to connect models, years, and engines
|
|
CREATE TABLE IF NOT EXISTS model_year_engine (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
model_id INTEGER NOT NULL,
|
|
year_id INTEGER NOT NULL,
|
|
engine_id INTEGER NOT NULL,
|
|
trim_level TEXT, -- Trim level (e.g., base, luxury, sport)
|
|
drivetrain TEXT CHECK(drivetrain IN ('FWD', 'RWD', 'AWD', '4WD', 'other')),
|
|
transmission TEXT CHECK(transmission IN ('manual', 'automatic', 'CVT', 'other')),
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (model_id) REFERENCES models(id),
|
|
FOREIGN KEY (year_id) REFERENCES years(id),
|
|
FOREIGN KEY (engine_id) REFERENCES engines(id),
|
|
UNIQUE(model_id, year_id, engine_id, trim_level) -- Prevent duplicate combinations
|
|
);
|
|
|
|
-- Indexes for better performance
|
|
CREATE INDEX IF NOT EXISTS idx_models_brand ON models(brand_id);
|
|
CREATE INDEX IF NOT EXISTS idx_model_year_engine_model ON model_year_engine(model_id);
|
|
CREATE INDEX IF NOT EXISTS idx_model_year_engine_year ON model_year_engine(year_id);
|
|
CREATE INDEX IF NOT EXISTS idx_model_year_engine_engine ON model_year_engine(engine_id); |