On Oct 7, 4:50 am, Michael Pavling <[email protected]> wrote: > I've read the rest of the thread with interest, but I just wanted to > go back to the start for a second. > > On 6 October 2010 14:52, jrq <[email protected]> wrote: > > > I've inherited an EAV database and there's really no option to remodel > > it. > > Where have you inherited this data from? Is there an application > that's still populating it? or is it an export of data (from something > like an online survey/questionnaire system)?
It's not a static export, and yes there is an application still populating it. > > > Trying to return a meaningful, unified recordset is far too complex to > > be efficient. > > Using what approach? The data was set up as EAV for a reason, and > would have probably had tools to query and manipulate it - do you not > have any access to the original tools? > Using SQL joins to build a recordset that represents the dataset. As far as I can gauge the data was setup this way to allow an "easy" way to construct a custom set of fields for a relatively non-technical user/admin. It certainly wasn't designed to handle the reporting function I'm being asked to create, or, I suspect the volume of data that is being stored in it. Yes, the right thing to do would be to replace large chunks of this and design a better normalized data solution that satisfied all the systems involved. Unfortunately, in this instance I don't have the luxury of time or money to go that route. I wouldn't describe myself as a experienced developer, but I have been in this business for a long time, and I know the kind of hole I'm digging for myself by choosing this method. > > I've decided to make use of the MySQL GROUP_CONCAT, and CONCAT_WS > > functions to return a fast query result, with the consolidated fields > > as one string. > > The final data is to be displayed and downloaded (CSV), but not all > > fields will be available for each "row", which makes serialization > > awkward. > > So what lead you to decide to use Rails for this? Given Rails has *no* > practical EAV support (just a bit of munging with plugins), it strikes > me as a strange decision to try to use it to analyse your data. Is > there no "EAV data analysis" tool you can find to do the job, rather > than having to create huge amounts of DB views and/or model > manipulation. It's more complex (isn't it always). A large part of the database is well-formed, normalized and friendly. This little area that only recently came to my attention is not (EAV). Rather than re-tool my entire solution design, I'm sticking to the original plan, and shoe- horn this section in (and it is a relatively small section in the scheme of things). I freely admit that Rails is not the best solution for this. I'd even go as far as to say that it falls into the category of "right now I have a hammer, so everything looks like a nail", by which I mean: I don't do a lot of development, especially web-app development, and spent some time at the beginning of the year learning RoR. I liked it, even if I wasn't always using it in the manner for which it's most suitable. It's been suggested that something like "Sinatra" would be a much better fit for this, and quick peek seems to show that it probably would. However, in the short time available to complete this project, I can't deal with struggling to get through all the "gotchas" of another framework. Lame excuses, I know. Completely at odds with the dogma of RoR development. > > I'm not saying to *not* continue what you're doing - just curious that > it seems you've picked a route that needs more work than should be > reasonable, and don't seem to be looking at any other options. It's > always worth considering admitting that you might be making lots of > work for yourself and a new start may be more economical in the long > run. > > FWIW Many (6-ish) years ago I got an EAV data export from SurveyMonkey > dumped on my desk, and after importing it into a SQL DB, I produced > Excel cross-tabulated reports with a combination of a big plain old > SQL query (with *lots* of joins! :-) to get the data into a "relation" > equivalent, and used Excel's pivot-table functionality to do the > "heavy lifting" of getting information from those rows. With data migration, I generally opt to get down to the raw data and manipulate it all in code. I know it can be a little less efficient, but when it's my code, at least I know I can trust it, or at least fix it when it breaks. Having said that, the pivot table stuff in Excel can be pretty useful. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

