Xeoncross
Xeoncross

Reputation: 57274

How many database table columns are too many?

I've taken over development on a project that has a user table with over 30 columns. And the bad thing is that changes and additions to the columns keep happening.

This isn't right.

Should I push to have the extra fields moved into a second table as values and create a third table that stores those column names?

user
    id
    email

user_field
    id
    name

user_value
    id
    user_field_id
    user_id
    value

Upvotes: 4

Views: 1826

Answers (6)

HLGEM
HLGEM

Reputation: 96610

If the changes and additons are continual then perhaps you need to sit down and do a better job of defining the requirements. Now I can't say if 30 columns is toomany becasue it depends on how wide they are and whether thay are something that shouldbe moved to a related table. For instnce if you have fields like phone1, phone2, phone 3, youo have a mess that needs to be split out into a related table for user_phone. Or if all your columns are wide (and your overall table width is wider than the pages the databases stores data in) and some are not that frequently needed for your queries, they might be better in a related table that has a one-to-one relationship. I would probably not do this unless you have an actual performance problem though.

However, of all the possible choices, the EAV model you described is the worst one both from a maintainabilty and performance viewpoint. It is very hard to write decent queries against this model.

Upvotes: 1

nvogel
nvogel

Reputation: 25534

Changes and additions to a table are not a bad thing if it means they accurately reflect changes in your business requirements.

Upvotes: 2

Donnie
Donnie

Reputation: 46933

Do not go the key / value route. SQL isn't designed to handle it and it'll make getting actual data out of your database an exercise in self torture. (Examples: Indexes don't work well. Joins are lots of fun when you have to join just to get the data you're joining on. It goes on.)

As long as the data is normalized to a decent level you don't have too many columns.

EDIT: To be clear, there are some problems that can only be solved with the key / value route. "Too many columns" isn't one of them.

Upvotes: 10

Cade Roux
Cade Roux

Reputation: 89721

This is often known as EAV, and whether this is right for your database depends on a lot of factors:

http://en.wikipedia.org/wiki/Entity-attribute-value_model

http://karwin.blogspot.com/2009/05/eav-fail.html

http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back

Too many columns is not really one of them.

Upvotes: 2

dustyburwell
dustyburwell

Reputation: 5813

It's hard to say how many is too many. It's really very subjective. I think the question you should be asking is not, "Are there too many columns?", but, rather, "Do these columns belong here?" What I mean by that is if there are columns in your User table that aren't necessarily properties of the user, then they may not belong. For example, if you've got a bunch of columns that sum up the user's address, then maybe you pull those out into an Address table with an FK into User.

I would avoid using key/value tables if possible. It may seem like an easy way to make things extensible, but it's really just a pain in the long run. If you find that your schema is changing very consistently you may want to consider putting some kind of change control in place to vet changes to only those that are necessary, or move to another technology that better supports schema-less storage like NoSQL with MongoDB or CouchDB.

Upvotes: 4

Parris Varney
Parris Varney

Reputation: 11488

This really depends on what you're trying to do.

Upvotes: 0

Related Questions