Non mi è del tutto chiaro il motivo per cui in alcuni casi i riferimenti alle tabelle padre dovrebbero essere NULL, cmq ha ragione Piero.Mac, anche se trovo la soluzione del record "fittizio" un po' poco elegante. Se questa struttura ti è comoda fai a meno delle FK, se invece preferisci avere una struttura dati più rigorosa potresti tenere nella tabella "listino" solo codice, descrizione e prezzo e spostare tutte le relazioni in tabelle di cross (5 in totale). A questo punto puoi mettere le FK in tutte le tabelle e decidere anche se implemtare le relazioni come uno a molti o molti a molti. Tutto questo a scapito di un po' di sbattimento con le JOIN...
Ogni soluzione ha pregi e difetti, vedi tu..