My first guess would be using three tables, one for users, one for subitem_a, one for subitem_b. Each table has its own primary key. In addition, subitem A records have an attribute containing the owning user's id, which is indexed. Subitem B records have two extra attributes, one containing the id if the subitem A it belongs to, one containing the owning user's id. Both are indexed. You can now efficiently query on subitems A belonging to a user, subitems B belonging to some subitem A, and subitems B belonging to a user under any subitem A. Do keep in mind that the extra indexes use RAM though.<br>
<br>Of course, the only way to know for sure is to whip up a quick test, which is done easily enough. <br><br>Maybe not relevant to this particular problem, but keep in mind that indexes can not only be applied to 'simple' attributes, such as integers or strings - you can also apply them to tuples. So suppose you have a table containing documents, identified by a document_id, and a table containing words, identified by a word_id. To indicate which words appear in which documents, you have a third table, containing the document_id and the word_id. If you would need to see quickly if a certain word appears in a document, you could add a third column, containing a { DocumentId, WordId } tuple, and put an index on it. Checking if some word appears in some document can than be done by a single index read.<br>
<br><br><br><div class="gmail_quote">On Tue, Mar 3, 2009 at 3:29 PM, ryeguy <span dir="ltr"><<a href="mailto:ryeguy1@gmail.com">ryeguy1@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I'm trying to break free of the RDBMS thought process, but I can't<br>
wrap my head around how to efficiently implement this kind of schema.<br>
<br>
Say I have a User record, and he has many SubItemA records, which has<br>
many SubItem B records, so:<br>
<br>
User<br>
-SubItem A<br>
--SubItem B<br>
...<br>
<br>
I need to run queries on SubItem B. Is it efficient to do it when it's<br>
this nested? Should I just normalize it so it will be quicker?<br>
<br>
I have heard of some people using data duplication so the data is both<br>
nested and separate, is this ridiculous or is this actually useful in<br>
some cases?<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br>