Re: Extending my question. Was: The relational model and relational

From: Bob Badour <bbadour_at_golden.net>
Date: Mon, 17 Feb 2003 22:32:18 -0500
Message-ID: <0ai4a.10$m52.1404041_at_mantis.golden.net>


"Bernard Peek" <bap_at_shrdlu.com> wrote in message news:JyMJPSAtcXU+EwSH_at_diamond9.demon.co.uk...
> In message <b2rqnp$1tj$1_at_slb2.atl.mindspring.net>, Steve Kass
> <skass_at_drew.edu> writes
>
>
> >I think you are confusing your employees with your model.
> >If we have only the two employees named John Smith, in
> >department 10 with salary 20000, and we are storing this
> >information in a multiset, we have only _one_ fact, not two:
> >"There are two John Smiths in department 10 with salary
> >20000". Two employees, but only one fact.
>
> That depends entirely on an opinion on what constitutes a fact. It's
> equally true to say that there are two facts. The first fact is that
> there is an employee called John Smith, the second fact is that there
> are two John Smiths. If you redefine the word (making it a term of art)
> so that it always equals that which is recorded by a *unique* record in
> a database then your statement becomes true.
>
> It's usually quite important to be able to distinguish between people
> that may have the same name. Let's choose a different example.
>
> I collect books and as sometimes happens I have some duplicates. I have
> two copies of the same book, quite often both of them in mint condition.
> I have two database entries for that edition. I have two copies of the
> book on the shelf. Suppose I give one copy away? I take one copy off of
> the shelf and I delete one record from the database.

You seem to have missed the point that there is logically no way to delete only one of the records without also deleting the other record. One must rely on proprietary, non-portable features that directly expose the physical storage model. One cannot simply issue a statement to delete the book. One must first query the dbms for the physical pointers to matching books then arbitrarily choose one of the physical pointers to navigate for the deletion.

This means that all delete processes must follow this two-step method even when no duplicate books exist.

> It makes no difference whether I delete the record that was created when
> I acquired the first book or the second. It makes no difference whether
> I remove the first book or the second.

It makes a difference whether one can logically address each of the records independently, though. How would you construct an SQL delete statement to delete just one of the identical book rows?

> I could create a new entity and call it "Acquisition Number" and that's
> what most librarians do. Acquisition numbers are simply identity fields.
> They should not be considered part of the logical data structure.

Logical identifiers are absolutely required for the logical data model. That's where logical identifiers are most important. By adding a logical identifier, you no longer have a multiset and you might as well use a relational dbms instead. Received on Tue Feb 18 2003 - 04:32:18 CET

Original text of this message