Jason Tiret of Embarcadero has written a great post on the 7 deadly sins of database design.
- Poor or missing documentation for database(s) in production
- Little or no normalization
- Not treating the data model like a living, breathing organism
- Improper storage of reference data
- Not using foreign keys or check constraints
- Not using domains and naming standards
- Not choosing primary keys properly
I would add these:
- Not recognising that a database does NOT live in isolation
- don’t unnecessarily include data that is already stored elsewhere, as you may be creating a data maintenance and data quality nightmare
- if you do need to include data held elsewhere, you need very good reasons to change what it’s called, and how it’s defined
- maintain a catalogue of schemas and logical data models, including mappings between models, and data lineage between databases
- Not taking advantage of design patterns
- the data may be new to you, but you can bet your bottom dollar that it fits a pattern, and there are templates that can be reused
- there may be useful design patterns developed in your other databases
- e.g. how you handle histories of status values, or time-stamped data
- check out Universal Data Models such as those from Len Silverston