Your initial tables need to be :
components (id int(6) primary key auto_increment, description varchar(35) unique key, type_id int(6), obsolete int(1) default 0);
component_type (id int(6) primary key auto_increment, type_descn varchar(35) unique key);
client_selection (order_id int(6) not null, component_id int(6));
orders (id int(6) primary key auto_increment, user_id int(6), Order_date date);
Coupled with a client table using an auto_increment id field and carrying each user's details you can link each build to the client, and an order. A client can make hundreds of orders this way, the data is linked by id, and each build can be distinguished from previous orders. A quantity order could be created using an additional table for build_1, build_2 etc, including a quantity field, the primary key id from this can be used to link groups of components to each of a different machine on the same order. You would then add a field to the client_selection table to identify which part fits in which machine. Keep the fields in each table to a minimum, use id links to identify data to it's client, machine, order, build etc. A price table listing prices against component id allows for simple costing updates, a table for prices at date of order against component id on the order could mean selling at one price today, increasing the price tomorrow and building the machine next week without upsetting the client. He gets billed what he was quoted. Small amounts of data and linking makes the system flexible, don't be afraid to modify tables as required during testing.