Il contesto
Sto modellando un database per un piccolo sistema ERP. Tuttavia ho recentemente colpito un punto difficile che sto attraversando un periodo difficile. La logica di questo comporta alcuni casi speciali, spero che qualcuno con un background di progettazione DB possa aiutare (questo è il mio primo progetto di modello DB di grandi dimensioni).
- Contatti è una tabella contenente informazioni su varie persone.
- Un contatto ha un campo organization_id che è una chiave esterna di Organization, id
- Gestiamo un caso in cui un contatto non ha un'organizzazione (organization_id = null) è un "freelance" ...
- Organizzazione è una tabella contenente informazioni sulle organizzazioni. Un'organizzazione è collegata a molti contatti.
- Fattura è una tabella contenente informazioni sulla fattura.
Il problema: Supponiamo che un contatto A abbia una fattura X e che il contatto cambi l'organizzazione (dopo la transazione). Chi possiede la fattura? (in altre parole, come collego le fatture a determinate entità).
Possibili soluzioni che ho esplorato
- Collega Fattura a Organizzazione con una chiave esterna (organization_id) nella tabella Fattura.
Tuttavia, questo non gestisce il caso in cui un contatto non ha un'organizzazione (è un libero professionista). Se tale contatto ha una vendita / fattura ... il sistema non può gestirlo .
- Collega Fattura a Contatti con una chiave esterna (contact_id) nella tabella Fattura.
Tuttavia, se un contatto cambia organizzazione, quell'organizzazione erediterà le fatture passate del contatto (che è ERRONE).
- Sul front-end, genera automaticamente un'organizzazione in base alle informazioni di un contatto quando quel contatto è un "freelancer".
Per essere onesti, non mi piace questa soluzione. Sembra un trucco modesto.
- Forza i contatti per avere un'organizzazione ...
Spero ci sia un'altra soluzione oltre a questa ...
EDIT # 1
Dopo aver analizzato alcune risposte, ho capito che manca un'importante informazione. Il piccolo sistema ERP sarà utilizzato da molti clienti, alcuni dei quali seguono il modello B2B (Business-to-Business) e altri che seguono il B2C (Business-to-Customer) modello. Nel modello B2C, i Contatti NON hanno un'organizzazione. Ma dovrebbero comunque essere in grado di avere progetti / vendite ad essi associati.