The two questions you have to ask to correctly derive the degree of this relationship (and the
answers) are:
Question 1: One customer purchased how many product types?
Answer: One or more.
Question 2: One product type was purchased by how many customers?
Answer: Zero or more.
Note that the entity type has been called PRODUCT TYPE rather than PRODUCT which might
mean an individual piece that the customer has bought. In that case the cardinality of
'was_purchased_by' would be one not many because an individual piece can of course only go to
one customer. This point is another common source of error: the tendency to call one item (e.g.
an individual 4" paintbrush) a product and the whole product type (or 'line') (e.g. the 4"
paintbrush product type) a product. You should make the meaning clear from the name you give
the entity type.
We have assumed here that every customer on the database has purchased at least one product;
hence the mandatory optionality of `purchased'. If this were not true in the situation under study
then a zero would appear instead. The zero optionality of 'was_purchased_by' is due to our
assumption that a product type might as yet have had no purchases at all.In practice it is wise to replace many-many relationship types such as this with a set (often two)
of one-many relationship types and a set (often one) of new, previously hidden entity types. This
is covered in a later section in this chapter.