This document provides a tutorial on database normalization through three levels: first, second, and third normal form. It uses the example of an invoice database to demonstrate the normalization process. In first normal form, it separates item details into individual rows. In second normal form, it splits the table into orders and order_items tables to remove partial dependencies on the concatenated primary key. It then further normalizes the order_items table. The goal is to organize the data to avoid duplication and make it easier to maintain integrity and answer queries.