Allora ragazzi in breve sto realizzando un database per una compagnia telefonica (il progetto è un caso di studio )

I clienti potranno sottoscrivere uno o piu contratti

Il cliente può essere un privato o un azienda e per questo ho deciso sostanzialmente di fare due tabelle PRIVATO e AZIENDA (anzichè fare un unica tabella)e fin qui ok.

Il cliente può sottoscrivere uno o più contratti. I contratti possono essere di tipo "ricaricabile" o con "abbonamento".

Nel caso il contratto è "ricaricabile" bisogna conoscere il saldo sulla scheda e sapere se il cliente vuole avere la fattura.

Nel caso il contratto è con "abbonamento" bisogna conoscere i dati bancari della banca.

E già qui non so quale sia la strada migliore da eseguire. Ho varie soluzioni in mente ve le elenco

1) creare 4 tabelle :
contratto_privato_ricaricabile
contratto_privato_abbonamento
contratto_azienda_ricaricabile
contratto_azienda_abbonamento

Questa soluzione mi eviterebbe di avere campi Null inutilizzati però quando devo eseguire query del tipo "a quale contratto fa parte questo numero di telefonO" mi renderebbe più complesse le query sia a livello di estrazione dati sia a livello d'ispezione.... giusto ?


2) creare un unica tabella contratto :
il problema però e che quando inserisco un record avrò sempre 2 campi vuoti perchè nel caso ad esempio sto inserendo un contratto con ricaricabile il campo "iban" e "intestatario_conto" non verebbero utilizzati e nel caso invece sto inserendo un contratto con abbonamento il campo "richiesta_fattura" e "saldo" non verebbero utilizzati.
Un altro problema e che ovviamente devo capire se il contratto si riferisce ad un azienda o a un cliente quindi pensavo di mettere all'interno due chiavi esterne "idprivato" e "idazienda" e nel caso il contratto è intestato a azienda riempio solo il campo "idazienda" mettendo l'id di riferimento dell'azienda, in caso invece il contratto è di un privato riempio solo il campo "idprivato" mettendo l'id di riferimento del cliente privato.
Però questa soluzione non mi convince molto...non so....

3) creare due tabelle : contratto_cliente | contratto_azienda

in questo caso le due tabelle hanno gli stessi campi tranne la chiave esterna dove a uno sarà idprivato e all'altro sarà idazienda. Anche qui c'è il problema che 2 campi rimarrano sempre vuoti.


Secondo voi quale soluzione mi conviene adoperare ? ovviamente se avete altre soluzioni migliori fatevi pure avanti

Ringrazio in anticipo tutti coloro che vorrano aiutarmi :*