Re: [agileDatabases] Is there actual disagreement on what 1NF, 2NF, and 3NF mean?
- 2009/8/7 dananrg <dananrg@...>:
> I've been reading Agile Database Techniques (great book), but I am perplexed
> about Scott's definitions of Normal Forms. I'm not sure I understand them
> myself after all these years, as I see conflicting definitions from
> different authors. I feel I understand them well enough to design great
> tables, but perhaps not as well as I should understand relational theory.
Normal Forms are mathematical concepts that were originally formulated
in mathematical terms. So precision is hard to achieve using natural
language and that's why such definitions vary. Good theory books
("Foundations of Databases" by Abiteboul et al is one of the best of
those) use lots of math to achieve precision but are tough going for
those not used to reading mathematical proofs. Unfortunately many of
the attempts at plain language descriptions of database principles
online or in print are of extremely poor quality. This is not a
criticism of Scott or his book. I haven't read his book so I can't
comment on it. I am saying that it's a good thing to be selective
about what you read.
Two of the very best middle of the road books on database theory
(sound, well written, not too much math) are Fabian Pascal's
"Practical Issues in Database Management" and Chris Date's
"Introduction to Database Systems". The latter has often been used for
college and university courses. The best online source I know is Hugh
Darwen's site (www.thethirdmanifesto.com) and its mailing list. Chris
Date's book the "Relational Database Dictionary" has very concise and
readable explanations of the type you are looking for.
Without going into great details I would also suggest you try to get
Boyce Codd Normal Form and 5NF first. BCNF is the refinement of
functional dependency normalization of which 2NF and 3NF are just
weaker, less useful and arguably harder to explain versions. In fact
BCNF is often mistaken for 3NF! 3NF is only interesting because of
some special cases where it is dependency-preserving and BCNF is not.
5NF is important because it solves join-dependency related problems.
--- On Fri, 8/14/09, Dawn Wolthuis <dwolt@...> wrote:
> They need to learn the valuable lesson that Scott mentioned
> here: How
> do you model data? It depends.
I'd bring that up a level to be "How do you model stuff?" where data is one of many issues included in "stuff".
Scott W. Ambler
Chief Methodologist/Agile, IBM Rational
Agile at Scale blog: http://www.ibm.com/developerworks/blogs/page/ambler
Follow me on Twitter: http://twitter.com/scottwambler
The new Internet Explorer® 8 - Faster, safer, easier. Optimized for Yahoo! Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/