14 original exam-style questions - 6 pages of questions with a full mark scheme - free printable PDF.
Original scenario written for Revision Library.
Elm Grove Music Academy offers one-to-one instrumental lessons and is building a relational database to replace its old spreadsheet system. Questions 1 to 5 take the academy's original, unnormalised booking data and normalise it step by step to Third Normal Form (3NF), and model it with an entity relationship (ER) diagram. Questions 6 to 11 use the resulting normalised database (with sample data added) to write and interpret SQL statements. Questions 12 to 14 look at how the database is used and maintained once it is in service: transaction processing, concurrent access, and the trade-off between normalisation and denormalisation.
| StudentID | StudentName | StudentPhone | Lessons (InstrumentID, InstrumentName, InstructorID, InstructorName, Day, Time, Duration, Cost) |
|---|---|---|---|
| S01 | Priya Chatterjee | 07911 123456 | (I01, Piano, T01, Daniel Osei, Monday, 16:00, 30, 18.00), (I02, Guitar, T02, Fiona Clarke, Wednesday, 17:00, 45, 24.00) |
| S02 | Callum Reid | 07922 654321 | (I01, Piano, T01, Daniel Osei, Tuesday, 15:30, 30, 18.00) |
| StudentID | StudentName | StudentPhone |
|---|---|---|
| S01 | Priya Chatterjee | 07911 123456 |
| S02 | Callum Reid | 07922 654321 |
| S03 | Aisha Bello | 07933 789012 |
| S04 | Jack Whitfield | 07944 345678 |
| S05 | Freya Thomson | 07955 901234 |
| S06 | Zainab Hussain | 07966 567890 |
| InstrumentID | InstrumentName |
|---|---|
| I01 | Piano |
| I02 | Guitar |
| I03 | Violin |
| I04 | Drums |
| InstructorID | InstructorName |
|---|---|
| T01 | Daniel Osei |
| T02 | Fiona Clarke |
| T03 | Marcus Lindqvist |
| StudentID | InstrumentID | InstructorID | Day | Time | Duration | Cost |
|---|---|---|---|---|---|---|
| S01 | I01 | T01 | Monday | 16:00 | 30 | 18.00 |
| S01 | I02 | T02 | Wednesday | 17:00 | 45 | 24.00 |
| S02 | I01 | T01 | Tuesday | 15:30 | 30 | 18.00 |
| S03 | I03 | T03 | Monday | 18:00 | 45 | 22.50 |
| S03 | I02 | T02 | Thursday | 10:00 | 30 | 21.00 |
| S04 | I01 | T01 | Monday | 09:00 | 60 | 32.00 |
| S04 | I04 | T02 | Friday | 16:30 | 30 | 20.00 |
| S05 | I02 | T02 | Wednesday | 09:30 | 30 | 21.00 |
| StudentID | StudentName | StudentPhone | InstrumentID | InstrumentName | InstructorID | InstructorName | Day | Time | Duration | Cost |
|---|---|---|---|---|---|---|---|---|---|---|
| S01 | Priya Chatterjee | 07911 123456 | I01 | Piano | T01 | Daniel Osei | Monday | 16:00 | 30 | 18.00 |
| S01 | Priya Chatterjee | 07911 123456 | I02 | Guitar | T02 | Fiona Clarke | Wednesday | 17:00 | 45 | 24.00 |
| S02 | Callum Reid | 07922 654321 | I01 | Piano | T01 | Daniel Osei | Tuesday | 15:30 | 30 | 18.00 |
SELECT StudentID, InstrumentID, TimeFROM Booking
SELECT Student.StudentName, Booking.CostFROM Booking
SELECT Instructor.InstructorName, COUNT(*) AS NumBookingsFROM Booking
INSERT INTO Student (StudentID, StudentName, StudentPhone)VALUES ('S07', 'Harriet Osborne', '07977 112233');
UPDATE StudentSET StudentPhone = '07900 445566'
DELETE FROM BookingWHERE StudentID = 'S05' AND InstrumentID = 'I02';
SELECT StudentID, StudentNameFROM Student
This checks your answers in your browser, stores nothing on a server and needs no account.