create,insert,ansQuery
create,insert,ansQuery
--creating tables:
-- 1. Item Table
CREATE TABLE Item (itemNo INT PRIMARY KEY, title VARCHAR(255), publisher
VARCHAR(255), year INT, description TEXT, notes TEXT, subject VARCHAR(255));
-- 2. ItemAuthor Table
CREATE TABLE ItemAuthor (itemNo INT, author VARCHAR(255), PRIMARY KEY (itemNo,
author), FOREIGN KEY (itemNo) REFERENCES Item(itemNo) ON DELETE CASCADE ON UPDATE
CASCADE);
-- 3. Book Table
CREATE TABLE Book (itemNo INT PRIMARY KEY, edition VARCHAR(50), contents TEXT,
summary TEXT, isbn VARCHAR(20), FOREIGN KEY (itemNo) REFERENCES Item(itemNo) ON
DELETE CASCADE ON UPDATE CASCADE);
-- 4. Journal Table
CREATE TABLE Journal (itemNo INT PRIMARY KEY, frequency VARCHAR(50), abbrTitle
VARCHAR(100), mainSeries VARCHAR(255), issn VARCHAR(20), FOREIGN KEY (itemNo)
REFERENCES Item(itemNo) ON DELETE CASCADE ON UPDATE CASCADE);
-- 5. OnlineDatabase Table
CREATE TABLE OnlineDatabase (itemNo INT PRIMARY KEY, contents TEXT, releaseDate
DATE, FOREIGN KEY (itemNo) REFERENCES Item(itemNo) ON DELETE CASCADE ON UPDATE
CASCADE);
-- 6. Copy Table
CREATE TABLE Copy (accessionNo INT PRIMARY KEY, dtAdded DATE, cost DECIMAL(10, 2));
-- 7. PhysicalCopy Table (Specialization of Copy)
CREATE TABLE PhysicalCopy (accessionNo INT PRIMARY KEY, barcode VARCHAR(100),
status VARCHAR(50), collectionId INT, FOREIGN KEY (accessionNo) REFERENCES
Copy(accessionNo) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (collectionId)
REFERENCES Collection(collectionId) ON DELETE SET NULL ON UPDATE CASCADE);
-- 8. DigitalCopy Table (Specialization of Copy)
CREATE TABLE DigitalCopy (accessionNo INT PRIMARY KEY, url VARCHAR(255), format
VARCHAR(50), accessPeriod INT, size INT, FOREIGN KEY (accessionNo) REFERENCES
Copy(accessionNo) ON DELETE CASCADE ON UPDATE CASCADE);
-- 9. Collection Table
CREATE TABLE Collection (collectionId INT PRIMARY KEY, physicalLocation
VARCHAR(255), campus VARCHAR(100), building VARCHAR(100), room VARCHAR(50), shelf
VARCHAR(50));
-- 10. Member Table
CREATE TABLE Member (memberID INT PRIMARY KEY, PIN VARCHAR(20), name VARCHAR(255),
dateOfBirth DATE, homeAddress TEXT, email VARCHAR(100), dtJoined DATE,
dtMemberExpiry DATE, status VARCHAR(50), notes TEXT, memberType varchar(33));
-- 11. MemberPhone Table
CREATE TABLE MemberPhone (memberID INT, phone VARCHAR(20), PRIMARY KEY (memberID,
phone), FOREIGN KEY (memberID) REFERENCES Member(memberID) ON DELETE CASCADE ON
UPDATE CASCADE);
-- 12. MemberType Table
CREATE TABLE MemberType (typeId INT PRIMARY KEY, type VARCHAR(50), description
TEXT, notes TEXT,memberType INT );
-- 13. Privilege Table
CREATE TABLE Privilege (privilegeId INT PRIMARY KEY, name VARCHAR(100), description
TEXT, loanPeriod INT, maxRenewals INT, maxItems INT, maxHolds INT);
-- 14. MemberTypePrivilege Table
CREATE TABLE MemberTypePrivilege (typeId INT, privilegeId INT, PRIMARY KEY (typeId,
privilegeId), FOREIGN KEY (typeId) REFERENCES MemberType(typeId) ON DELETE CASCADE
ON UPDATE CASCADE, FOREIGN KEY (privilegeId) REFERENCES Privilege(privilegeId) ON
DELETE CASCADE ON UPDATE CASCADE);
-- 15. Loan Table
CREATE TABLE Loan (loanID INT PRIMARY KEY, dtLoaned DATE, dtDue DATE, dtReturned
DATE, numOfRenewals INT, status VARCHAR(50), memberID INT, accessionNo INT, FOREIGN
KEY (memberID) REFERENCES Member(memberID) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (accessionNo) REFERENCES Copy(accessionNo) ON DELETE CASCADE ON UPDATE
CASCADE);
-- 16. HoldRequest Table
CREATE TABLE HoldRequest (holdNo INT PRIMARY KEY, dtTimeRequested DATE,
dtTimeInformed DATE, status VARCHAR(50), comments TEXT, memberID INT, accessionNo
INT, FOREIGN KEY (memberID) REFERENCES Member(memberID) ON DELETE CASCADE ON UPDATE
CASCADE, FOREIGN KEY (accessionNo) REFERENCES Copy(accessionNo) ON DELETE CASCADE
ON UPDATE CASCADE);
-- 17. NewItemRequest Table
CREATE TABLE NewItemRequest (requestId INT PRIMARY KEY, typeOfItem VARCHAR(50),
title VARCHAR(255), publisher VARCHAR(255), edition VARCHAR(50), description TEXT,
reason TEXT, memberID INT, date DATE ,FOREIGN KEY (memberID) REFERENCES
Member(memberID) ON DELETE CASCADE ON UPDATE CASCADE);
--18 NewItemAuthor Table :
CREATE TABLE NewItemAuthor (requestId INT, author VARCHAR(255), PRIMARY KEY
(requestId, author), FOREIGN KEY (requestId) REFERENCES NewItemRequest(requestId)
ON DELETE CASCADE ON UPDATE CASCADE);
--insertion:--
-- 1. Item Table
INSERT INTO Item (itemNo, title, publisher, year, description, notes, subject)
VALUES
('ITM001', 'Database Design', 'Pearson', 2021, 'Comprehensive database guide',
'Best seller', 'Computer Science'),
('ITM002', 'Modern Art History', 'Penguin', 2023, 'Survey of 20th century art',
'Color plates included', 'Art'),
('ITM003', 'Principles of Economics', 'Macmillan', 2022, 'Micro and macro
economics', 'Used in Econ 101', 'Economics'),
('ITM004', 'Human Anatomy', 'Elsevier', 2024, 'Detailed anatomical reference',
'Color atlas', 'Medicine'),
('ITM005', 'World Literature Anthology', 'Norton', 2023, 'Global literary
collection', 'Multilingual edition', 'Literature');
-- 2. Book Table
INSERT INTO Book (itemNo, edition, contents, summary, isbn) VALUES
('ITM001', '3rd', 'Database systems, SQL', 'DBMS theory and practice', '978-
1234567890'),
('ITM002', '5th', 'Art movements, artists', 'Modern art survey', '978-2345678901'),
('ITM003', '7th', 'Supply/demand, markets', 'Economics fundamentals', '978-
3456789012'),
('ITM004', '3rd', 'Body systems, organs', 'Medical reference', '978-4567890123'),
('ITM005', '2nd', 'Novels, poems, plays', 'Global literature', '978-5678901234');
-- 3. Journal Table
INSERT INTO Journal (itemNo, frequency, abbrTitle, mainSeries, issn) VALUES
('ITM001', 'Monthly', 'DBMS Review', 'Tech Journals', '1234-5678'),
('ITM003', 'Quarterly', 'Econ Today', 'Business Series', '2345-6789'),
('ITM004', 'Bi-Monthly', 'Med Insights', 'Health Journals', '3456-7890');
-- 4. OnlineDatabase Table
INSERT INTO OnlineDatabase (itemNo, contents, releaseDate) VALUES
('ITM002', 'Art collections worldwide', '2025-03-15'),
('ITM005', 'Literary works database', '2025-04-20');
-- 5. Copy Table
INSERT INTO Copy (accessionNo, dtAdded, cost) VALUES
('CPY1001', '2025-01-10', 50.00),
('CPY1002', '2025-02-15', 45.00),
('CPY1003', '2025-01-20', 55.00),
('CPY1004', '2025-03-01', 60.00),
('CPY1005', '2025-02-05', 40.00);
-- 6. Collection Table
INSERT INTO Collection (collectionId, physicalLocation, campus, building, room,
shelf) VALUES
('COL001', 'Floor 1, Section A', 'Main', 'Central Library', '101', 'A1'),
('COL002', 'Floor 2, Section B', 'Science', 'Science Wing', '205', 'B3'),
('COL003', 'Floor 1, Section C', 'Arts', 'Humanities Bldg', '110', 'C2');
-- 7. PhysicalCopy Table
INSERT INTO PhysicalCopy (accessionNo, barcode, status, collectionId) VALUES
('CPY1001', 'BC101', 'Available', 'COL001'),
('CPY1002', 'BC102', 'Checked Out', 'COL002'),
('CPY1003', 'BC103', 'Available', 'COL003');
-- 8. DigitalCopy Table
INSERT INTO DigitalCopy (accessionNo, url, format, accessPeriod, size) VALUES
('CPY1004', 'http://library.com/lit', 'PDF', 30, 8),
('CPY1005', 'http://library.com/art', 'EPUB', 60, 10);
-- 9. MemberType Table
INSERT INTO MemberType (typeId, type, description, notes) VALUES
('MTP001', 'Student', 'Degree-seeking students', 'Standard privileges'),
('MTP002', 'Faculty', 'Teaching staff', 'Extended privileges'),
('MTP003', 'Staff', 'Administrative staff', 'Basic privileges'),
('MTP004', 'Alumni', 'Graduated students', 'Limited privileges'),
('MTP005', 'Visitor', 'Guest researchers', 'Restricted access');
ques ans:
--q3:
SELECT
M.memberID,
M.name AS MemberName,
MP.phone AS PhoneNumber,
COUNT(HR.holdNo) AS TotalHoldRequests2025
FROM
Member M
LEFT JOIN
MemberPhone MP ON M.memberID = MP.memberID
LEFT JOIN
HoldRequest HR ON M.memberID = HR.memberID
AND HR.dtTimeRequested >= '2025-01-01'
AND HR.dtTimeRequested < '2026-01-01'
WHERE
M.memberID = 'MEM004' -- Replace with desired member ID
GROUP BY
M.memberID, M.name, MP.phone;
--q4:
SELECT DISTINCT
M.name AS MemberName,
PC.barcode AS BorrowedBookBarcode
FROM
Member AS M
JOIN
Loan AS L ON M.memberID = L.memberID
JOIN
Copy AS C ON L.accessionNo = C.accessionNo
JOIN
PhysicalCopy AS PC ON C.accessionNo = PC.accessionNo
JOIN
Item AS I ON (SELECT itemNo FROM Loan WHERE accessionNo = C.accessionNo LIMIT
1) = I.itemNo
WHERE
STRFTIME('%Y', L.dtLoaned) = '2025'
AND I.title LIKE 'Database Design';
--q1:
SELECT
m.name AS memberName,
mp.phone AS mobilePhone,
nir.title AS requestedItemTitle
FROM NewItemRequest nir
JOIN Member m ON nir.memberID = m.memberID
JOIN MemberPhone mp ON m.memberID = mp.memberID
WHERE m.name = 'Dr. Smith' AND strftime('%Y', nir.date) = '2025';
--q2:
SELECT
M.name AS MemberName,
P.maxItems AS MaximumBorrowAllowed,
'COL001' AS CollectionID
FROM
Member M
JOIN MemberType MT ON M.memberType = MT.typeId
JOIN MemberTypePrivilege MTP ON MT.typeId = MTP.typeId
JOIN Privilege P ON MTP.privilegeId = P.privilegeId
WHERE
M.name = 'David Wilson';