Votre conception est appropriée. Je suis un gars de base de données devenu développeur, donc je peux comprendre l'envie d'avoir la catégorie et la sous-catégorie dans une table, mais vous ne pouvez jamais vous tromper avec KISS.
À moins que des performances extrêmes ou une hiérarchie infinie ne soient une exigence (je suppose que non), vous êtes prêt à partir.
Si pouvoir associer plusieurs sous-catégories à un produit est une exigence, au point de @Mikael, vous auriez besoin d'une configuration comme celle-ci qui crée une relation plusieurs-à-plusieurs via une table de jointure/intersection, Product_SubCategory :
CREATE TABLE Product (ProductID int, Description nvarchar(100))
CREATE TABLE Product_SubCategory (ProductID int, SubCategoryID int)
CREATE TABLE SubCategory (SubCategoryID int, CategoryID int, Description nvarchar(100))
CREATE TABLE Category (CategoryID int, Description nvarchar(100))
J'espère que ça aide...
Eric Tarasoff