Il tuo design è appropriato. Sono un ragazzo di database diventato sviluppatore, quindi posso capire l'inclinazione ad avere Categoria e Sottocategoria in un'unica tabella, ma non puoi mai sbagliare con KISS.
A meno che non siano richieste prestazioni estreme o una gerarchia infinita (suppongo di no), sei a posto.
Se essere in grado di associare più sottocategorie a un prodotto è un requisito, per il punto di @Mikael, avresti bisogno di una configurazione come questa che crei una relazione molti-a-molti tramite una tabella di unione/intersezione, 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))
Spero di esserti stato d'aiuto...
Eric Tarasoff