chrisf
2009-Aug-26 08:46 UTC
Best Practice: Put all fields in a db column or lump some into a serialized hash in a TEXT column?
On my previous countless Rails apps, I''ve always put each data field as its own column in the DB, but on the last 2 projects, I''ve started to create a catch-all column that is a MySQL TEXT that I serialize and treat as a hash for a bunch of general stuff, from arrays, hashes, etc. This has worked well on the last 2 apps whose requirements were not firm, so there are lots of changes on the fly. So when there is a data field for a model that I know I''m going to want to do a find_by..., order, or some other database operation on, I obviously put it into its own SQL column, but otherwise, I''ve been lumping everything else into that general serialized hash and setting up methods in the model to get/set them as if they were normal attributes. I''m curious to hear some feedback on this technique, e.g. "that bad programming practice because..." or "it has a performance impact because..." or "hey, me too"
Philip Hallstrom
2009-Aug-26 16:38 UTC
Re: Best Practice: Put all fields in a db column or lump some into a serialized hash in a TEXT column?
> On my previous countless Rails apps, I''ve always put each data field > as its own column in the DB, but on the last 2 projects, I''ve started > to create a catch-all column that is a MySQL TEXT that I serialize and > treat as a hash for a bunch of general stuff, from arrays, hashes, > etc. > > This has worked well on the last 2 apps whose requirements were not > firm, so there are lots of changes on the fly. > > So when there is a data field for a model that I know I''m going to > want to do a find_by..., order, or some other database operation on, I > obviously put it into its own SQL column, but otherwise, I''ve been > lumping everything else into that general serialized hash and setting > up methods in the model to get/set them as if they were normal > attributes. > > I''m curious to hear some feedback on this technique, e.g. "that bad > programming practice because..." or "it has a performance impact > because..." or "hey, me too"I''ve done it, but I think in general it''s probably a bad idea. If you''re system changes that frequently the odds that a new business requirement of "oh hey that field we added last week that you put into the serialized blob we now need to search against" is going to bite you. Or, someone will want to interface into the database with some other language (ie. not Ruby) and they''ll have problems reading that serialized data. Where I have done it and I think works all right is for "user preferences"... little bits of mostly boolean flags or color choices that you''ll never search on and will vary quite a bit as the preferences grow... -philip
Ar Chron
2009-Aug-26 17:30 UTC
Re: Best Practice: Put all fields in a db column or lump some into a serialized hash in a TEXT colu
Can''t say as I''m in that ''hey, me too'' group... I''d classify that as short-sightedness... Rails has migrations, form builders, plenty of tools to make agile development possible. You''ve squirreled away part of your data into a form that is inaccessible except through your application, or someone else writing code, possibly in another tool, that attempts to mimic yours. What happens when a client calls asking ''Hey, why can''t I search on X? I see it on the forms.'' And how about support for 3rd party report writers, ad-hoc querying, or data warehousing? -1 for submitting to the demands of the moment. But that''s just my opinion. -- Posted via http://www.ruby-forum.com/.