The Duplicate Membership Card
A community gym keeps a flat-file list of members in a single spreadsheet. Each row holds the member's name, phone, membership type, and the name of their personal trainer. Two members share the same trainer, so the trainer's phone number appears twice. When the trainer changes her number, a volunteer updates one row and misses the other. Later, a mail merge sends renewal reminders and one member receives two letters. The coordinator wants to move the data into a relational database and asks whether to keep everything in one table or split the trainer details into a separate table.
1. Explain the data problem in this list and why splitting trainer details into a separate table would prevent the missed update.
Read the worked answer
The list suffers from redundancy: the trainer's phone is stored once per member row, so the same fact is repeated. Repeated facts create an update anomaly - changing the number in one row leaves another row stale, so the database holds two conflicting versions of one fact. Splitting into a Trainer table (one row per trainer, with the phone stored once) and a Member table that references the trainer by an ID means the phone exists in exactly one place. An update touches one row and every member sees the corrected value. This is the core argument for normalisation: store each fact once, and reference it elsewhere.
2. The duplicate renewal letters were blamed on the database. Is that fair? What should be checked first?
Read the worked answer
Not fair on the evidence given. The letters came from a mail merge, which reads whatever rows exist. Two letters means either two member rows existed (the redundancy problem) or the merge query was not restricted to one row per member. The correct first step is to inspect the source data and the query feeding the merge: count rows per member, look for duplicate member records, and check whether the query uses a DISTINCT or grouping. Blaming the database skips the diagnosis. Fix the data and the query, then re-test the merge output before assuming the storage design is at fault.