Skip to content

Pitch Booking is a leading online Sports Events ticket booking platform that offers a dynamic online platform catering to sports enthusiasts, providing comprehensive coverage of upcoming events, live scores, news updates, and analysis across various sports.

Notifications You must be signed in to change notification settings

rushisuthar21/Pitch-Booking

Repository files navigation

Pitch Booking – Database Design & SQL Project

πŸ“Œ Course Information

  • Course: CSD 2206 – Database Design and SQL
  • Term: Winter 2024
  • Instructor: Mehrnoush Ashrafi

🏒 Project Overview

Pitch Booking is an online sports event ticket booking platform designed to manage:

  • Customers and ticket bookings
  • Sports games and venues
  • Payments and refunds
  • Players, sponsors, and managers
  • Customer feedback

This project focuses on database design, normalization, relationships, constraints, and SQL implementation.


🎟️ Product

Cricket Match Ticket

Attributes

  • Ticket ID
  • Customer Name
  • Event Description
  • Seat Number
  • Ticket Type
  • Price
  • Booking Status

πŸ”— Entity Relationship Rules

  • A Customer can book multiple tickets
  • A Ticket belongs to one venue and one game
  • Each Payment is associated with one ticket
  • A Refund may exist for a ticket
  • A Venue is managed by one manager
  • A Game includes players and sponsors

prj_sql

MtoM

🧱 Relational Schema

CUSTOMER(customer_id, first_name, last_name, email, password, gender, phone, address, date_of_birth)

TICKET(ticket_id, booking_date, status, seat_num, venue_id, payment_id, ticket_name, price, description)

CUSTOMER_TICKET(customer_id, ticket_id, status, quantity)

PAYMENT(payment_id, payment_type, payment_date, price)

BOOKING_REFUND(refund_id, ticket_id, refund_status, refund_amount)

FEEDBACK(feedback_id, rating, comments, customer_id)

VENUE(venue_id, venue_name, address, capacity, amenities, open_time, close_time, phone_num, game_id)

GAME(game_id, game_name, game_description, player_id, sponsor_id)

PLAYER(player_id, first_name, last_name, age, gender, date_of_birth)

SPONSOR(sponsor_id, sponsor_name, email, phone_number)

MANAGER(manager_id, first_name, last_name, email, phone, date_of_birth, venue_id)


βš™οΈ Database Creation

CREATE DATABASE SportEventbooking;
USE SportEventbooking;
πŸ—οΈ Table Creation (DDL)
CREATE TABLE CUSTOMER (
    customer_id INT NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(50),
    password VARCHAR(50),
    gender VARCHAR(10),
    phone VARCHAR(15),
    address VARCHAR(30),
    date_of_birth DATE
);

CREATE TABLE PAYMENT (
    payment_id INT NOT NULL,
    payment_type VARCHAR(50),
    payment_date DATE,
    price DECIMAL(5,2)
);

CREATE TABLE SPONSOR (
    sponsor_id INT NOT NULL,
    sponsor_name VARCHAR(50),
    email VARCHAR(50),
    phone_number VARCHAR(20)
);

CREATE TABLE PLAYER (
    player_id INT NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    age INT,
    gender VARCHAR(10),
    date_of_birth DATE
);

CREATE TABLE GAME (
    game_id INT NOT NULL,
    game_name VARCHAR(50),
    game_description TEXT,
    player_id INT,
    sponsor_id INT
);

CREATE TABLE VENUE (
    venue_id INT NOT NULL,
    venue_name VARCHAR(50),
    address VARCHAR(100),
    capacity INT,
    amenities VARCHAR(20),
    open_time TIME,
    close_time TIME,
    phone_num VARCHAR(20),
    game_id INT
);

CREATE TABLE MANAGER (
    manager_id INT IDENTITY(1,1) NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(50),
    phone VARCHAR(20),
    date_of_birth DATE,
    venue_id INT
);

CREATE TABLE TICKET (
    ticket_id INT NOT NULL,
    booking_date DATE,
    status VARCHAR(20),
    seat_num INT,
    venue_id INT,
    payment_id INT,
    ticket_name VARCHAR(50),
    price DECIMAL(5,2),
    description VARCHAR(80)
);

CREATE TABLE CUSTOMER_TICKET (
    customer_id INT NOT NULL,
    ticket_id INT NOT NULL,
    status VARCHAR(30),
    quantity INT,
    PRIMARY KEY (customer_id, ticket_id)
);

CREATE TABLE FEEDBACK (
    feedback_id INT NOT NULL,
    rating INT,
    comments VARCHAR(50),
    customer_id INT
);

CREATE TABLE BOOKING_REFUND (
    refund_id INT NOT NULL,
    ticket_id INT,
    refund_status VARCHAR(20),
    refund_amount DECIMAL(5,2)
);
πŸ” Constraints
ALTER TABLE CUSTOMER ADD CONSTRAINT customer_pk PRIMARY KEY(customer_id);
ALTER TABLE CUSTOMER ADD CONSTRAINT unique_email UNIQUE(email);
ALTER TABLE CUSTOMER ADD CONSTRAINT check_gender CHECK (gender IN ('Male','Female'));
ALTER TABLE CUSTOMER ADD CONSTRAINT check_dob CHECK (date_of_birth < GETDATE());

ALTER TABLE PAYMENT ADD CONSTRAINT payment_pk PRIMARY KEY(payment_id);
ALTER TABLE PAYMENT ADD CONSTRAINT chk_payment_type 
CHECK (payment_type IN ('Credit Card','Debit Card','Cash','Online Payment'));

ALTER TABLE PLAYER ADD CONSTRAINT player_pk PRIMARY KEY(player_id);
ALTER TABLE PLAYER ADD CONSTRAINT chk_age CHECK (age BETWEEN 18 AND 65);

ALTER TABLE SPONSOR ADD CONSTRAINT sponsor_pk PRIMARY KEY(sponsor_id);
ALTER TABLE SPONSOR ADD CONSTRAINT unique_sponsor_email UNIQUE(email);

ALTER TABLE GAME ADD CONSTRAINT game_pk PRIMARY KEY(game_id);
ALTER TABLE GAME ADD FOREIGN KEY (player_id) REFERENCES PLAYER(player_id);
ALTER TABLE GAME ADD FOREIGN KEY (sponsor_id) REFERENCES SPONSOR(sponsor_id);

ALTER TABLE VENUE ADD CONSTRAINT venue_pk PRIMARY KEY(venue_id);
ALTER TABLE VENUE ADD FOREIGN KEY (game_id) REFERENCES GAME(game_id);

ALTER TABLE MANAGER ADD CONSTRAINT manager_pk PRIMARY KEY(manager_id);
ALTER TABLE MANAGER ADD FOREIGN KEY (venue_id) REFERENCES VENUE(venue_id);

ALTER TABLE TICKET ADD CONSTRAINT ticket_pk PRIMARY KEY(ticket_id);
ALTER TABLE TICKET ADD FOREIGN KEY (venue_id) REFERENCES VENUE(venue_id);
ALTER TABLE TICKET ADD FOREIGN KEY (payment_id) REFERENCES PAYMENT(payment_id);
ALTER TABLE TICKET ADD CONSTRAINT chk_price CHECK (price > 0);

ALTER TABLE CUSTOMER_TICKET ADD FOREIGN KEY (customer_id) REFERENCES CUSTOMER(customer_id);
ALTER TABLE CUSTOMER_TICKET ADD FOREIGN KEY (ticket_id) REFERENCES TICKET(ticket_id);
πŸ”’ Sequence
CREATE SEQUENCE Seat_Num_Sequence
START WITH 101
INCREMENT BY 1
MAXVALUE 1001
CYCLE;
πŸ“₯ Sample Insert Queries
INSERT INTO CUSTOMER VALUES
(1,'Rushi','Suthar','abc@xyz.com','123456','Male','4168906307','Toronto','2002-06-21');

INSERT INTO PAYMENT VALUES
(1,'Credit Card','2024-04-15',1500);

INSERT INTO SPONSOR VALUES
(1,'Sponsor A','sponsor_a@example.com','1234567890');

INSERT INTO PLAYER VALUES
(1,'John','Doe',25,'Male','1999-05-15');

INSERT INTO GAME VALUES
(1,'Cricket','Cricket match',1,1);

INSERT INTO VENUE VALUES
(1,'Toronto Sports Ground','10 Weston St',1000,'WiFi','08:00','20:00','1234567890',1);

INSERT INTO TICKET VALUES
(1,'2024-04-20','Booked',NEXT VALUE FOR Seat_Num_Sequence,1,1,'VIP Ticket',1500,'Premium seating');

INSERT INTO CUSTOMER_TICKET VALUES
(1,1,'Confirmed',2);
πŸ“Š Sample Queries (Joins, Aggregates, Subqueries)
-- Customers with booked tickets
SELECT c.first_name, t.ticket_name
FROM CUSTOMER c
JOIN CUSTOMER_TICKET ct ON c.customer_id = ct.customer_id
JOIN TICKET t ON ct.ticket_id = t.ticket_id;

-- Total revenue
SELECT SUM(price) AS Total_Revenue FROM PAYMENT;

-- Tickets per venue
SELECT venue_id, COUNT(ticket_id) AS Total_Tickets
FROM TICKET
GROUP BY venue_id
HAVING COUNT(ticket_id) > 1;

-- Customers who gave feedback
SELECT DISTINCT c.first_name
FROM CUSTOMER c
WHERE c.customer_id IN (SELECT customer_id FROM FEEDBACK);

-----------------------------------------------------------------
## βœ… Conclusion
This project demonstrates:

Complete database lifecycle

Strong normalization

Real-world business rules

Advanced SQL usage with constraints, joins, and aggregates
---

About

Pitch Booking is a leading online Sports Events ticket booking platform that offers a dynamic online platform catering to sports enthusiasts, providing comprehensive coverage of upcoming events, live scores, news updates, and analysis across various sports.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published