Non è molto comune, no. Non esiste un modo nativo per condividere una chiave primaria. Quello che potrei fare nella tua situazione è questo:
product_table
id
name
category
general_fields...
product_type1_table:
id
product_id
product_type1_fields...
product_type2_table:
id
product_id
product_type2_fields...
product_to_category_table:
product_id
category_id
Ovvero, esiste una tabella prodotto principale che contiene voci per tutti i prodotti e contiene i campi che si generalizzano tra i tipi e le tabelle specificate dal tipo con chiavi esterne nella tabella prodotto principale, che contengono i dati specifici del tipo.