How many database table columns are too many?

穿精又带淫゛_ 提交于 2020-02-01 05:10:06

问题


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

回答1:


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.




回答2:


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.




回答3:


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.




回答4:


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




回答5:


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.




回答6:


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



来源:https://stackoverflow.com/questions/4464639/how-many-database-table-columns-are-too-many

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!