Forum: Ruby on Rails Database table for 2-dimensional array

99713a5ec23b5195250c9910eb13f01f?d=identicon&s=25 Jason Hsu, Android developer (Guest)
on 2013-08-13 19:49
(Received via mailing list)
My Doppler Value Investing site (http://www.dopplervalueinvesting.com)
uses
Ruby on Rails and a Postgres database.

There are two important parts: the superficial analysis and an in-depth
analysis.

An example of the superficial analysis is at:
http://www.dopplervalueinvesting.com/stocks/FAST

An example of the in-depth analysis is at:
http://old.doppler.webfactional.com/sites/default/...

Note that the results of the superficial analysis are 1-dimensional -
just
parameters.  This easily fits into one row in one table of a database.

Note that the results of the in-depth analysis are 2-dimensional -
parameters AND year.  How would this fit into a Postgres database?  What
are your suggestions?  Is it possible to have a table within a table?
5f94b9b346c2aa648a80bc259978e5bc?d=identicon&s=25 Colin Law (Guest)
on 2013-08-13 22:24
(Received via mailing list)
On 13 August 2013 18:47, Jason Hsu, Android developer
<jhsu802701@gmail.com> wrote:
> http://old.doppler.webfactional.com/sites/default/...
>
> Note that the results of the superficial analysis are 1-dimensional - just
> parameters.  This easily fits into one row in one table of a database.
>
> Note that the results of the in-depth analysis are 2-dimensional -
> parameters AND year.  How would this fit into a Postgres database?  What are
> your suggestions?  Is it possible to have a table within a table?

Split it into multiple tables with associations between them
(has_many, belongs to).  Conceptually that can be likened to tables
within tables.  Have one table for each type of data.

Colin
280b78a61a968391b7e07e912be102a8?d=identicon&s=25 Robert Walker (robert4723)
on 2013-08-19 18:48
Jason Hsu, Android developer wrote in post #1118601:
> An example of the in-depth analysis is at:
> http://old.doppler.webfactional.com/sites/default/...

> Note that the results of the in-depth analysis are 2-dimensional -
> parameters AND year.  How would this fit into a Postgres database?  What
> are your suggestions?  Is it possible to have a table within a table?

Technically speaking database tables are 2-dimensional. They have
columns and rows. It just happens to be that the "columns" dimension is
fixed and the "rows" is variable.

If you take your "Per Share Values" table that's actually what you see.
The real issue is that you have decided to present the table transposed.
You have a fixed number of rows and possibly a variable number of
columns (years).

The data itself could be represented using a single table:
+------+---------+---------+---------------+----------+
| Year | Int Vlu | Net Liq | Proj Fr Ca Fl | Pl/Pr/Eq |
+------+---------+---------+---------------+----------+
| 2011 |   14.55 |   -0.27 |         1.459 |    2.414 |
| 2010 |   13.22 |   -0.04 |         1.302 |    2.106 |
| 2009 |   ..... |   ..... |         ..... |    ..... |
+------+---------+---------+---------------+----------+

In this case the four numeric values are functionally dependent on the
year.

http://en.wikipedia.org/wiki/Functional_dependency

This would be the most efficient way to store the data shown in your
table. However, this is making the assumption that the four columns are
fixed. If you actually have two variable sets of data then you would
need multiple tables to store the data.

If course the other tricky thing is laying out the stored data into your
HTML table columns and rows. I would likely create an Array of Hashes
from the ActiveRecord objects with the data laid out as it looks in the
HTML table. This gives you the flexibility of matrix like data structure
that is variable in both dimensions. This might be useful regardless of
whether your data is stored in one table or many.
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.