Re: Conceptual, Logical, and Physical views of data

From: dawn <dawnwolthuis_at_gmail.com>
Date: 10 Sep 2005 18:51:30 -0700
Message-ID: <1126403490.510347.186040_at_g47g2000cwa.googlegroups.com>


Marshall Spight wrote:
> dawn wrote:
> > > >
> > > > I don't yet see how a URL is more of a pointer than a foreign key. It
> > > > is an identifier. You can use it to "go to" another source of data
> > > > just as you can use a foreign key to "go to" another source of data.
> > > > It doesn't even point to a machine, even if it resolves to know what
> > > > machine to go to. My foreign key used in a join statement knows that
> > > > too.
> > >
> > > We already discussed this to death. :-(
> >
> > I know and I apologize for not yet understanding. This pointer issue
> > seems one of the big motivators for relational theory, so I want to
> > "get it". I understand why this was problematic when related to memory
> > locations, but I don't understand the big downside of using logical
> > pointers, reference values, foreign keys -- what's the difference?

>

> Well, we should first of all be clear when we are talking about
> one thing being better than another vs. when we are talking about
> one thing being different from another. Mostly lately I've been
> trying to focus on the *difference* between location-based addressing
> and content-based addressing.

That works for me. I'm trying to figure out what is different conceptually between what people disparage as the use of "pointers" and what I think of as navigation based on foreign key values, for example.

> I'm going to try to leave out the
> "which-is-better" in part because it's not really fruitful to
> discuss until we're clear on the differences, anyway.

>

> As an aside, let me just relate that about 2 years ago, I had
> a lengthy discussion at work in which it was me vs. 2 guys with
> CS Ph.Ds, with them taking the position that there's no difference
> between a pointer and a foreign key.

OK, so at least I can stop kicking myself for not understanding. There is something very obscure that you see that is conceptually the same to me, and, apparently to these guys too. I would still like to sit in your head and figure it out as it is hard to either a) learn or b) refute otherwise.

> At the end of about a week,
> they were unmoved. (Normally that would give me pause, but it
> didn't in this case because I've read a lot more about relational
> theory than they had, and because, well, uh, I'm right.

With facts like that on hand, I can see why you didn't want to hear about my "feelings" ;-)

> Even
> though: no graduate education <sob>.)
>
> Anyway: it's a small and subtle difference.

No doubt, but I'm gonna try really hard to understand.

> The single most telling distinction between an address

do you mean "pointer" here?

> and
> a foreign key is this: in a system with foreign keys, you
> have to have a special operator that given an address returns
> its referent, and an inverse special operator that given
> a referent returns its address. With content-based addressing,
> there simply is no such operator; the comparable functionality
> is available already just from being able to address data
> via its content.

Does this include all key-value approaches?

> Also: the pointer is *external* to the data referred to,
> whereas the foreign key is integral to the data.

OK. So, we could talk about a web page as a (URL, HTML) pair and the HTML might include a foreign key value for another (URL, HTML) pair. This would be compared to a model where you have (WEBRESOURCE) and WEBRESOURCE=(U,H,A,B,C) where U is a candidate key and B is a foreign key to WEBRESOURCE.

Am I close?

> Have you ever programmed in C or C++? (Non-rhetorical question.)

Not that I would admit.

> You know the * and & operators? That's them.

I know the latter if it is the "bitwise and" but not the *.

> (In Java, the situation is obscured by the fact that both operators
> are made implicit; there's no syntax for them. In Java, when
> you mention a pointer, the only thing you could mean is its
> referent, so the dereference operator is automatic.

OK, this is where I'm missing something. I need to understand "dereference operator" for one thing. Usually if someone says "pointer" in Java, after the booing stops, they likely mean "reference" to an object, right?

> Likewise,
> the only way to aquire a pointer in Java is via "new", so
> the reference operator is again built in.)

>

> Can you find anything even vaguely similar is SQL? The closest
> would be something like
>

> "select * from Customers where CustomerId = 1234"
>

> but where is the pointer operation? It's not "where" because
> that can mean a zillion things; you could just as well as
> said "where LastModified > '1-1-2000' and CreditLimit > 1000"
> and *that's* not a pointer operation. And it's not the '='
> operator, either.

ok

> Part II has to wait for later, because we've got a sitter
> and it's time to go visit friends. Hurray for sitters!

good to know you have a social life. Clijsters just won the US Open, so I'm going back to grading. cheers! --dawn

>
> Marshall
Received on Sun Sep 11 2005 - 03:51:30 CEST

Original text of this message