In most cases, you are selling straightforward 'monolithic' items: you buy or make them, they exist, and then you sell them.
However, there are cases where you might want to provide the customer with options which are then used to construct their item from a set of component parts.
A computer is a familiar example of this.
The system provides a special datatype - "Product Family" - which can be used to define the options and pricing involved.
You start off by creating a Table which contains all the component parts. For our computer this might be the different monitor sizes, memory options, etc.
You can sell these component parts individually at their own component price points.
You can also create an 'Assembly' which is a product that contains one or more 'Product Family' fields. So we would have one field with Monitor options. For a given record in the Assembly Table, this would list out the options that you are offering - 17", 19" 20" monitors etc, and for each option, you can set the price (not necessarily the same as the price you sell the component for individually), and you can set the default option.
When the customer comes to select their product, they are given the ability to choose between the available monitor sizes, and the price they pay is adjusted on-the-fly as they make changes.
If you are using stock control, the system will only present components in the options if they are still in stock.
As well as complex assembled items, like computers, this functionality can be used to provide special offer bundles as promotions, or two-for-one offers.