My take on this is somewhat contrarian.
I would advise, don't stress the design of the database too much.
Sometimes this may be hard. With internal LOB applications, the prevailing view of the business is often times that the DATA is the primary asset, where as the software is somewhat expendable.
My advice would be: don't buy it.
In reality the asset is the company's ability to INTERACT with the data. To view it, to manipulate it, and to make decisions based on it.
This means that even though they may place a high value on the data, what they are actually valuing is the software that you are writing.
This means I would focus most of your effort on building an effective user experience, rather than on "designing the perfect database". The database is really just a tool that enables you to deliver on a user experience.
The key feature of relational data models is data and access path independance. You can add columns, change keys, introduce or remove indexes, etc, while having zero impact (or close to zero) on the applications that use it.
This makes the database structure extremely pliable.
Trying to design the database to "be flexible for the future", or to "optimize performance" is mostly a wasted effort.
Changing the structure of the database will have a relatively small impact on your system.
Also, you really can't predict how the database will scale until you run into the scenarios where you need it to scale. Your best bet is to wait until you hit performance issues. and then address them specifically.
Making changes to the user experience of your app, however, is usually more expensive.
UI work is time consuming, and usually takes a while to get right.
So, I would recommend that you:
- Just produce a crappy DB design
- React to the actual performance scenarios you encounter
- Focus your efforts on user experience, not on the database