NNNNN
A late comer...
Why are you asking this question -- what is your objective?
The biggest issue for the most part is to realize why you want to use a "Relational" database. By using tables, you reduce duplication of data. Instead of having the phone number of a contact in three or four locations, have it in one location. Why?
Easier maintenance. The person changes their phone number and now you have to track all three references and edit them. This is why the older, flat file database were so frustrating -- prone to error.
Less space. How much really depends since you have to trade-off the space used by the foreign key, and the space used by indexes.
Please review some known and valued references on the web for a more authoratative review...
Fundamentals of Relational Database Design by Paul Litwin
Download document
Read on-line (HTML)
Micro$oft's answer...
283878 - Description of the database normalization basics
304467 - ACC2000 Defining Relationships Between Tables in a Microsoft Access Database
...Moving on
There are times when you may have to duplicate data, or break data that can fit on one table into two or more tables.
As indicated by
SQLSister, to speed access to a frequently accessed child table. For example, you frequently access InvoiceDetail information. Usually, you have the InvoiceDate on the Invoice master or header table. But your specific requirements, perhaps sales of inventory by date reports, you need to frequently "hit" the InvoiceDetail table. In this case, it may make sense to add the InvoiceDate to InvoiceDetail table design to accommodate this requirement -- it breaks the rules of Normalization, but this type of approach may help address a performance issue.
The other requirement is for security. A very typical example would be to break off the personal HR information (salary, performance reviews) into one "private" table and the general (name, phone number) "public" information into another table.
Then, as indicating. Look at your indexes. Index what fields are frequently used in queries. But do not over-index. Indexes take up space, and will slow down the time it takes to add or delete records. A funny story... A long time ago, the "shop" I was working with di dnot index the phone number of the contacts. At a demo for the application, somebody asked to run a query by the phone number -- 20 min later, the query was still running (thank goodness for Unix so the sales guy could switch to another view). We indexed the table for phone number over lunch and then reviewed the demo question -- the results displayed in less than a second.
To recap...
- Normalize to reduce duplication of data. Saves big-time on maintenance, and may save space.
- Look at the demands of your database.
-- Where do you need indexes
-- Are there areas where you do need to break the rules for "Normalization"?
Richard