The best book I read about developing database systems was Introduction to Database Systems. Joe Selco SQL for Smarties books is also worth reading. Assuming you're building an application, not just a database, and assuming you're using an object-oriented language, using UML and templates by Craig Larman has a good discussion on mapping databases to objects.
In terms of defining “good,” in my experience, “supported” is probably at the top of the list. Maintaining performance in database design means a lot of things, such as sticking to conventions - I often recommend http://justinsomnia.org/2003/04/essential-database-naming-conventions-and-style/ . Normalization is another obvious support strategy. I often recommend being generous with column types - it is difficult to change the application if you find that the postal codes in different countries are longer than in the USA. I often recommend using views for abstract complex data relationships for less experienced developers.
A key feature of maintainability is the ability to test and deploy. It is worth reading about the continuous integration of databases (http://www.codeproject.com/KB/architecture/Database_CI.aspx), although it is not strictly related to the design of the database schema, this is an important context.
As for performance - I believe that you first need to design for service, and only design for performance, if you know that you have a problem. Sometimes you know in advance that performance will be a serious problem - creating a database for Facebook (or Stack Exchange), creating a database with a huge amount of data (terabytes and above), or a huge number of users. Most systems do not fall into this camp - therefore, I recommend regular performance tests with representative data to find if you have a problem and only tune when you can prove it. Many performance optimizations due to maintainability - denormalization, for example.
Oh, and generally, avoid triggers and stored procedures if you can. This is just my opinion, though ...
Neville kuyt
source share