0% found this document useful (0 votes)
0 views

Create Bus Ticket Booking Database

The document outlines the creation of a database named 'bus4' with tables for Bus, Route, Schedule, Passenger, Booking, and BookingLog. It includes sample data insertion and the implementation of triggers for updating seat availability, logging booking details, and preventing overbooking. Additionally, it provides various SQL queries to retrieve information about buses, routes, schedules, passengers, and bookings.

Uploaded by

sumukhariot05
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
0 views

Create Bus Ticket Booking Database

The document outlines the creation of a database named 'bus4' with tables for Bus, Route, Schedule, Passenger, Booking, and BookingLog. It includes sample data insertion and the implementation of triggers for updating seat availability, logging booking details, and preventing overbooking. Additionally, it provides various SQL queries to retrieve information about buses, routes, schedules, passengers, and bookings.

Uploaded by

sumukhariot05
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

-- Create database

CREATE DATABASE bus4;

GO

-- Use the created database

USE bus4;

GO

-- Create tables

CREATE TABLE Bus (

BusID INT PRIMARY KEY,

BusNumber VARCHAR(10) NOT NULL,

Capacity INT NOT NULL

);

CREATE TABLE Route (

RouteID INT PRIMARY KEY,

Source VARCHAR(50) NOT NULL,

Destination VARCHAR(50) NOT NULL,

Distance INT NOT NULL

);

CREATE TABLE Schedule (

ScheduleID INT PRIMARY KEY,

BusID INT,

RouteID INT,

DepartureTime TIME,

ArrivalTime TIME,

FOREIGN KEY (BusID) REFERENCES Bus(BusID),

FOREIGN KEY (RouteID) REFERENCES Route(RouteID)

);

CREATE TABLE Passenger (

PassengerID INT PRIMARY KEY,

Name VARCHAR(50) NOT NULL,

Age INT NOT NULL,


Gender CHAR(1)

);

CREATE TABLE Booking (

BookingID INT PRIMARY KEY,

ScheduleID INT,

PassengerID INT,

BookingTime DATETIME2 DEFAULT SYSDATETIME(),

SeatNumber INT,

FOREIGN KEY (ScheduleID) REFERENCES Schedule(ScheduleID),

FOREIGN KEY (PassengerID) REFERENCES Passenger(PassengerID)

);

CREATE TABLE BookingLog (

LogID INT PRIMARY KEY IDENTITY(1,1),

BookingID INT,

ScheduleID INT,

PassengerID INT,

BookingTime DATETIME2,

FOREIGN KEY (BookingID) REFERENCES Booking(BookingID)

);

-- Insert sample data

INSERT INTO Bus VALUES (1, 'BUS123', 40), (2, 'BUS456', 50), (3, 'BUS789', 45);

INSERT INTO Route VALUES (1, 'CityA', 'CityB', 300), (2, 'CityB', 'CityC', 200), (3, 'CityC', 'CityD', 150);

INSERT INTO Schedule VALUES (1, 1, 1, '08:00:00', '12:00:00'), (2, 2, 2, '14:00:00', '18:00:00'), (3, 3, 3,
'10:00:00', '13:00:00');

INSERT INTO Passenger VALUES (1, 'John Doe', 30, 'M'), (2, 'Jane Smith', 25, 'F'), (3, 'Alice Johnson',
28, 'F'), (4, 'Bob Brown', 35, 'M');

-- Insert bookings with BookingTime within the specified date range

INSERT INTO Booking (BookingID, ScheduleID, PassengerID, BookingTime, SeatNumber) VALUES

(1, 1, 1, '2025-04-02 10:00:00', 5),

(2, 2, 2, '2025-04-03 11:00:00', 10),

(3, 3, 3, '2025-04-04 12:00:00', 15),


(4, 3, 4, '2025-04-05 13:00:00', 20);

-- Create triggers

-- Trigger to update seat availability after booking

CREATE TRIGGER UpdateSeatAvailability

ON Booking

AFTER INSERT

AS

BEGIN

-- Update the capacity for each bus based on the inserted bookings

UPDATE Bus

SET Capacity = Capacity - (

SELECT COUNT(*)

FROM inserted i

JOIN Schedule s ON i.ScheduleID = s.ScheduleID

WHERE s.BusID = Bus.BusID

WHERE Bus.BusID IN (

SELECT s.BusID

FROM inserted i

JOIN Schedule s ON i.ScheduleID = s.ScheduleID

);

END;

GO

-- Trigger to log booking details

CREATE TRIGGER LogBookingDetails

ON Booking

AFTER INSERT

AS

BEGIN

INSERT INTO BookingLog (BookingID, ScheduleID, PassengerID, BookingTime)


SELECT BookingID, ScheduleID, PassengerID, BookingTime FROM inserted;

END;

GO

-- Trigger to prevent overbooking

CREATE TRIGGER PreventOverbooking

ON Booking

INSTEAD OF INSERT

AS

BEGIN

DECLARE @availableSeats INT;

DECLARE @ScheduleID INT;

DECLARE @PassengerID INT;

DECLARE @SeatNumber INT;

SELECT @ScheduleID = ScheduleID, @PassengerID = PassengerID, @SeatNumber = SeatNumber


FROM inserted;

SET @availableSeats = (SELECT Capacity FROM Bus WHERE BusID = (SELECT BusID FROM Schedule
WHERE ScheduleID = @ScheduleID));

IF @availableSeats <= 0

BEGIN

RAISERROR ('No available seats', 16, 1);

END

ELSE

BEGIN

INSERT INTO Booking (ScheduleID, PassengerID, BookingTime, SeatNumber)

VALUES (@ScheduleID, @PassengerID, SYSDATETIME(), @SeatNumber);

END

END;

GO
-- Queries

-- 1. Get all buses

SELECT * FROM Bus;

-- 2. Get all routes

SELECT * FROM Route;

-- 3. Get all schedules

SELECT * FROM Schedule;

-- 4. Get all passengers

SELECT * FROM Passenger;

-- 5. Get all bookings

SELECT * FROM Booking;

-- 6. Get bookings for a specific route

SELECT Booking.BookingID, Booking.PassengerID, Booking.SeatNumber

FROM Booking

JOIN Schedule ON Booking.ScheduleID = Schedule.ScheduleID

WHERE Schedule.RouteID = 1;

-- 7. Query to get the number of available seats for each bus on a specific route

SELECT

Bus.BusNumber,

Route.Source,

Route.Destination,

Bus.Capacity - COUNT(Booking.BookingID) AS AvailableSeats

FROM

Bus

JOIN
Schedule ON Bus.BusID = Schedule.BusID

JOIN

Route ON Schedule.RouteID = Route.RouteID

LEFT JOIN

Booking ON Schedule.ScheduleID = Booking.ScheduleID

WHERE

Route.RouteID = 1

GROUP BY

Bus.BusNumber, Route.Source, Route.Destination, Bus.Capacity;

-- 8. Query to get the details of all passengers who have booked a ticket for a particular bus schedule

SELECT

Passenger.PassengerID,

Passenger.Name,

Passenger.Age,

Passenger.Gender,

Booking.SeatNumber

FROM

Passenger

JOIN

Booking ON Passenger.PassengerID = Booking.PassengerID

WHERE

Booking.ScheduleID = 1;

-- 9. Query to get the schedule details for a specific bus number

SELECT

Schedule.ScheduleID,

Route.Source,

Route.Destination,

Schedule.DepartureTime,

Schedule.ArrivalTime
FROM

Schedule

JOIN

Bus ON Schedule.BusID = Bus.BusID

JOIN

Route ON Schedule.RouteID = Route.RouteID

WHERE

Bus.BusNumber = 'BUS123';

-- 10. Query to get all bookings made within a specific date range

SELECT

Booking.BookingID,

Passenger.Name,

Schedule.DepartureTime,

Booking.BookingTime,

Booking.SeatNumber

FROM

Booking

JOIN

Passenger ON Booking.PassengerID = Passenger.PassengerID

JOIN

Schedule ON Booking.ScheduleID = Schedule.ScheduleID

WHERE

Booking.BookingTime BETWEEN '2025-04-01 00:00:00' AND '2025-04-05 23:59:59';

You might also like