I’m a beginner, studying Data modelling as part of the course. I’m having trouble understanding Normalisation. How to i improve

database-designnormalization

It was difficult to frame the title given the word limit, so apologies for that.

Currently I'm studying DBA and Data modelling as a part of my ICT Apprenticeship course in a Web Development team. I'm kind of grappling with understanding Normalisation. I understand the concept, of eliminating redundant data, stopping anomalies, using keys and relationships, but in practice I'm struggling. In an effort to help me understand, I've tried to make and normalise a small table of information:

My UNF table:

UNF table

My attempt at normalising the table to 3NF:

My attempt at a table to 3NF
So, questions. I suppose straight away, from an expert, am I doing this right? Or am i completely goofing up? Or am i settling in the middle?

Right now I'm worried that, in this example, the 'Assignments' table has Employee ID as a Foreign Key, meaning Porject ID would have to be the Primary. But that seems counter intuitive seeing as the 'Projects' table should be using Project ID as the primary key. And I'm not quite sure how i should proceed in a situation like this.

Apologies if this question is too rookie/generally not appropriate for the forum. I've had some trouble finding basic resources that cover this material.

Many thanks.

Best Answer

Just looking at an example of a table is a wrong way of normalizing. You should understand the meaning of the fields to properly normalize. For instance you should know if the salary is the same for all the persons that have a certain role, or if it differs from person to person (in the above example we cannot know, since each role has only a person, so that both interpretations are possible).

To know the meaning of the properties you have two routes: either know the meaning of the elements of the domain, through a high level model of it, (for instance through an Entity-Relationship model or a UML model), or to have formalized this knowledge through the definition of the functional dependencies holding between the properties.

In your example there are two points that are not clear (that this that are not clear from the example table): is the salary related to a role or to a person? Is the Est. Time related to a project or to the fact that an employee works for a certain project for that estimated time? If the correct anwer to those question is the first one in both cases, your schema is correct (or normalized). Otherwise you must revise it.