Eliminate
Repeating Groups
- Make a separate table for each set of related attributes, and
give each table a primary key. |
|
2NF
|
Eliminate
Redundant Data
- If an attribute depends on only part of a multi-valued key,
remove it to a separate table. |
3NF
|
Eliminate
Columns Not Dependent On Key
- If attributes do not contribute to a description of the key,
remove them to a separate table. |
BCNF
|
Boyce-Codd
Normal Form
- If there are non-trivial dependencies between candidate key
attributes, separate them out into distinct tables. |
4NF
|
Isolate
Independent Multiple Relationships
- No table may contain two or more 1:n or n:m relationships that
are not directly related. |
5NF
|
Isolate
Semantically Related Multiple Relationships
- There may be practical constrains on information that justify
separating logically related many-to-many relationships. |
ONF
|
Optimal
Normal Form
- a model limited to only simple (elemental) facts, as expressed
in Object Role Model notation. |
DKNF
|
Domain-Key
Normal Form
- a model free from all modification anomalies. |
4. Isolate
Independent Multiple Relationships
No table may contain two or more 1:n or n:m relationships that are
not directly related
This applies
primarily to key-only associative tables, and appears as a ternary
relationship, but has incorrectly merged 2 distinct, independent
relationships.
The way this
situation starts is by a business request list the one shown below.
This could be any 2 M:M relationships from a single entity. For
instance, a member could know many software tools, and a software
tool may be used by many members. Also, a member could have
recommended many books, and a book could be recommended by many
members.
Initial business request
So, to resolve the
two M:M relationships, we know that we should resolve them
separately, and that would give us 4th normal form. But, if we were
to combine them into a single table, it might look right (it is in
3rd normal form) at first. This is shown below, and violates 4th
normal form.
Incorrect solution
To get a picture of
what is wrong, look at some sample data, shown below. The first few
records look right, where Bill knows ERWin and recommends the ERWin
Bible for everyone to read. But something is wrong with Mary and
Steve. Mary didn't recommend a book, and Steve Doesn't know any
software tools. Our solution has forced us to do strange things like
create dummy records in both Book and Software to allow the record in
the association, since it is key only table.
Sample data from incorrect solution
The correct
solution, to cause the model to be in 4th normal form, is to ensure
that all M:M relationships are resolved independently if they are
indeed independent, as shown below.
Correct 4th normal form
NOTE!
This is not to say that ALL ternary associations are invalid. The
above situation made it obvious that Books and Software were
independently linked to Members. If, however, there were distinct
links between all three, such that we would be stating that "Bill
recommends the ERWin Bible as a reference for ERWin", then
separating the relationship into two separate associations would be
incorrect. In that case, we would lose the distinct information about
the 3-way relationship.
There may be practical constrains on information that justify
separating logically related many-to-many relationships.
OK, now lets modify
the original business diagram and add a link between the books and
the software tools, indicating which books deal with which software
tools, as shown below.
Initial business request
This makes sense
after the discussion on Rule 4, and again we may be tempted to
resolve the multiple M:M relationships into a single association,
which would now violate 5th normal form. The ternary association
looks identical to the one shown in the 4th normal form example, and
is also going to have trouble displaying the information correctly.
This time we would have even more trouble because we can't show the
relationships between books and software unless we have a member to
link to, or we have to add our favorite dummy member record to allow
the record in the association table.
Incorrect solution
The solution, as
before, is to ensure that all M:M relationships that are independent
are resolved independently, resulting in the model shown below. Now
information about members and books, members and software, and books
and software are all stored independently, even though they are all
very much semantically related. It is very tempting in many
situations to combine the multiple M:M relationships because they are
so similar. Within complex business discussions, the lines can become
blurred and the correct solution not so obvious.
No comments:
Post a Comment