I teach normalization in my access courses and break them down in several ways.
After discussing precursors with storyboard or planning a database, I then delve into normalization. I explain the following rules:
Each field should contain the least significant value:
I write the name field on the board, and then put the name and surname in it, like Bill Lemberg. Then we ask students and ask them what we will have problems with when the first name and surname are in the same field. As an example, I use my name, which is Jim Richards. If the students do not lead me along the road, I hold them by the hand and take them with me. :) I tell them that my name is a difficult name for some, because I have what some people will consider the first 2 names, and some call me Richard. If you tried to find your last name, it will be more difficult for an ordinary person (without wildcards), because my last name is buried at the end of the field. I also tell them that they will have problems with conveniently sorting the field by last name, because again my last name is buried at the end.
Then I let them know that relevance is based on an audience that will also use the database. We, in our work, will not need a separate field for the apartment number or number if we store the addresses of people, but shipping companies such as UPS or FEDEX may need this so that they can easily pull out the apartment or package where they need to go when they are on the road and work from delivery to delivery. So it doesn’t make sense to us, but it definitely matters to them.
Avoidance of spaces:
I use an analogy to explain to them why they should avoid spaces. I tell them that Access and most databases do not store spaces, such as Excel. Excel doesn’t care if you don’t type anything in the cell and increase the file size, but Access will save this space until this point in time when you really will use this field. Therefore, even if it is empty, it will still use the space and explain to them that it also slows down their search. The analogy I use is empty shoe boxes in the closet. If you have shoe boxes in the closet and you are looking for a pair of boots, you will need to open and look at each box for a pair of boots. If there are empty shoe boxes, you just lose space in the closet and also spend time when you need to look through them for that particular shoe.
Data Redundancy Prevention:
I show them a table with many duplicate values ​​for customer information, and then tell them that we want to avoid duplicates, because I have sausage fingers and will be wrong in the values ​​if I have to enter the same thing over and over again . This fat-finger data will cause my queries to not find the correct data. Instead, we split the data into a separate table and create relationships using the primary and foreign key fields. Thus, we save space because we do not type a name, address, etc. Several times, but instead, just use the client identification number in the field for the client. Then we will discuss drop-down lists / combined fields / search lists or everything that Microsoft wants to name later. :) As a user, you will not want to search and dial a customer number every time in this customer field, so we will configure a drop-down list that will give you a list of customers where you can select their name and it will fill in the customer ID for you. This will be a one-to-many relationship, while 1 customer will have many different orders.
Avoiding duplicate field groups:
I demonstrate this when I talk about many-to-many relationships. First, I draw 2 tables, 1 which will contain information about employees and 1 that will contain information about the project. Tables are arranged similarly to this.
(Table1) tblEmployees * EmployeeID First Last (Other Fields)…. Project1 Project2 Project3 Etc. ********************************** (Table2) tblProjects * ProjectNum ProjectName StartDate EndDate …..
I explain to them that this will not be a good way to establish relations between the employee and all the projects on which they work. Firstly, if we have a new employee, then they will not have any projects, so we will waste all these fields, and secondly, if the employee has been here for a long time, then they could work on 300 projects, so we would including 300 project fields. Those people who are new and have only 1 project will have 299 projects in vain. This design is also erroneous because I have to search in each of the project fields to find all the people who worked on a particular project, because this project number can be in any of the project fields.
I reviewed quite a few basic concepts. Let me know if you have other questions or need help explaining / breaking down in plain English. The wiki page did not read like plain English, and for some it can be a daunting task.