Ragiona bene... se riesci in astratto, altrimenti diventa difficile.
Una portata deve poter avere determinati attributi... a prescindere... nell'esempio che poni il primo attributo è TIPO:
TIPO:Primi/Secondi/Contorni/Desserts ecc..
Un successivo attributo è il SottoTipo, ovvero quel sottoinsieme specifico di Primi Piatti o di Secondi...
Tipo:Primi
SottoTipi:paste, riso, zuppe, minestre, creme, risotti
Tipo:Secondi:
SottoTipi:carni a base bovina, carni a base suina, prodotti ittici
Come vedi il SottoTipo è comune a tutte le Portate, ma non tutti i tipi sono applicabili a tutte le portate, ma ovviamente potrà essere Valorizzato SOLO con elenchi tipici di TIPO, ovvero non potrai assegnare ad un Primo, il SottoTipo "carni a base suina", oppure ad un Secondo, il SottoTipo "Risotti".
Quì la cosa si inizia a complicare, come ti dicevo, e richiede la logica della 3° FN, ovvero una relazione Molti a Molti.
Dovrai implmentare la Tabella TIPO con tutti i Tipi "Primi/Secondi/Contorni/Desserts/ecc...", poii servirà una Tabella chiamata "SottoTipi" che contiene TUTTI i Sottotipi possibili senza distinzione.
Poi andrai a realizzare una Tabella che ti consente di attribuite ad ogni TIPO un gruppo di SottoTipi, quindi servirà una Tabella di Congiunzione TipiSottoTipi
Questa Tabella è quella che andrà a POPOLARE la ComboBox di selezione del SottoTipo che verrà Filtrata per TIPO quando andrai ad inserire una Nuova Portata.
Supponi di inserire una Nuova Portata, avrai 2 ComboBox (1° TIPO, mentre la 2° è SottoTipo), in cui la 2° è di Livello Gerarchico dipendente dalla 1°.
Quindi la 2° sarà disabilitata, e verrà abilitata solo dopo l'Update della 1° e verrà valorizzata sulla base della Tabella Intermedia Filtrando per tutti quei SottoTipi contenuti nella Tabella "TipiSottoTipi" aventi come Tipo=CasellaCombinata TIPI.
In questo modo se inserirai un PRIMO... avrai a disposizione come SottoTipi solo i SottoTipi riferiti ai Primi "paste, riso, zuppe, minestre, creme, risotti"
Direi che hai elementi sufficienti...