Holy cow, about the flame war I was expecting.
For the normalization crew: I have never seen (and I expect I never will) a fully normalized database. Consider table User, in the example above, is not fully normalized. You have first_name and last_name.
A fully normalized database would not include first_name, except as a pointer to another table. Fully normalized tables can’t contain repeat information, and you’ll have several James people. Same thing as last_name, multiple Smiths. For that matter, you can’t have phone_number; the area codes and prefixes replicate. Zip codes are a five-digit primary and a four-digit extension. Any information which itself represents a join has to be broken up. BCNF isn’t fully normalized. Do you do that? No? Okay, then you’re not operating in a normalized database. Get over it already.
The gravitational constant is ALWAYS 32 feet/sec/sec. ALWAYS; and anyone designing an aeroplane who chooses another value fails.
No it’s not. The gravitational constant is only that here on our good ol’ terra firma. If you’re building an aeroplane that may perhaps be used in the future on some other planet, you ought to take that into account when designing the beast. The flip side to this is most likely, you’re not going to ship your plane off-planet. The degree of normalization with which you feel comfortable is (or rather, should be) contextual, not absolute, as well.
From a higher viewpoint, complete data normalization is a theoretical construct. Reality gets in the way of theory. Even if you went to the trouble of building out your tables fully normalized, you’re relying on the false assumption that the data itself is presented in a canonical fashion; it’s not. Jim, James, Jimmy might all be James, or they might not be. The user- or institutionally- provided data that populates your database is coming in without consistent presentation.
All that aside, the Och, Jeff, be careful what you blog about! commentary is well advised to be heard. Messing with your data structure is something that should be undertaken with supreme care. In practice it is several orders of magnitude easier to de-normalize a database than it is to normalize one that is a giant mess. The undo button here is buried under a mountain of pain. Be forewarned, here be dragons.