Reading my sentence again, I think I should qualify it a bit more. It is easy enough to normalize up to 5NF, but to actually implement, I've yet to see a simple interface where it was trivial to set up. For example, Access's subform control does wonders in making it simple to manage one-many relationship, but when we start to move to many-many, things get a bit more complicated. If there are such design patterns for implementation, I would love to see them.
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.
Well, I think we're in basic agreement that overnormalization isn't a bad thing. But this is same as surveyor saying you can never have enough surveying data in the sense that more data is a good thing, but you are still constrained by time allocated for surveying a lot. With database design, the constraint may be time to market or implementing it. From what I've talked with other folks who may maintain a database for websites, they would rather have a simple design so they can not worry too much about satisfying the normalization constraint and just insert the data right now without hassle and without overhead. This was alluded to earlier with data warehousing.
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.
You are absolutely correct on this point. Many designs out there can be already 4NF and beyond without designer even knowing 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.
Then I'm afraid I'm doing something wrong because I know that when I have several many-many relationship to satisfy, Access gives me hell when I try to be lazy and use subform or so to avoid coding. I tried to give an example in my previous post re: class, attendee, and sessions, but I afraid this wasn't sufficiently clear example of where a proper design can be too much for Access controls.
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.
Wow. coordinates? Who will actually know their coordinates for their house?
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).
Well, I don't disagree that 5NF has to be unusable. The issue as I see it, is that any bound form are inherently for one table (even if we use queries as a recordsource). Things get ugly if you try to create a recordsource involving multiple tables, even if all you want to do is insert a parent record and related child record at same time. Doable, but not braindead simple, IMO.
Subform control sure is a boon for managing one-many relationship, but they still suffere the same limitation. As you move to many-many relationship, let alone one that is constrained by other factors, the implementation becomes problematic.
Moving beyond Access, many developers, I suspect, would just use unbound forms and cook up their solution which is probably only good for this case and will live & die with this case. Not to say that they can't reuse bits & pieces (a good one would!), but I've not seen a implementation that was very simple and effective in modeling complex relationship.
One exception, though. FMS Inc has a great example of using two unrelated subforms syncrhronized to a intermediate textbox which makes it very simple for case where we want two continuous subforms, one showing orders, another showing the details of the order. Access doesn't allow nested continuous subform, but this solution circumvent and works very well. This also can be put to use with complex relationships.
You can fully normalize an awful design and you'll still have an unworkable system.
An excellent point. Normalization is just a part of design, not the sum of design.