I’ve been designing databases for more than half my life. And I never thought about normal forms. Actually I’ve heard about normal forms in my 2nd year in college; and I was so surprised that someone actually wasted his time writing about something so obvious. And because I had to learn them I took a little time to look deep into them. A few hours later I reached a conclusion (And I remember the exact words I told to a colleague): A useless set of rules that make me design a database 20 times slower than I normally do. Of course, I was ending up with identical design in both situations.
But, during times, I’ve seen a lot of bad database design; and if asked why it is bad I found to be easier to send the asker to read about the normal forms than to try to explain myself.
The other days I saw a teacher with more than 30 years teaching experience looking at a small database, taking every table, column, checking dependencies to see if it is in the 3rd form. It took him about 10 minutes to reach my 30 seconds conclusion.
So, why I don’t think “normal forms”? I think that the way I learned programming and databases influences the way I reason.
I began my programming journey with Pascal in 9th grade. Very soon advanced to OOP and I also started creating application that were solving real life problems and of course get to wonder how to store data. I had objects and looking for a way to store them with minimum redundancy. And I used what Pascal knew - sequential files based on which I created some sort of primitive databases. With Main Key, Field Key, Link Key with the equivalent of Primary Key, Index, Foreign Key. That’s because I had absolutely no idea about the existence of databases so I had to create my own notions. Keep in mind that I was living in a small city where no computer science book could be found; we had no internet; half of the school year we had no teacher because no computer science teacher could be found; in the end we got an engineer that learned 25 years ago something with punch-cards and didn’t work in the same domain since. Therefore, the teacher was learning at the same time with us. (and the rest of the class were all pupils.) This happens when you’re born in a god forgotten city in a god forgotten country. But our lab had some i386 laptops donated by a US company that didn’t need them anymore as they bought the new i486.
About a year later a colleague came with a treasure: FoxPro and a few month later I went to Bucharest (yes, that’s the capital) where I spent all the money (saved in about a year) on computer science books (actually after looking in more than a dozen bookstores I found a book on FoxPro.
Soon I mastered the FoxPro and this got me a job during high school.
So, how do I conceive my tables? Well, I think it all has to do with objects; as in high school I start thinking of objects and then transform them into tables. Simple; effective; obvious; natural way (for me).
Do you use normal forms?