Não é muito comum, não. Não há uma maneira nativa de compartilhar uma chave primária. O que eu poderia fazer na sua situação é o seguinte:
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
Ou seja, há uma tabela mestre de produtos que possui entradas para todos os produtos e possui os campos que generalizam entre os tipos e tabelas especificadas por tipo com chaves estrangeiras na tabela mestre de produtos, que possuem os dados específicos do tipo.