Bien is the online archive of all Formula-1 races gathered in one place. Since the history of Formula-1 dates back to times way before web applications were even heard of, it is essential to digitilize the existing data in order to keep track of the history and help people learn about this beautiful and legendary sport.
Bien can be thought of as a digitilized library, an archive of the legendary Formula-1 races. From searching throughout the history of all the races and getting detailed information about the drivers, to seeing each individual pitstop duration of any race and the laptimes of anyone, Bien is the ultimate helper in diving deep into the world of Formula-1.
You can look through the drivers qualifications, their standings in each race, status in the races they participated and their technical information such as their code names and wikipedia pages.
Bien also allows you to search through the circuits where the races were held and visit their wikipedia pages, get a detailed information about any race and their results.
Bien is a web application built using the following stack:
- Frontend - NuxtJS (VueJS Framework)
- Backend - ASP.NET 5 (C#)
- Database - MySQL
NuxtJS is a framework for VueJS, a component based JavaScript framework, that allows server-side rendering.
ASP.NET 5 is a C# framework for building extremely fast and secure web applications.
MySQL is a simple SQL database that is perfectly compatible with C#.
Q: Can you get a list of all the races and their circuits?
A: Absolutely! Every race has its own circuit which you can get by joining the races table with the circuits table by circuit id.
Q: How can I see the results of the constructors in a particular season?
A: Via connecting the races table with the constructor results table, and filtering the required season, you can get the desired results.
Q: Can I get the Wikipedia page of a driver who won in a particular race?
A: By joining the races table with the driver standings table, you can easily find out the winners Wikipedia URL if it is present in the database.
Q: How to see the drivers that participated in a particular race?
A: Bien allows you to search for any driver in its database who participated in any of the Formula-1 Races from 1950 to 2020.
Q: Can you see the pitstops of the drivers who participated in a particular race?
A: By connecting the driver's id with the race id and the pitstops table, you can view the pitstop information.
Q: How to see the circuit and pitstop times of a race won by a particular driver?
A: By joining the races table with the results table, and sorting them by their positions from the driver standings table, and getting the driver information from the drivers table, as well as the circuit information from the circuits table and the pitstops data from the pitstops table, we can get the full information about the circuit and pitstop times of the winner.
Q: Can you see the driver standings of a driver who was disqualified on a particular circuit in a particular year?
A: By connecting the status table with the results table, and getting the races in that particular year from the races table, and joining the drivers table with the driver standings table and their statuses, we can filter the disqualified drivers.
Q: How to see the total pitstop duration of a driver who has won a race in particular year in a particular circuit?
A: To see that, we need to find the requested race by the year in the races table, and get the driver standings of it from the driver standings table, and join the circuit table with the races table to get the circuit of the race, and then sum up all the pitstop duration times in the pitstop table by the driver who has won that race, and get his information from the drivers table.
Q: How to see driver standings of a driver who showed the their best results 4 seasons in a row?
A: In order to do that, we have to get the results from the results table, find all the races that the driver has participated in, and find the 4 years of his best results that were in a row, join that with the driver standings table, and join the drivers table to get the information about the driver.
Q: Can you get all the laptimes of a particular driver in each season they have participated in and in each circuit that they have driven in?
A: Yes, by joining the laptimes table with the results table to get the seasons, and finding the required driver by connecting it to the drivers table, and joining the circuits table to get the circuit that the race was held on, we can get all of the laptimes of the driver in each season and in each circuit.
Q: Can you find the qualifying position of a driver who has been disqualified from a particular race?
A: By joining the results with the races table to get the needed race, and joining it with the drivers table to get the required driver, we can connect it to the status table to find the races where the driver has been disqualified, and get the qualifying position from the qualifying table by connecting it to the race id and driver id.
Q: How to get the laptime of a driver from the longest pitstop to the next pitstop in a particular lap in a particular race?
A: To get it, we have to join the race from the races table, and find the required driver in that race by connecting the drivers table, and get the longest pitstop of the requested lap from the pitstops table and find the lap time of the until the pitstop from the laptimes table.
Q: How to get fastest laptimes in races on particular circuit in every season?
A: We have to find the races that were held in that circuit from the results table, and get the fastest lap time of that race from the laptimes table in every season.
Q: Who is the youngest winner in every season?
A: By connecting the results table with the drivers table and the driver standings table, we can group the races by the season and get the youngest winners in each season. To get their full info we can join it the drivers table.
Q: Which constructor holds the record for the most wins in a season?
A: By joining the races table with the constructor standings table and constructors table, we can group the races by the seasons and get the constructor with the most number of wins in every season.
This dataset was used in the project due to the fact that conforms all of the requirements and is quite large (~18 MB).
circuits (
circuitId int PK,
circuitRef string,
name string,
location string,
country string,
lat float,
lng float,
alt float,
url string
)
constructor_results (
id int PK,
raceId int FK,
constructorId int FK,
points int,
status int FK
)
constructor_standings (
id int PK,
raceId int FK,
constructorId int FK,
points int,
position int,
positionText string,
wins int
)
constructors (
id int PK,
constructorRef string,
name string,
nationality string,
url string
)
driver_standings (
id int PK,
raceId int FK,
driverId int FK,
points int,
position int,
positionText string,
wins int
)
drivers (
id int PK,
driverRef string,
number int,
code string,
forename string,
surname string,
dob date,
nationality string,
url string
)
lap_times (
raceId int FK,
driverId int FK,
lap int,
position int,
time string,
milliseconds int
)
pit_stops (
raceId int FK,
driverId int FK,
stop int,
lap int,
time string,
duration float,
milliseconds int
)
qualifying (
qualifyId int PK,
raceId int FK,
driverId int FK,
constructorId int FK,
number int,
position int,
q1 string,
q2 string,
q3 string
)
races (
raceId int PK,
year int,
round int,
circuitId int FK,
name string,
date date,
time string,
url string
)
results (
resultId int PK,
raceId int FK,
driverId int FK,
constructorId int FK,
number int,
grid int,
position int,
positionText string,
positionOrder int,
points int,
laps int,
time string,
milliseconds int,
fastestLap int,
rank int,
fastestLapTime string,
fastestLapSpeed float,
statusId int FK
)
seasons (
year int PK,
url string
)
status (
statudId int PK,
status string
)
