I have decided to start writing detailed reviews about all of the classes I take in hopes that they will be helpful to other students trying to decide what classes to sign up for. I start by reviewing CS 4400 – Intro to Database Systems, which I took Fall 2011 with Professor Shamkant Navathe. This class is very standardized, so this information should be applicable across different professors and sections.
If you are a computer science major, this is an InfoInternetworks thread pick under the “Introduction to Information Management” category. If one of your threads is InfoInternetworks, then you will have to take 2/3 of the classes in this category. I figured that all classes in this category (Databases, Information Security, and Networking) seemed important, so I planned to take all three. I now realize that CS 4400 would be the class to skip.
I’m not implying that you should skip this class because databases are not important. They are very important to application development, and I strongly encourage every CS major to become comfortable with them. At the same time, there is a lot to learn as a CS major, and you need to decide what is worth learning on your own and what is worth paying tuition to learn in a class. I found this class to be extremely dry and a bad use of 3 credit hours. CS 4400 is geared towards Industrial Engineering majors since it is a required class for them and optional for CS. Maybe the class could be more useful if they had a class specifically for CS majors that was more focused on building things. For the time being, my recommendation for any CS major would be to get a good book on database theory and SQL and practice by making your own database driven applications. I bet you can get more from 2 weeks of this than a whole semester of CS 4400.
If I have not scared you off yet, I will go into detail about the class itself. One perk is that it is a pretty easy class. Your only grades are 4 quizzes and a group project (broken up into 3 phases). Before you sign up for it as a GPA boost, beware that it is also insanely boring. If you are anything like me, the boring factor will always outweigh how easy the class is as an indication of how well you will do (interesting/hard classes = A, boring/easy classes = B).
You will take 4 multiple choice quizzes with an optional 5th quiz that can replace your lowest grade.
- Quiz 1: DB Concepts & ER/EER Model
Example Question: The three schema architecture supports which important characteristic of the database approach?
(a) Natural language interfaces
(b) A single view of data
(c) Online transaction processing
(d) Program data independence
- Quiz 2: Relational Algebra & Calculus, and QBE
Example Question: Which of the relational algebra queries is equivalent to the following: σCustID = 11(σUnitPrice < 10 (σQty > 2 (Order * Item * OrderItem)))?
(a) σCustID = 11(Order) * σUnitPrice < 10 (Item) * σQty > 2 (OrderItem)
(b) σCustID = 11 AND UnitPrice < 10 AND Qty > 2 (Order * Item * OrderItem)
(c) Both (a) and (b)
(d) None of the above
- Quiz 3: SQL and ER to Relational Mapping
Example Question: How many tuples will be returned by the following SQL query: SELECT * FROM (CustomerAccount NATURAL RIGHT OUTER JOIN TransactionHistory)?
- Quiz 4: Normalization and Physical Design
Example Question: Relation R(A, B, C, D) with functional dependencies ABC → D, D → A has candidate keys ABC and BCD. The decomposition into R1(A, D) and R2(B, C, D) cannot preserve the dependency ABC → D. So there is no dependency preserving and lossless BCNF decomposition possible for R.
- Quiz 5: Cumulative (Optional)
You are given a specification of a database driven application that you work on throughout the semester, turning something in for each phase.
- Phase I: Analysis & Specification (Information Flow Diagram, EER Diagram, Additional Constraints)
- Phase II: Design (Updates, Relational Model Diagram, SQL create table statements, SQL statements for each task)
- Phase III: Implementation and Testing (choice between lightweight and heavyweight option)
This semester we were asked to build an Emergency Management Resource System. I have attatched the project description pdf. You work in groups of up to 4 people or individually on the project. Most of the IE majors will try to recruit CS majors to their group to help with the coding. Most CS majors that do this end up coding the front-end of the heavyweight project while the rest of the group does the database stuff. You can get away with doing less work this way, but you don’t really learn anything new. Overall, I think the workload is small enough for a CS major to do the whole project individually. I would not recommend working in a group unless you know you have dependable group members (otherwise, you are just making more work for yourself).
For phase III, you have the choice between a lightweight and heavyweight option. All you have to do for the lightweight option is demonstrate to your TA that you have working SQL statements for each task in the application (with something like phpMyAdmin). The heavyweight project includes a full implementation of the application, front-end and back-end. You can build your application using any language. If you do the heavyweight project, you do not have to take the final exam. I chose to do the heavyweight option (probably along with every other CS major). I have to admit that coding the final project in the last weekend of the semester was the only time that I felt like like I was really learning in this class. I find that it is much easier to learn the information when you are actually building something rather than reading a text book to study for a multiple choice quiz.
Looking back, there are many worthwhile CS classes at tech that I wish I took instead of CS 4400, but this class was not a horrible experience either. Obviously if you want to specialize in databases and prefer learning by reading from a text book, you may actually enjoy this class. I hope that I have included enough detail so you can make a more informed decision whether or not you want to take it.
TL;DR CS 4400 is not hard but very dry. You probably shouldn’t take it if you don’t have to. You may be better off learning it on your own.