Database design resources
Can I get some recommendations for good resources on database design. Books, webpages, whatever would be welcome. I want to spend some of my time this summer learning how to do database design for my own personal gain.
Lesson one. Database design is a dicipline, not a tool to learn. Just as one doesn't become a carpenter by mastering a table saw, you can't master database design by learning SQL or other tools.
A lot of developers skip that lesson, and tend to believe that database design is an intuitive thing they can just do as they go, not quite realizing that databases are based on the relational model, which in turn is something that evolved after decades of real-world experience in information systems. Unless you learn the basics, you'll make the same mistakes developers from the early 60's made when they first tried to integrate applciations and data.
That said, there are two resources I always recommend to start.
CJ Date's Introduction to Database Systems - it's a text book (and sometimes reads like one), but it helps form a fundamental understanding of why databases evolved the way the did. You can go with an older edition (6th is what I have), as nothing really changed since then. Even the "hip new" NoSQL databases are basically rehashes of earlier models from the 70's.
Anything from Joe Celko - he has some good books and a ton of articles on the net and does a lot of pratical (SQL-based) stuff
Spend some time learning normal forms. Particularly third normal form.
Thanks, I figured it was not very simple from reading this site. I think this will do nicely. I wanted something that was tool agnostic so I could learn the basics so I don't make boneheaded mistakes.
@Alex Papadimoulis said:
CJ Date's Introduction to Database Systems
Seconded. This is the book I learned from in college, enormously helpful, covers the history and provides practical examples. (And is generic enough you can use it on almost any RDBMS.)
I can give a huge recommendation for Michael J. Hernandez's 'Database Design for Mere Mortals'.
It's language agnostic and he's very clear in explaining everything he talks about without treating the reader like a retard like some books. It really goes though the steps of first how to even figure out what it is that will solve your requirement, and then how to implement it properly.
Plus he actually explains why you shouldn't do things, with examples as to what hole you'd be digging yourself.