Files
formula1/backend/target/classes/init.sql
2025-12-20 12:20:43 +08:00

148 lines
3.5 KiB
SQL
Executable File

-- 车手表
CREATE TABLE IF NOT EXISTS driver(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
country VARCHAR(100),
birthday DATE
);
-- 车队表
CREATE TABLE IF NOT EXISTS team(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
country VARCHAR(100),
engine_supplier VARCHAR(100),
setup_time YEAR
);
-- 合同表
CREATE TABLE IF NOT EXISTS contract(
id INT AUTO_INCREMENT PRIMARY KEY,
driver_id INT,
team_id INT,
season YEAR,
car_num INT,
is_reserve BOOLEAN,
FOREIGN KEY(driver_id) REFERENCES driver(id),
FOREIGN KEY(team_id) REFERENCES team(id)
);
-- 赛道表
CREATE TABLE IF NOT EXISTS circuit(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
location VARCHAR(100),
country VARCHAR(100),
drs_zones INT
);
-- 赛事表
CREATE TABLE IF NOT EXISTS prix(
id INT AUTO_INCREMENT PRIMARY KEY,
season YEAR,
round INT,
name VARCHAR(100),
circuit_id INT,
have_sprint BOOLEAN,
FOREIGN KEY(circuit_id) REFERENCES circuit(id)
);
-- 排位赛结果表
CREATE TABLE IF NOT EXISTS qualifying_result(
prix_id INT,
driver_id INT,
team_id INT,
fastest_time VARCHAR(20),
position INT,
is_sprint BOOLEAN,
section INT,
FOREIGN KEY(prix_id) REFERENCES prix(id),
FOREIGN KEY(driver_id) REFERENCES driver(id),
FOREIGN KEY(team_id) REFERENCES team(id)
);
-- 正赛结果表
CREATE TABLE IF NOT EXISTS race_result(
prix_id INT,
driver_id INT,
team_id INT,
start_position INT,
end_position INT,
finish_time VARCHAR(20),
fastest_time VARCHAR(20),
score INT,
is_sprint BOOLEAN,
FOREIGN KEY(prix_id) REFERENCES prix(id),
FOREIGN KEY(driver_id) REFERENCES driver(id),
FOREIGN KEY(team_id) REFERENCES team(id)
);
-- 用户表
CREATE TABLE IF NOT EXISTS user(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) UNIQUE,
password VARCHAR(100),
email VARCHAR(100),
country VARCHAR(100),
avatar VARCHAR(500)
);
-- 评论表
CREATE TABLE IF NOT EXISTS comment(
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
response_id INT,
root_id INT,
content VARCHAR(500),
FOREIGN KEY(user_id) REFERENCES user(id),
FOREIGN KEY(response_id) REFERENCES comment(id) ON DELETE CASCADE,
FOREIGN KEY(root_id) REFERENCES comment(id) ON DELETE CASCADE
);
-- 赛季车手信息视图
CREATE OR REPLACE VIEW season_driver(
id, name, team, country, birthday, car_num, season
) AS
SELECT D.id,
D.name,
T.name,
D.country,
D.birthday,
C.car_num,
C.season
FROM contract C
JOIN team T ON T.id = C.team_id
JOIN driver D ON C.driver_id = D.id;
-- 赛季车队积分榜视图
CREATE OR REPLACE VIEW season_team_standings AS
SELECT
p.season,
rr.team_id,
SUM(rr.score) AS total_score,
RANK() OVER (PARTITION BY p.season ORDER BY SUM(rr.score) DESC) AS ranking
FROM race_result rr
JOIN prix p ON rr.prix_id = p.id
GROUP BY p.season, rr.team_id;
CREATE OR REPLACE VIEW prix_result AS
SELECT
p.season,
p.id AS prix_id,
rr.driver_id,
rr.team_id,
p.name AS prix_name,
p.round,
sd.name AS driver_name,
sd.car_num,
sd.team AS team_name,
rr.end_position AS pos,
rr.finish_time,
rr.score,
rr.is_sprint
FROM
race_result rr
JOIN
prix p ON rr.prix_id = p.id
JOIN
season_driver sd ON rr.driver_id = sd.id AND sd.season = p.season;