Files
Train/app/etl/schema.sql
T
2026-06-16 00:55:20 +08:00

78 lines
3.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 中国机车图鉴 · 数据底座 schema(SQLite,设计为可移植到 PostgreSQL
-- 对应任务 T-1.1。三层模型:Category -> Model -> Unit,加 Model 关系表。
PRAGMA foreign_keys = ON;
CREATE TABLE IF NOT EXISTS category (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
subcat TEXT DEFAULT '',
slug TEXT,
UNIQUE(name, subcat)
);
CREATE TABLE IF NOT EXISTS model (
id INTEGER PRIMARY KEY,
category_id INTEGER NOT NULL REFERENCES category(id),
series TEXT DEFAULT '',
model_code TEXT NOT NULL,
full_name TEXT DEFAULT '',
aliases TEXT DEFAULT '',
manufacturer TEXT DEFAULT '',
country TEXT DEFAULT '中国',
country_type TEXT DEFAULT '国产', -- 国产/进口/引进仿制/中外合资/未知
first_year INTEGER,
last_year INTEGER,
status TEXT DEFAULT '未知',
usage TEXT DEFAULT '',
production_count TEXT DEFAULT '',
axle_arrangement TEXT DEFAULT '',
drive TEXT DEFAULT '',
efficiency TEXT DEFAULT '',
-- 数值 + 单位(拆分存储)
length_value REAL, length_unit TEXT,
width_value REAL, width_unit TEXT,
height_value REAL, height_unit TEXT,
wheelbase_value REAL, wheelbase_unit TEXT,
weight_value REAL, weight_unit TEXT,
axle_load_value REAL, axle_load_unit TEXT,
load_value REAL, load_unit TEXT,
tractive_start_value REAL, tractive_start_unit TEXT,
tractive_cont_value REAL, tractive_cont_unit TEXT,
power_kw_value REAL, power_kw_unit TEXT,
max_speed_value REAL, max_speed_unit TEXT,
capacity_value REAL, capacity_unit TEXT,
raw_json TEXT, -- 原始清洗后所有列,保真不丢字段
source_sheet TEXT
);
CREATE INDEX IF NOT EXISTS idx_model_category ON model(category_id);
CREATE INDEX IF NOT EXISTS idx_model_code ON model(model_code);
CREATE INDEX IF NOT EXISTS idx_model_first_year ON model(first_year);
CREATE TABLE IF NOT EXISTS unit (
id INTEGER PRIMARY KEY,
category_id INTEGER NOT NULL REFERENCES category(id),
model_id INTEGER REFERENCES model(id),
car_number TEXT,
model_name TEXT DEFAULT '',
function TEXT DEFAULT '',
depot TEXT DEFAULT '',
livery TEXT DEFAULT '',
status TEXT DEFAULT '未知',
location TEXT DEFAULT '',
note TEXT DEFAULT '',
raw_json TEXT,
source_sheet TEXT
);
CREATE INDEX IF NOT EXISTS idx_unit_category ON unit(category_id);
CREATE INDEX IF NOT EXISTS idx_unit_car_number ON unit(car_number);
-- 车型族谱关系(父型号/衍生/国外原型),本期预留,后续填充
CREATE TABLE IF NOT EXISTS model_relation (
id INTEGER PRIMARY KEY,
from_model_id INTEGER NOT NULL REFERENCES model(id),
to_model_id INTEGER NOT NULL REFERENCES model(id),
rel_type TEXT NOT NULL, -- parent / derivative / prototype
UNIQUE(from_model_id, to_model_id, rel_type)
);