Oracle FAQ Your Portal to the Oracle Knowledge Grid

Home -> Community -> Usenet -> comp.databases.theory -> Re: Constraints and Functional Dependencies

Re: Constraints and Functional Dependencies

From: Marshall <>
Date: 24 Feb 2007 21:24:42 -0800
Message-ID: <>

On Feb 24, 12:41 pm, paul c <> wrote:
> I don't know where to look for Cimode's proof but I think what Marshall
> defined is what I call a "reference", which seems more general than
> Codd's original foreign key, ie., doesn't exclude the possibility of the
> reference being a key in the referenced table, if the person who
> declares the reference so desires. I take it that you want to read
> "foreign key" literally and insist that the reference involve a key
> defined for example, the way Marshall defined a key. If I read you
> right, that's okay by me but I think "reference" encompasses "foreign
> key" in a way that never diminishes any table a designer who wants to be
> literal declares at the same as it allows the rest of the table definers
> much more leeway.

Yes, that's pretty much what I'm thinking. I don't see any logical reason to either require or forbid that the referenced column(s) be a key.

With the idea of dropping all special-purpose constraints (keys, fks) in favor of a general constraint system, this seems to me to be especially indicated. Adding such rules to the constraint system would actually *complicate* it for no reason I can think of.

The one exception to all of this is my feeling that the system should have as an implicit property that every element of a relation is unique, and that this should be true even in the absence of any declared constraints. The mechanism for this is duplicate elimination, though, rather than rejection of duplicate inserts. A different way to think about it would be to require the declaration of at least one key, but I think the other way is better.

This follows from the definition of a relation.

So for example the union of R(a) = {1, 2} and S(a) = {2, 3} should be RS(a) = {1, 2, 3}, without my having to declare anything. If R didn't have any constraints, and S didn't have any constraints, then RS won't have any constraints.

Marshall Received on Sat Feb 24 2007 - 23:24:42 CST

Original text of this message