Railway Management System
Railway Management System
-- Stations Table
mysql> CREATE TABLE Stations (
-> StationID INT PRIMARY KEY,
-> StationName VARCHAR(100),
-> Location VARCHAR(100)
-> );
-- Trains Table
mysql> CREATE TABLE Trains (
-> TrainID INT PRIMARY KEY,
-> TrainName VARCHAR(100),
-> MaxCapacity INT,
-> Speed INT
-> );
-- Routes Table
mysql> CREATE TABLE Routes (
-> RouteID INT PRIMARY KEY,
-> SourceStationID INT,
-> DestinationStationID INT,
-> Distance INT,
-> Duration INT,
-> TicketPrice DECIMAL(10, 2),
-> FOREIGN KEY (SourceStationID) REFERENCES Stations(StationID),
-> FOREIGN KEY (DestinationStationID) REFERENCES Stations(StationID)
-> );
-- Schedules Table
mysql> CREATE TABLE Schedules (
-> ScheduleID INT PRIMARY KEY,
-> TrainID INT,
-> RouteID INT,
-> DepartureTime TIMESTAMP,
-> ArrivalTime TIMESTAMP,
-> FOREIGN KEY (TrainID) REFERENCES Trains(TrainID),
-> FOREIGN KEY (RouteID) REFERENCES Routes(RouteID)
-> );
-- Tickets Table
mysql> CREATE TABLE Tickets (
-> TicketID INT AUTO_INCREMENT PRIMARY KEY,
-> ScheduleID INT,
-> RouteID INT,
-> PassengerName VARCHAR(100),
-> TicketPrice DECIMAL(10, 2),
-> BookingDate DATE,
-> FOREIGN KEY (ScheduleID) REFERENCES Schedules(ScheduleID),
-> FOREIGN KEY (RouteID) REFERENCES Routes(RouteID)
-> );
Queries:
1) Create Trigger to Update TicketPrice and booking date Before Inserting Ticket
mysql> DELIMITER //
mysql> CREATE TRIGGER before_insert_ticket
-> BEFORE INSERT ON Tickets
-> FOR EACH ROW
-> BEGIN
-> DECLARE route_price DECIMAL(10, 2);
-> -- Get the TicketPrice from the corresponding Route
-> SELECT TicketPrice INTO route_price FROM Routes WHERE RouteID =
NEW.RouteID;
-> -- Set the TicketPrice for the new ticket
-> SET NEW.TicketPrice = route_price;
-> SET NEW.BookingDate = CURDATE();
->
-> END;
-> //
mysql> DELIMITER ;
10) Identify the most popular routes based on the number of tickets
mysql> SELECT Routes.RouteID, StationName AS SourceStation, Location AS
SourceLocation,
-> StationName AS DestinationStation, Location AS DestinationLocation,
-> COUNT(Tickets.TicketID) AS TicketsBooked
-> FROM Routes
-> JOIN Stations ON Routes.SourceStationID = Stations.StationID
-> JOIN Tickets ON Routes.RouteID = Tickets.RouteID
-> GROUP BY Routes.RouteID
-> ORDER BY TicketsBooked DESC;