Like everything else: it depends.
There is no hard and fast rule regarding the number of columns and counting tables.
If your customers need to have several addresses, then a separate table makes sense for them. If you have a really good reason to normalize the City column to your own table, then this too can go, but I have not seen this before, because it is a free-form field (usually).
A tabular heavy, normalized design is space-efficient and looks like a “good-to-read” textbook, but can become extremely complex. This looks good until you have to make 12 joins to get the name and address of the customer. These projects are not automatically fantastic in terms of the productivity that matters most: queries.
Avoid difficulties if possible. For example, if a client can have only two addresses (not arbitrarily many), then it makes sense to just keep them all in one table (CustomerID, Name, ShipToAddress, BillingAddress, ShipToCity, BillingCity, etc.).
Here's a Jeff post on the topic.
Michael Haren Sep 12 '08 at 16:53 2008-09-12 16:53
source share