Collasso verso il basso vuol dire che si parte da una cosa del genere:
Dovendolo trasformare in tabelle, invece di fare una tabella "Dipendente" che ha sia i campi di "Impiegato" che i campi di "Dirigente" , si splitta facendo invece due tabelle (Impiegato e Dirigente), che ereditano i campi di "Dipendente"
Nel mio caso è venuta fuori una roba del genere:
GROSSISTA(codFornitore, P.IVA, ragioneSociale, telefono, sede....)
PRIVATO(codFornitore, codiceFiscale, nome, cognome, telefono, indirizzo)
ACQUISTO(codiceAcquisto, data, importo, codGrossista[0/1]: GROSSISTA, codPrivato[0/1]: PRIVATO)
(Ho rinominato le chiavi esterne in codGrossista e codPrivato, perchè lasciare cosFornitore sarebbe stato ambiguo)
Con [0/1] intendo che quel campo è falcoltativo, quindi può essere NULL.
In un acquisto devo indicare il fornitore. Se questo è un grossista devo riempire il campo "codGrossista" e lasciare NULL il campo "codPrivato", altrimenti devo fare viceversa.
La mia domanda è: In CREATE TABLE, o da qualche altra parte, posso mettere questo vincolo?
Oppure è una cosa che non può essere fatta tramite l'SQL e sarà l'applicazione a fare questo controllo?
PS: Qui spiega i collassi: