georgedwilkinson
AWF VIP
- Local time
- Today, 09:14
- Joined
- Mar 4, 2008
- Messages
- 3,856
IMO, the real issue is that nobody has really deployed a solid design pattern for any higher normal forms.
Sure they have.
If it were easy to implement such things, then there would be less of need to question whether we've "over-normalized" or not.
There's no such thing as over-normalized. There are only designs that meet the requirements now and in the future (which is required to be fully normalized) and those that don't. On the other hand, there are those who understand the designs and those who write tons of code to compensate for a poor design.
Because we ultimately are providing a solution to a real business problem, they couldn't give a hoot if the solution was in 4NF, 5NF or even only 2NF as long it works for them.
Interesting thing about normal forms, it is VERY RARE for a database designed to 3NF to not already be solved for 4th, 5th, BCNF, etc. In fact, you almost have to work hard to un-normalize to higher than 3NF and still be in 3NF.
I'm strictly looking from the lens of how much work does it entails *ME* to do. I'm a lazy bum, and I suspect several of programmers are. They would rather have the menial tasks automated and will easily work hard to get it automated somehow. Which is why I said earlier that if 4NF/5NF were braindead to implement, everyone would be doing it.
I'm also incredibly lazy...most of my database work entails getting the table design right. The rest just kinda falls into place. See my note above about 4NF/5NF...they are easy to implement, usually only requiring thought to implement 3NF...it is HARD (not impossible) to NOT implement HNF if you have normalized to 3NF.
I think people get confused over what higher normal forms mean. I have actually had intelligent people "over-design" an address system, fully normalizing the over-designed system. Instead of having an address 1, address 2, City, State, etc., they object oriented it into geographic components with x/y/z coordinates. The geographic component design was totally normalized to Boyce/Codd and beyond (DKNF), but it didn't fit the business requirements. However, it made the designer feel good. It was stupid.
Because the word "normalization" was used and because this particular designer was fond of saying our databases were not properly normalized (that was true), all these smart people thought that normalizing to HNF meant having an unusable design...nope, not true. 5NF is as easy to implement as 3NF, being almost identical (except the hard work you have to go through to un-normalize so it is not 5NF and still maintain 3NF).
You can fully normalize an awful design and you'll still have an unworkable system.