I love doing database design with people. I've done my fair share of database modeling on my own; those are the easy projects, sure, but with no feedback. However, working with people on database never fails to help me look at things from different perspective.
A very simple thing like whether a NOT NULL table column should have default values get very different reaction from a BI guy and a System Integration guy. Let me put some of the priorities out from different projects I've been in to help understand why these people make database design decisions the way they did.
System Integration Projects:
- As little data across the network as possible
- If there is bad data, let the good data process as much as possible; flag the bad data to wait for update
- Want the interface to be as automated as possible
- Data has to be 100% accurate at that point of time
- If there is one bad record, back out the entire load
Once I think through these, it's very easy to understand why a System Integration Developer would want every NOT NULL column to have a default value (when it makes sense) and why a BI developer does not want any.