Database Over Normalized How can you tell when a database is over normalized? Example: I have a database for employee. These are the following tables involved:

User - contains email, password, companyId
Profile - profile of the employee (first name, last name, address)
Group - Department list
Company - list of companies
Position - List of positions
Employee - employee information like id numbers, height, weight, contract info, etc.
First, if it ain't broke, don't fix it. If no-one is complaining about the speed of the system then leave it alone. Spend time and money on other things.

Second, no, I don't think it is possible to over-normalise. That is, I think it is possible to spend more time on the normalisation process than your application might need, but unless you've spent tens and tens and tens of hours doing so I don't think the time is really wasted. The time getting to 3rd normal form is most certainly never wasted.

In my (admittedly limited) experience, the problem is usually under-normalisation, otherwise known as "laziness". Database designers often claim it is for speed purposes, throwing the term "denormalised" about like a holy mantra, but if you investigate closely, all they've actually done is half a job.

Denormalisation is not "stopping before you reach a certain normal form"; it is "reaching a certain form (usually 3NF or BCNF) and then undoing some of that normalisation for well-documented, well-benchmarked reasons."

Links

Tony Davis, The myth of over-normalization.

Louis Davidson, Can you over-normalize?.