Library Management System - SQL Script
-- Create database
CREATE DATABASE LibraryDB;
USE LibraryDB;
-- Table for storing book details
CREATE TABLE Books (
BookID INT PRIMARY KEY AUTO_INCREMENT,
Title VARCHAR(255) NOT NULL,
Author VARCHAR(255) NOT NULL,
Publisher VARCHAR(255),
YearPublished YEAR,
ISBN VARCHAR(20) UNIQUE,
Quantity INT NOT NULL CHECK (Quantity >= 0)
);
-- Table for storing member details
CREATE TABLE Members (
MemberID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(255) NOT NULL,
Email VARCHAR(255) UNIQUE,
Phone VARCHAR(15),
Address TEXT,
MembershipDate DATE DEFAULT CURDATE()
);
-- Table for storing library staff details
CREATE TABLE Staff (
StaffID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(255) NOT NULL,
Role VARCHAR(50),
Email VARCHAR(255) UNIQUE,
Phone VARCHAR(15)
);
-- Table for storing book transactions (issue/return)
CREATE TABLE Transactions (
TransactionID INT PRIMARY KEY AUTO_INCREMENT,
MemberID INT,
BookID INT,
IssueDate DATE DEFAULT CURDATE(),
DueDate DATE DEFAULT (DATE_ADD(CURDATE(), INTERVAL 14 DAY)),
ReturnDate DATE,
Fine DECIMAL(5,2) DEFAULT 0,
FOREIGN KEY (MemberID) REFERENCES Members(MemberID),
FOREIGN KEY (BookID) REFERENCES Books(BookID)
);
-- Table for tracking fines
CREATE TABLE Fines (
FineID INT PRIMARY KEY AUTO_INCREMENT,
MemberID INT,
Amount DECIMAL(5,2) NOT NULL,
Status ENUM('Unpaid', 'Paid') DEFAULT 'Unpaid',
FOREIGN KEY (MemberID) REFERENCES Members(MemberID)
);
-- Sample Data Insertion
INSERT INTO Books (Title, Author, Publisher, YearPublished, ISBN, Quantity) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 'Scribner', 1925, '9780743273565', 5),
('1984', 'George Orwell', 'Secker & Warburg', 1949, '9780451524935', 3);
INSERT INTO Members (Name, Email, Phone, Address) VALUES
('John Doe', '
[email protected]', '1234567890', '123 Main St'),
('Jane Smith', '
[email protected]', '9876543210', '456 Oak St');
INSERT INTO Staff (Name, Role, Email, Phone) VALUES
('Alice Brown', 'Librarian', '
[email protected]', '1122334455');
-- Query to Issue a Book
INSERT INTO Transactions (MemberID, BookID) VALUES (1, 1);
-- Query to Return a Book (including fine calculation)
UPDATE Transactions
SET ReturnDate = CURDATE(), Fine =
CASE
WHEN CURDATE() > DueDate THEN DATEDIFF(CURDATE(), DueDate) * 5
ELSE 0
END
WHERE TransactionID = 1;
-- Output Simulation
SELECT * FROM Books;
SELECT * FROM Members;
SELECT * FROM Staff;
SELECT * FROM Transactions;
SELECT * FROM Fines;