@Matt
Thank you - the "document database" paradigm is exactly what i was
looking for but didnt know what to call it... Thank you and thank you
again...

@Roy
Thank you for the code snippet you whipped up. I havent had a moment
to work it out and play with it but it most certainly seems to be a
help. Again thanks for the effort.

@Randy,
Thank you for the direction you gave me. I def appreciate that you
took time out to go back and forth with me enough to get my whole
thought out. It was a huge help.

Now i think im going to try my hand at making a stripped down doc-
database implementation in ruby... couchdb looks awesome but waaay too
heavy for my needs.

thanks for the pointers guys

On Feb 10, 8:14 pm, "Pardee, Roy" <parde...@ghc.org> wrote:
> I suspect something like this could work--may be worth a shot.
>
> # Models
> class Table < AR:Base
>   has_many :column_groups, :order => 'cg_num'
>   has_many :rows, :order => 'rownum'
>   def columns
>     self.column_groups.map {|cg| cg.columns}
>   end
> end
>
> class ColumnGroup < AR:Base
>   belongs_to :table
>   has_many :columns, :order => 'col_num'
> end
>
> class Column < AR:Base
>   belongs_to :column_group
>   has_many :cells, :order => 'col_num'
> end
>
> class Row < AR:Base
>   belongs_to :table
>   has_many :cells, :order = 'col_num'
>
>   def get_cell(col)
>     # there's almost certainly a faster
>     # way to do this, but this is all that
>     # comes to mind.
>     cells.each do |cell|
>       return cell if cell.column == col
>     end
>     return "&nbsp;"
>   end
>
> end
>
> class Cell < AR:Base
>   belongs_to :row
>   belongs_to :column
> end
>
> # Controller
> class TableController < ApplicationController
>   def show
>     # :include may be useful here if perf is an issue
>     @table = Table.find_by_name(params[:name])
>   end
> end
>
> # View
> <table>
>   <tr class = "column-group-head">
>     <% @table.column_groups.each do |colgroup| %>
>       <td colspan = <%= colgroup.columns.length%>><%= h colgroup.name %></td>
>     <% end # colgroup %>
>   </tr>
>   <tr class = "column-head">
>     <% @table.columns.each do |col| %>
>       <td><%= h col.name %></td>
>     <% end # col %>
>   </tr>
>   <% @table.rows.each do |row| %>
>     <tr class = "data-rows">
>       <% row.table.columns.each do |col| %>
>         <td>
>           <%= h row.get_cell(col) %>
>         </td>
>       <% end # cell %>
>     </tr>
>   <% end # row %>
> </table>
>
> - Roy
>
> -----Original Message-----
> From: rubyonrails-talk@googlegroups.com 
> [mailto:rubyonrails-t...@googlegroups.com] On Behalf Of frankjmat...@gmail.com
> Sent: Tuesday, February 10, 2009 7:36 AM
> To: Ruby on Rails: Talk
> Subject: [Rails] Re: sparse tables seems to be an impossible term to search 
> on google
>
> my bottleneck at the moment is "how do i properly merge all this quasi- 
> normal data into an array FROM a rails find"... i can find all the sheets.. i 
> can "find" all the sheets columns, i can find all the columns data... but i 
> cant merge them into one cohesive structure which can then be easily iterated 
> over ie:
>
> please take this for the psudocode that it is.
>
> --table--
>   --thead--
>     --tr--
>       columngroups.each do |columngroup|
>       --th colspan=columngroup.column_count--
>         columngroup.name
>       --/th--
>       end
>     --/tr--
>     --tr--
>       columns.each do |column|
>       --th--
>         column.name
>       --/th--
>       end
>     --/tr--
>   --/thead--
> etc...
>
> my main problem is that the find returns the columns, columngroups etc... are 
> all in random order... i think i need them returned as a key/value so i can 
> align everything properly.. but i dont know.
>
> a sheet is just a way of giving all the columns/rows something to say "hey, 
> this is my parent object"...
>
> On Feb 10, 10:04 am, Randy Kramer <rhkra...@gmail.com> wrote:
> > (top posting and not snipping very much so that somebody else can pick
> > up the thread)--I think I'm out of my depth trying to deal with the
> > best (i.e., fastest) way to deal with your data in Ruby/Rails.  (If I
> > was to hazard a guess, I might try dealing with each table as an
> > array, just for the sake of speed.)
>
> > OTOH, if this is a rails application, presumably there is a client and
> > a server (and TCP/IP communication between them)--is the database
> > processing on the server really the bottleneck?
>
> > At least one more comment interspersed below.
>
> > On Tuesday 10 February 2009 09:37 am, frankjmat...@gmail.com wrote:
>
> > > ive toyed around with just using txt files but my limited
> > > understanding of "proper technique" in dealing with them makes them
> > > just as cumbersome...
>
> > > im very familiar with normalization and if it was practical (and the
> > > cost didnt outweigh the benefit) id make sure everything was
> > > absolutely 6NF and then some... but coulda, woulda, shoulda... its
> > > not practical.. the best im shooting for is 3NF or 4NF but its not a
> > > stringent requirement...
>
> > > i guess you could say i know my way around databases, im just lost
> > > with trying to implement this in a ruby way. my database breakdown
> > > will probably look as follows (i think, unless someone can point me
> > > in a better direction)...
>
> > > over time there may be 5000 sheets... each sheet may have up to 20
> > > columns. each column will eventually belong to exactly one group.
> > > each group may have up to 400 "rows"... .. so if a sheet has 4
> > > columns and
> > > 2 groups like my prev. example and is filled to capacity... theres
> > > going to be 400 rows for each set of groups... 800 rows... they need
> > > to then be translated into one cohesive unit for display. the final
> > > display will have all 4 columns separated into groups and "merged"
> > > so all the "toolnumbers" line up in rows.. displaying only 400 rows.
>
> > Without a lot more thinking, I don't fully follow the above
> > description. I guess "sheet" is the first thing that puzzles me--is a
> > sheet a table, or is there a table containing up to 5000 sheets?  (Maybe 
> > the "schema"
> > you list below would answer that and my other questions, but it would
> > probably take me a while to puzzle it out--more time than I have atm.)
>
> > If I really wanted to understand it, I'd ask for an example using "real"
> > data--sheets, columns, and rows just confuse me (would that be
> > metadata?).
>
> > > i **think** i understand the database side.. im lost on the ruby
> > > implementation (or any implementation).. is there a "most effective"
> > > way to construct my relationships?
>
> > > Sheets
> > > - id (int)
> > > - name (string)
>
> > > Columns
> > > - id (int)
> > > - sheet_id (int)
> > > - column_group_id (int)
> > > - name (string)
>
> > > ColumnGroups
> > > - id (int)
> > > - name (string)
>
> > > Data
> > > - id (int)
> > > - sheet_id (int)
> > > - column_id (int)
> > > - tool_number (string)
> > > - value (int)
>
> > > then i'll have a possible array as such for a query like:
> > > select tool_number, value from data where sheet_id = x
>
> > > whats an effective way to iterate over the returned dataset and sort
> > > it out into its corresponding columns column groups and rows... im
> > > seeing a join in my head but i dont know on what.
>
> > > :(
>
> > > hopefully my problem is becoming a little more clear... but the
> > > deeper i dig the more i suspect theres an elegent solution im not
> > > advanced enough to see.
>
> > Good luck!
> > Randy Kramer
> > --
> > I didn't have time to write a short letter, so I created a video
> > instead.--with apologies to Cicero, et.al.- Hide quoted text -
>
> > - Show quoted text -- Hide quoted text -
>
> > - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
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 rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to