One of the most important things you can do from the beginning is to lay out your tables and entire data structure logically. Spending a few extra minutes in the beginning when designing a logical database can save you hours or even days worth of work later on. You would be surprised at the amount of time it takes to "work around" a bad database design, or worse, having to go back and "re-plumb" your data objects to make them work correctly.
The two rules I like to follow when creating a database are:
Lay out objects in the database so that they are organized logically, either by the data they store or the business logic they represent
Don't store duplicate data
For example, if we were trying to model an ordering system, we would need to store information about the order, the related customer, the products they ordered, their billing and shipping address, and so on. It would be simple enough to create a single table to store all of this data, but that would...