As software engineers, we deal with data abstraction every day. We try to make sense of fuzzy real-world concepts and turn them into structured information, such as variables, functions, classes, and structs, that software can process. Working with data almost always involves storing it somewhere. One common option is a relational database, often called a SQL database. In this post, we will explore the normal forms of relational databases, what they are, and their benefits and drawbacks. We will cover only the first three because they are the most common in modern software engineering.