| Version 2 (modified by , 2 weeks ago) ( diff ) |
|---|
P3 – Application Scenarios for Database Access (SQL)
Description
This phase demonstrates typical application scenarios for accessing the Wedding Planner database using SQL queries. The scenarios reflect real tasks such as creating weddings, managing events and guests, tracking attendance, and handling venue bookings.
Assumptions
- Primary keys are generated by the system (or assigned manually for the examples).
- table_number in Attendance is optional because not all events require seating arrangements.
- Status values are stored as text (e.g., 'planned', 'confirmed', 'cancelled', 'attending').
Scenario 1: Register a new user
Create a new user who will manage weddings in the system.
INSERT INTO User (user_id, first_name, last_name, email, phone_number, gender, birthday) VALUES (10, 'Jana', 'Trpkovska', 'jana@mail.com', '070123456', 'F', '2002-05-10');
Scenario 2: Create a wedding for a user
A user creates a wedding record.
INSERT INTO Wedding (wedding_id, date, budget, notes, user_id) VALUES (1, '2026-06-20', 15000, 'Summer wedding', 10);
Scenario 3: Add events for a wedding
Create wedding-related events such as ceremony and reception.
INSERT INTO Event (event_id, event_type, date, start_time, end_time, status, wedding_id) VALUES (1, 'Ceremony', '2026-06-20', '12:00:00', '13:00:00', 'planned', 1), (2, 'Reception', '2026-06-20', '15:00:00', '21:00:00', 'planned', 1);
Scenario 4: Add guests to a wedding
Add invited guests to the wedding.
INSERT INTO Guest (guest_id, first_name, last_name, email, wedding_id) VALUES (101, 'Ana', 'Petrova', 'ana.p@mail.com', 1), (102, 'Marko', 'Iliev', 'marko.i@mail.com', 1), (103, 'Elena', 'Stojanova', NULL, 1);
Scenario 5: Record attendance for an event
Track guest attendance for a specific event (e.g., reception). table_number is optional.
INSERT INTO Attendance (attendance_id, status, role, table_number, guest_id, event_id) VALUES (1, 'attending', 'guest', 5, 101, 2), (2, 'attending', 'best_man', 1, 102, 2), (3, 'pending', 'guest', NULL, 103, 2);
Scenario 6: List all weddings for a specific user
Retrieve weddings managed by a given user.
SELECT w.wedding_id, w.date, w.budget, w.notes FROM Wedding w WHERE w.user_id = 10 ORDER BY w.date;
Scenario 7: List all events for a wedding
Show all events for a selected wedding.
SELECT e.event_id, e.event_type, e.date, e.start_time, e.end_time, e.status FROM Event e WHERE e.wedding_id = 1 ORDER BY e.date, e.start_time;
Scenario 8: Show guest list for a wedding
Retrieve all guests invited to a wedding.
SELECT g.guest_id, g.first_name, g.last_name, g.email FROM Guest g WHERE g.wedding_id = 1 ORDER BY g.last_name, g.first_name;
Scenario 9: Attendance overview for an event (JOIN)
List guests with their attendance status and seating (if available) for a specific event.
SELECT g.first_name, g.last_name, a.status, a.role, a.table_number FROM Attendance a JOIN Guest g ON a.guest_id = g.guest_id WHERE a.event_id = 2 ORDER BY a.role, g.last_name;
Scenario 10: Update an event status
Example: the ceremony is confirmed.
UPDATE Event SET status = 'confirmed' WHERE event_id = 1;
Scenario 11: Add venue types and venues
Define venue types and store available venues.
INSERT INTO Venue_Type (type_id, type_name) VALUES (1, 'Restaurant'), (2, 'Hotel'), (3, 'Event Hall');
INSERT INTO Venue (venue_id, name, location, city, address, capacity, menu, phone_number, price_per_guest) VALUES (1, 'Royal Hall', 'Center', 'Skopje', 'Main Street 10', 250, 'Standard Menu', '021234567', 25.00), (2, 'Lakeview Hotel', 'Lake Area', 'Ohrid', 'Lake Road 5', 180, NULL, '046111222', 30.00);
Scenario 12: Book a venue for a wedding (Venue_booking)
Create a booking record for a specific venue and time interval.
INSERT INTO Venue_booking (booking_id, date, start_time, end_time, status, price, wedding_id, venue_id) VALUES (1, '2026-06-20', '15:00:00', '21:00:00', 'confirmed', 4500.00, 1, 1);
Scenario 13: Venue booking overview for a wedding (JOIN)
Show booking details including venue name.
SELECT v.name, vb.date, vb.start_time, vb.end_time, vb.status, vb.price FROM Venue_booking vb JOIN Venue v ON vb.venue_id = v.venue_id WHERE vb.wedding_id = 1 ORDER BY vb.date, vb.start_time;
Scenario 14: Count guests per wedding (aggregate query)
Useful for planning and estimating costs.
SELECT w.wedding_id, COUNT(g.guest_id) AS total_guests FROM Wedding w LEFT JOIN Guest g ON w.wedding_id = g.wedding_id GROUP BY w.wedding_id ORDER BY w.wedding_id;
Scenario 15: Estimated venue cost based on guest count
Estimate total cost = price_per_guest * number_of_guests (for a selected venue and wedding).
SELECT w.wedding_id,
v.name AS venue_name,
v.price_per_guest,
COUNT(g.guest_id) AS guest_count,
(v.price_per_guest * COUNT(g.guest_id)) AS estimated_total_cost
FROM Wedding w
JOIN Guest g ON w.wedding_id = g.wedding_id
JOIN Venue v ON v.venue_id = 1
WHERE w.wedding_id = 1
GROUP BY w.wedding_id, v.name, v.price_per_guest;
Conclusion
These SQL scenarios demonstrate how the database supports the main wedding planning operations: user and wedding management, event scheduling, guest tracking, attendance recording, and venue bookings.
