Re: What databases have taught me

From: Bruno Desthuilliers <onurb_at_xiludom.gro>
Date: Fri, 23 Jun 2006 16:31:02 +0200
Message-ID: <449bfb26$0$299$>

Erwin wrote:

>>May I ask 2 questions here ?

> :-))))))

oops :(

There are 3 kind of people: those who know how to count, and the others. Seems like I'm in the 3rd part !-)

>>OO is not restricted to Java and C++.

> There's always SmallTalk, of course.

And Python, Ruby, CLOS, OCaml and objective-C...

> Maybe you disagree, but I've
> heard more than one self-proclaimed OO-purist declare SmallTalk to be
> the only *true* OO language. And that alledgedly "one and only true OO
> language" is, to the best of my knowledge, a thousand times more
> strictly hierarchical than Java or C-with-any-suffix.

oh, really ? Could you please elaborate about what you mean when asserting that Smalltalk is "a thousand times more strictly hierarchical" than Java etc ? I fail to understand about which hierarchies you're talking about here - class hierarchy or runtime associations between objects ?


>>Going over the board with genericity
>>in prevision of changes that are barely previsible is an easy mistake. 

> Hear hear.
>>Hmmm... The fact is that we *also* have to deal with hierarchical data
>>structures, and relational algebra does not really shine here.

> Hmmmmmm. Is it really the *algebra* you think is crippled ?

AFAICT, yes. At least what I learned as being "algèbre relationnelle".

> What kind
> of operation do you think is unsupported by the algebra ?

I don't know how this translates in english, the french term is "fermeture transitive d'un graphe". IOW, if I have (minimal example):

('menu1', NULL)
('menu1.1', 'menu1')
('menu1.2', 'menu1')
('menu1.2.1', 'menu1.2')
('menu2', NULL)
('menu2.1', 'menu2')

# etc...

How can I select menu1 and all it's childrens in a single operation ? How can I select the 'root' for menu1.2.1 (which is 'menu1') in a single operation ?

AFAIK, when you put this into a RDBMS, you need additional code - either in "procedural SQL" or in the client app - to deal with this.

And this is only an homegenous hierarchy - what for heterogenous hierarchies ? and moreover where some entities are not known at design time (like provided by plugins) ?

NB : please understand this is not intended to demonstrate the superiority of OO over RM (I just don't give a damn about this kind of religion wars)- I'd really like to know how to handle this cleanly and efficiently with a RDBMS without using stored procedures...

bruno desthuilliers
python -c "print '_at_'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb_at_xiludom.gro'.split('@')])"
Received on Fri Jun 23 2006 - 16:31:02 CEST

Original text of this message