π Online Bookstore Management System (SQL Project)
This project is a complete SQL-based database system built using MySQL Workbench. It demonstrates database design, relationships, data insertion, and analytical SQL queries commonly used in real-world applications.
ποΈ Project Overview
The Online Bookstore Management System manages:
Authors
Books
Customers
Orders
Order Items
The project includes:
β Database Schema β Table Creation Scripts β Sample Data Insertion β Key Analytical Queries β Automatically generated ER Diagram
ποΈ Database Schema (Schema Name: bookstoredb)
The project uses 5 relational tables:
- Authors Column Type AuthorID INT (PK) Name VARCHAR(100) Country VARCHAR(50)
- Books Column Type BookID INT (PK) Title VARCHAR(200) AuthorID INT (FK) Genre VARCHAR(50) Price DECIMAL(10,2) Stock INT
- Customers Column Type CustomerID INT (PK) Name VARCHAR(100) Email VARCHAR(100)
- Orders Column Type OrderID INT (PK) CustomerID INT (FK) OrderDate DATE
- OrderItems Column Type OrderItemID INT (PK) OrderID INT (FK) BookID INT (FK) Quantity INT π οΈ SQL Table Creation Script CREATE DATABASE BookstoreDB; USE BookstoreDB;
CREATE TABLE Authors ( AuthorID INT PRIMARY KEY, Name VARCHAR(100), Country VARCHAR(50) );
CREATE TABLE Books ( BookID INT PRIMARY KEY, Title VARCHAR(200), AuthorID INT, Genre VARCHAR(50), Price DECIMAL(10,2), Stock INT, FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID) );
CREATE TABLE Customers ( CustomerID INT PRIMARY KEY, Name VARCHAR(100), Email VARCHAR(100) );
CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID INT, OrderDate DATE, FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) );
CREATE TABLE OrderItems ( OrderItemID INT PRIMARY KEY, OrderID INT, BookID INT, Quantity INT, FOREIGN KEY (OrderID) REFERENCES Orders(OrderID), FOREIGN KEY (BookID) REFERENCES Books(BookID) );
π§ͺ Sample Data Insertion INSERT INTO Authors VALUES (1, 'Chetan Bhagat', 'India'), (2, 'JK Rowling', 'UK'), (3, 'Yuval Harari', 'Israel');
INSERT INTO Books VALUES (1, 'Harry Potter', 2, 'Fantasy', 499, 50), (2, 'Five Point Someone', 1, 'Drama', 299, 30), (3, 'Sapiens', 3, 'History', 799, 20);
INSERT INTO Customers VALUES (1, 'Gowtham Kumar', 'gowtham@example.com'), (2, 'Rohith', 'rohith@example.com');
INSERT INTO Orders VALUES (1, 1, '2025-11-01'), (2, 2, '2025-11-05');
INSERT INTO OrderItems VALUES (1, 1, 1, 2), (2, 1, 3, 1), (3, 2, 2, 1);
π Important Analytical SQL Queries
-
Total Sales SELECT SUM(Books.Price * OrderItems.Quantity) AS TotalSales FROM OrderItems JOIN Books ON OrderItems.BookID = Books.BookID;
-
Best-Selling Book SELECT Books.Title, SUM(OrderItems.Quantity) AS Sold FROM OrderItems JOIN Books ON OrderItems.BookID = Books.BookID GROUP BY Books.Title ORDER BY Sold DESC LIMIT 1;
-
Customer Purchase History SELECT Customers.Name, Books.Title, OrderItems.Quantity FROM OrderItems JOIN Orders ON OrderItems.OrderID = Orders.OrderID JOIN Customers ON Orders.CustomerID = Customers.CustomerID JOIN Books ON OrderItems.BookID = Books.BookID;
-
Low Stock Books SELECT Title, Stock FROM Books WHERE Stock < 25;
πΊοΈ ER Diagram
The ERD shows all relationships:
Books β Authors (Many-to-One)
Orders β Customers (Many-to-One)
OrderItems β Orders (Many-to-One)
OrderItems β Books (Many-to-One)
You can generate it in MySQL Workbench using: Database β Reverse Engineer
π How to Run This Project
Install MySQL & MySQL Workbench
Create a new schema: BookstoreDB
Paste the table creation script
Insert sample data
Run the analytical queries
Reverse engineer the ER diagram
π Author
Gowtham Kumar Achari ECE Graduate | SQL Developer | Full Stack Aspirant
π Conclusion
This SQL project demonstrates:
β Database design β Table creation β SQL relationships & constraints β Analytical & reporting queries β ER diagram modelling