Products are assigned to catalogs. Each catalog may include an unlimited hierarchy of categories.
The catalog might be physical and virtual.
The major difference between a catalog and a virtual catalog is that the second one is just a view of items from common catalogs. Physically all items from a virtual catalog are located in common catalogs. This also means that if a modification is made to an item in the common catalog, the update will be reflected in all virtual catalogs instantly.
This gives a huge advantage to business users: it is possible to maintain product data in one place while having a product available in different catalogs. So you can make available a product in different catalogs for different websites (and manage product availability for different audiences easily) without duplicating product data and efforts for its maintenance.
A category is a container for other categories or items. Categories allow building hierarchies and relationships between various items in the catalog.
Each product might have different product variations (set as a relation between the products).
Products might be associated with each other so that you can build all sorts of up-sell, cross-sell, supplementary and other kinds of lists. You are not limited by the amount of those lists and associations.
It is also possible to assign different tags to the product and use this tagging for selecting products according to your business scenario.
product catalog, taxonomy, categories, labels, tags, groups