Google Cloud Professional Data Engineer — Question 19
You designed a database for patient records as a pilot project to cover a few hundred patients in three clinics. Your design used a single database table to represent all patients and their visits, and you used self-joins to generate reports. The server resource utilization was at 50%. Since then, the scope of the project has expanded. The database must now store 100 times more patient records. You can no longer run the reports, because they either take too long or they encounter errors with insufficient compute resources. How should you adjust the database design?
Answer options
- A. Add capacity (memory and disk space) to the database server by the order of 200.
- B. Shard the tables into smaller ones based on date ranges, and only generate reports with prespecified date ranges.
- C. Normalize the master patient-record table into the patient table and the visits table, and create other necessary tables to avoid self-join.
- D. Partition the table into smaller tables, with one for each clinic. Run queries against the smaller table pairs, and use unions for consolidated reports.
Correct answer: C
Explanation
The correct answer is C, as normalizing the database structure into separate patient and visits tables reduces redundancy and improves performance by avoiding complex self-joins. Option A merely adds resources but does not address the design inefficiencies. Option B, while it proposes a method to manage data, does not resolve the underlying issues of the current table structure. Option D also divides data but does not provide the same level of normalization and efficiency as option C.