An association links one class to another to indicate a relation between them. For example, you have an association between Customer
and Order
which (with no further information) indicates that:
A customer can have an order or maybe several orders,
An order can belong to a customer or maybe shared by several customers.
The diagram in your question gives an additional info: there is one and only one customer by order, and zero or more orders by customer, so the rules become:
A customer have zero or more orders,
An order belongs to one and one only customer.
While aggregation is used in the association between Order
and OrderDetail
, it's not used in the association between Customer
and Order
. This is done to indicate the life cycle dependency. If an instance of the Order
is destroyed, all instances of OrderDetail
inside it would be destroyed too; on the other hand, the instances of Order
are independent of the life cycle of the Customer
instance, thus no aggregation here.
This doesn't mean that an order can exist without a customer: the 1 ↔ 0..* association explicitly forbids the orders which have no customers. The difference between a 1 ↔ 0..* association and the aggregation really happens on life cycle level.