Designing the DB by myself, as I did on a recent project, is great fun for me. I feel unfettered to try things and tweak and come up with something that is powerful, easy to use, and expandable. Today, though, I'm working on a more collaborative design with some people and remembering the importance of stopping and taking a deep breath!
Design choices that seem obvious to me apparently aren't as obvious to other people! When somebody suggest we do such-and-such, I immediately see how choice that will make linking to the table annoying, or require extra hard-coding somewhere, or limit extensibility in the future. But others don't.
So I have to wait patiently as they work through the process to come to the same conclusions I've already come to. For someone who's not very patient, it can be hard, but at the same time it's important they understand why my idea is the best one (and it totally is!).
Fortunately, the people on my team are good people and they don't tend to get wedded to bad ideas. So with a little patience and careful explaining, I get my way and everybody is happy!
Here are some things I think about with database design:
- Is this easy to understand? Does it work similarly to the stuff we already have built? If someone who wasn't one of us came in and had to work on it, could they quickly figure it out?
- Does this design make my life easier? When I am writing queries, will I have to go out of my way to link the tables? Will certain fields of information be unnecessarily difficult?
- Clients always want to add new things later down the road, even if they say they won't. Is this design flexible enough that if they asked for X it would support that with little or no changes?
- Is it holistic and conceptually pure? (this last really only matters to me, and is mostly dependent on the first three anyway)