Re: Navigation question

From: dawn <>
Date: 14 Feb 2007 12:10:52 -0800
Message-ID: <>

On Feb 14, 1:47 pm, "Marshall" <> wrote:
> On Feb 14, 7:43 am, "dawn" <> wrote:
> > Application software typically reads data from a
> > database, takes a foreign key value, and reads in other data.
> Ewww! Certainly *bad* software does that, but good software
> doesn't. Part of my job description is smacking noobs who do
> the above with a large, migratory fish. Salmon is my favorite.
> If you have customers and orders tables, and you want to
> look at, say, all orders for a given customer with date >
> 1/1/2006 and status = fulfilled, you could navigate like this:
> get customer # 1234
> get list of that customer's orders
> for each order
> get the order
> if order date > 1/1/2006 and order status = fulfilled
> add order to result
> If get-customer and get-order run over the network, then
> this software will perform poorly. However if you have some
> ad hoc data api, that's probably your only choice. However
> you would still get a fish-smack from me.

I might navigate to the orders by way of a set selection, but I would navigate, none-the-less.

> Or you could do this:
> select * from orders where date > '2006-01-01' and status =
> 'fulfilled' and customerid = 1234
> You say what you want and you get just that. No sifting
> through stuff you don't want; no navigating.

OK, I was calling that "navigating." In this case, I had information about a customer, retrieved that customer data, then navigated to the orders for that customer.

> > Do large, production-quality, highly usable and useful, data-based,
> > read-and-write software applications actually exist where there is no
> > code in the software that navigates around the database?
> Sure! They tend to perform well, too, in a multitier environment.
> All that navigation is *expensive* in terms of network requests.

It seems that my understanding of "navigation" is not the same as yours. If I am on node A and then I use information from that node to "navigate" to data on other nodes, I was calling that navigation. When people are talking about "navigation" do they mean "iteration"?

> In fact, it is my opinion that *the* single biggest performance
> win to be had in distributed computing is to minimize the number
> of network round trips per client request.

No doubt a good strategy.

> The best way to do
> that is to have the highest-level, most declarative way of
> describing what a request wants to do.

Are "navigation" and "declaration" mutually exclusive?

> A low-level navigational
> approach will always generate a lot of individual requests,
> because the client has to issue a lot of requests to navigate
> through and filter a lot of data.

Yes, and I was not suggesting that at all. I was suggesting that one "navigates" from node(s) to node(s), using data from one node to know where to head next. I hate to request a definition as some don't like them, but I am clearly not understanding what "navigation" means. If one moves from one web page to another via a hyperlink, that would be navigating, right? If a user moves from a node with data about one Person to a node about that Person's mother, that would be navigating, right? Isn't that done in software applications all the time? Is it when there is a 1-M relationship where you pull up a set related to one node that it is not called navigating?

Sorry to be dense, yet again dog gone it. --dawn Received on Wed Feb 14 2007 - 21:10:52 CET

Original text of this message