148 lines
3.5 KiB
SQL
Executable File
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; |