Forse cosi potrebbe essere piu semplice:

TABELLA ARTICOLI:
ID (PK)

TABELLA COMPOSIZIONI:
IDArticolo (CPK)
IDComponente (CPK)
QTA

Ogni articolo in tabella articoli puo essere un sia articolo semplice sia uno composito. La tabella composizioni tiene traccia degli "ingredienti" che compongono un articolo composito. IDArticolo si riferisce all'articolo della tabella Articoli che si sta componendo mentre IDComponente si riferisce all'articolo, sempre della tabella articoli, che costituisce l'ingrediente in coppia con la quantità. Entrambi (IDart e IDComp) costituiscono la composite primary key.

In questo modo non c'è distinzione, a livello di database, tra articoli semplici e compositi, puoi avere infiniti livelli di composizone senza avere difficoltà implementative(1) e, a mio parere, dovrebbe essere il metodo meno dispendioso da implementare partendo dalla situazione che gia hai.

(1) Occhio ai riferimenti circolari: Se Tavolo = Gambe + Piano e Piano = a Legno piu Tavolo ti ritrovi in un loop infinito... dovresti controllare queste situazioni in fase di salvataggio.