relational for what? [was: Design Principles Behind Smalltalk, Revisited]

Todd Blanchard tblanchard at mac.com
Wed Jan 3 01:28:25 UTC 2007


On Jan 2, 2007, at 1:36 PM, goran at krampe.se wrote:

> Using the RDB as a sharing ground for applications is IMHO really,
> really bad. Sure, it *works* kinda, but very fast you end up with
> replicated SQL statements all over the place. Then someone says  
> "stored
> procedures" and hey... why not consider OBJECTS? There is probably a
> reason why people are so worked up about Services these days. :)

So if it is objects instead of tables - how is this different?
Uh, and the alternative would be what?  Take a typical company that  
makes and sells stuff.

They have customers (hopefully).

The marketing guys want the customer's demographics and contacts to  
generate targeted messages.
The accounting people what to know their credit status, payments, and  
order totals.
The inventory/production planning guys don't really care who is  
buying what, but they want to see how much of each thing is going out  
the door.
The product development people are looking for trends to spot new  
kinds of demand trends.
The sales guys want recent order history, contact event logs, etc.

There are many cross cutting concerns.

If you take the naive object model you probably have
Customers->>Accounts->>Orders->>Items-----(CatalogItem)->InventoryStatus

Works for most traversals, you put the customers in a dictionary at  
the root by some identifier.
But for the people who process orders or do shipping, this model is a  
drag.  They just want orders, and items and navigating to all the  
orders by searching starting at customers is nuts.  So maybe you add  
a second root for orders for them.  Then there's the inventory stuff....

Everybody wants a different view with different entry points.  I'm  
talking enterprise architecture here - bigger than systems which is  
bigger than applications.

Relational databases  don't care about your relationships or roots -  
anything can be a root.  Anything can be correlated.  Any number of  
object models can map to a well normalized.

RDBMS systems have a couple nice properties - you can produce lots of  
different views tailored to a viewpoint/area of responsibility.  They  
guarantee data consistency in integrity.  Something I find lacking  
from OO solutions.

Here's a fun game.  Build an OO db.  Get a lot of data.  Overtime,  
deprecate one class and start using another in its place.  Give it to  
another developer who doesn't know the entire history.  One day he  
deletes a class because it appears not to be referenced in the image  
anymore.  6 months later try to traverse the entire db to build a  
report and find errors 'no such class for record'.  What will you do?

This has happened BTW to me. If I have long lived data, with  
different classes of users and different areas of responsibilities, I  
want the RDBMS because it is maximally flexible while providing the  
highest guarantees of data integrity and consistency.  The problems  
I've heard described are the result of poor design and unwillingness  
to refactor as the business changes and grows.

FWIW I have worked at everything from 5 person Mac software companies  
(anyone remember Tempo II?) to telcos, aerospace, government  
agencies, and the world's largest internet retailer (a scenario where  
the relational database turns out to be not the best fit overall).   
My solution selection hierarchy as the amount of data grows runs:

1) In the image
2) Image segments or PLists in directories
3) RDBMS/ORM like glorp
4) RDBMS with optimized SQL
5) SOA

I'm pretty sour on OODBMS's based on my long running experiences with  
them.

-Todd Blanchard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20070102/0b5b6649/attachment.htm


More information about the Squeak-dev mailing list