Module Information

The aim of this course is to introduce the fundamental concepts and techniques necessary for the understanding and practice of design and implementation of database applications and of the management of data with relational database management systems. The course covers practical and theoretical aspects of design with entity-relationship model, theory of functional dependencies and normalisation by decomposition in second, third and Boyce-Codd normal forms. The course covers practical and theoretical aspects of programming with SQL data definition and manipulation sublanguages, relational tuple calculus, relational domain calculus and relational algebra.

~ Taken from NUSMods


I took this module in AY20/21 Semester 2.

Module Breakdown

  1. Tutorial Participation 2%
  2. Assignments 10%
  3. Team Project 28%
  4. Midterm Exams 20%
  5. Final Exams 40%


  • CS1231 or MA1100
  • CS2030 or CS2040

Module Details

It is a module that teaches the fundamentals of database systems. It covers the following topics:

  1. Relational Algebra
  2. SQL
  3. Entity-Relationship Data Model
  4. Application Development with SQL
  5. Schema Refinement


Lectures are conducted online synchronously. They are also recorded and uploaded to LumiNUS every week.

The lectures are ok but I felt that it was a bit too fast paced for someone new like me.


Tutorials are face to face and are conducted in a tutorial room. Each tutorial starts from Week 3.

Each student is pre-assigned a question on the tutorial sheet to present in class. The answers for the tutorials must be submitted online (Monday 9am) before the tutorial.

For each of the questions, one of the assigned students will be randomly selected to present the answer in class.

Note: Not all questions will be discussed in the tutorial.

The workload for this section was very high for me as I took a lot of time to understand the concepts which were presented.


There are 2 assignments in this module.

  1. SQL assignment (Due in Week 8)
  2. Schema Refinement (Due in Week 12)

SQL Assignment

We are given a set of questions where we are given what we need to output. We are required to write the answer that will result in the output using relational algebra expression.

For example, we are given the following question:

Find all engineers who spend more than 10 hours per week on some project.
The schema of the output table is (eid).
Answer: project{eid}(select{hours>10}(works))

Midterm Exams

Midterms was held on 26th March 2021 (Friday) from 12pm to 2pm. It is closed book with 1 A4 cheat sheet and conducted face to face using Examplify.

What was weird about the midterms was that there was no partial marking, meaning that if you miss out a small part of the question, you will get 0 marks for that question.

We were also given opportunities to correct our syntax errors and resubmit our answers after the exams. However, if the changes were too big, our marks will be deducted accordingly.


Finals was held on 30th April 2021 (Friday) from 9am to 11am. It is closed book with 1 A4 cheat sheet and conducted face to face using Examplify.

Similar to the midterms, there was no partial marking.


The goal of the project is to develop a database application using PostgreSQL. We are to complete the application with ONLY SQL and PL/pgSQL.

Each project team consists of 4 members each which we can choose. We must decide on our teams at the end of week 3.

If we are unable to form teams, we will be assigned to a team by the professors.

Here are the deadlines for the project:

  1. Project Team Registration (Week 3)
  2. Submission of ER Data Model Design (Week 6)
  3. Submission of Project Report & Code (Week 12)
  4. Project Evaluation (Week 13)

I felt that I put in way too much time into the project compared to what they expected us to put in. The project evaluation was not as in depth as what I would have thought.

We over-engineered it with a testing framework to check all of our functions and fix the functions while we were at it.

My Team’s Project: Project URL


Workload (8/10)

The workload for this module was very high which is typical for a 2k CS module. There were a lot of assignments and tutorials to do every week. On top of grasping the new concepts, we also had to do a lot of practice to get good at it.

Organization (7/10)

I feel that the module is well organized in terms of content. Each topic is related to the previous topic and the lecture notes are very well written.

However, the same cannot be said for the midterms and finals. The midterms and finals were very poorly organized. The partial marking scheme resulted in many students scoring around the same grade (1-2 marks difference between large percentiles).

I feel that it is not a suitable assessment of our understanding of the content.

Enjoyment (3/10)

Due to the large workload, I did not enjoy this module very much. I felt that the midterms and finals were very stressful due to the administration of the exams.

Usefulness (8/10)

I feel that this module is very useful for anyone who wants to be a software engineer or a data scientist. It teaches you the fundamentals of database systems which is very important in the industry.

Overall (8/10)

Due to the COVID-19 pandemic, I feel that the module was not conducted very well.

  • Expected Grade: B
  • Actual Grade: B
  1. CS2102 NUSMods


  1. Database Management Systems
  2. Database System Concepts Seventh Edition
  3. Database Systems: The Complete Book


  1. Hanming’s Cheatsheet
  2. Matt’s Doc


  1. My Team’s Project
  2. Another CS2102 Project

Other Reviews

  1. Zhongjun’s Review
  2. Justin’s Review
  3. Zanblade’s Review