Re: Ternary Relationship cardinality

From: Jan Hidders <hidders_at_gmail.com>
Date: 19 Sep 2006 01:41:29 -0700
Message-ID: <1158655289.492999.196590_at_m73g2000cwd.googlegroups.com>


miklesw_at_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
Received on Tue Sep 19 2006 - 10:41:29 CEST

Original text of this message