Go to Google Groups Home    comp.databases.theory
Re: Ternary Relationship cardinality

mikl...@gmail.com

Hi Jan,

> The general rule is as follows: If you have a relationship R(a,b,c)
> then you have to ask for each role, say 'a', how its cardinality
> depends on the combination of the other two, in this case 'b' and 'c'.
> If the upperbound is 1 then you put 1 on the corresponding edge in the
> diagram, if there is no upperbound you put N or M there.

Thanks for the insight...

> Minor detail: if *every* child has two parents your database will
> either be infinite or some will be their own descendants.

Care to expand on this? Note that parents can come into existence by
purchase, however since Children are a specialization of 'parent', they
can also breed.

Thanks,

Mike

Jan Hidders wrote:
> mikl...@gmail.com wrote:
> > I know what cardinality is... and I know how to implement it

> > My problem is with the notation for a particular Ternary relationship.

> > (Supertype) [Parent]------[0..*]----- <Breeding>
> > ----[1..1]--------[Child](subtype)
> >                         |-------------[0..*]------------|

> Your ASCII art is a bit unclear so let me tell you how I interpret
> this:
> - You have a relationship Breeding(Parent1, Parent2, Child)
> Your depicted cardinality constraints are as follows:
> - Each Child participates in exactly one instance of that relationship.

> - Each Parent participates in zero or more instances of that
> relationship.

> Minor detail: if *every* child has two parents your database will
> either be infinite or some will be their own descendants.

> > The prob is when I use the N:1 notation..my first reaction would be to
> > do something like this:

> > (Supertype) [Parent]------1-----
> > <Breeding>-----M-------[Child](subtype)
> >                         |-------------1------------|

> The general rule is as follows: If you have a relationship R(a,b,c)
> then you have to ask for each role, say 'a', how its cardinality
> depends on the combination of the other two, in this case 'b' and 'c'.
> If the upperbound is 1 then you put 1 on the corresponding edge in the
> diagram, if there is no upperbound you put N or M there.

> So let's look at Child. Given two particular parents what is the upper
> bound on the number of children. There is no upperbound so the edge
> Breeding--Child is annotated with N. Let's look at Parent1. Given
> Parent2 and a child is there un upper bound on the number of associted
> Parent1's? Yes, there can be at most one, (in fact, this is already the
> case just for Child) so we annotate the edge Breeding--Parent(1) with
> 1.

> Clear?

> -- Jan Hidders