[elephant-devel] Design Suggestion Request
Daniel Salama
lists at infoway.net
Wed Jul 26 21:36:33 UTC 2006
Hi all,
I'm relatively new to OODB and in particular Elephant. I learn best
by working with applications, so normally, I would try to migrate
something I have done in a different application into the new
environment I'm learning.
For this exercise, I'd like to migrate an application I developed in
a different environment using MySQL. It's a small invoicing application.
The concept I'm trying to visualize, for both design, efficiency, and
performance, is the following (very simplified version):
I have many customers who place many orders. The orders get
eventually shipped and converted to invoices. Invoices can receive
full payment or many partial payments, etc, etc. You guys get the idea.
Coming from a relational world, I would have something like a
customers table, an orders table with order_items, invoices with
invoice_items, maybe something like transactions, etc.
I would be able to query all customers, or get gross sales or gross
payment reports, as well as look up any customer and get individual
order history, invoice history, etc.
So, in my mind, in terms of architecting this, I could do something
like a collection of customers where each customer object would have
a a few slots. One for orders which will in turn a have collection of
items. Another for invoices, which will have another for its items,
and so on and so forth.
That setup, I would think, would give me a nice model for looking up
a client and then pulling its corresponding historical records.
However, it would seem to me that if I then wanted to run a gross
sales or gross collections report, I would need to iterate through
all customers to get the corresponding data to possible then select
specific date ranges or other filter criteria. That to me sounds
extremely inefficient.
Now, that could be just because that's the way OODB work in general
or because I have a completely wrong design on what I should do.
The other approach I thought would be to model it similarly as to how
I would do it in a relational database. Basically, I would create
separate collections of objects representing the tables I would have
in the relational database. Then, within each object, e.g. a customer
object, I would create a reference to a collection that holds a
subset of invoices, for example. This would allow me to simply query
the invoices collection of a customer and that's it. At the same
time, I would be able to query the entire invoices collection.
This sounds like a better approach. However, I'm wondering if anyone
could comment on the overall design, and even possibly provide some
sample code or pseudocode on achieving it.
Thanks,
Daniel
More information about the elephant-devel
mailing list