Tabella del database relativa a due tabelle

3

Stavo scrivendo un'app (apprendimento) e ho trovato questo problema.

Ho 3 table Orders , Customers e Suppliers .

Un ordine può riguardare solo un cliente o un fornitore e non vi è alcuna differenza concettuale tra un ordine cliente o fornitore.

Qual è il modo migliore / più performante per memorizzarlo?

  • Crea 2 tabelle separate: CustomerOrders e SupplierOrders
  • 2 campi in Crders : CustomerId e SupplierId
  • Utilizza gli intervalli di identificazione in Customers e Suppliers in modo che io sappia ad esempio 1-1000000 sono clienti e 2000000-3000000 sono fornitori
posta R. Gomez 18.12.2017 - 11:26
fonte

2 risposte

10

Utilizzare le gamme di identificazione per distinguere i clienti dai fornitori è una cattiva idea. Non farlo.

Il problema è nel dominio della contabilità / contabilità. Lo standard in quel dominio è di avere due raccoglitori, uno per le fatture dai fornitori e uno per le fatture per i clienti. Questa è una ragione per avere due tabelle.

Un altro motivo per avere due tabelle è che nella tabella degli ordini ci sarà un campo con l'importo dell'ordine / fattura. Sarà negativo per gli ordini dei fornitori? Allora cosa succede se hai bisogno di accreditare un cliente per una parte del loro ordine? O sei accreditato come parte di un ordine fornitore?

Due tabelle separate non diventano complesse, nel peggiore dei casi una duplicazione della logica. Ma fai attenzione e vedi come riutilizzare il codice tra le due tabelle, poiché ci sono delle somiglianze che possono trarre vantaggio dal riutilizzo del codice, ma man mano che procedi troverai più differenze che sono più facili da gestire con due tabelle.

Con una sola tabella ogni differenza può portare a molti if o switch.

Due tabelle non dovrebbero essere più lente in alcun modo, ma una tabella potrebbe portare a query più complesse che potrebbero essere più lente.

    
risposta data 18.12.2017 - 12:31
fonte
2

Tutti gli ordini hanno un cliente e un fornitore. Forse dovresti avere un campo per entrambi, ognuno dei quali ha un riferimento a chiave esterna a una singola tabella di parti, che a sua volta è 1: 1 collegato da clienti e fornitori. Questo ha l'ulteriore vantaggio di consentire ad alcuni clienti di essere anche fornitori.

    
risposta data 19.12.2017 - 00:55
fonte

Leggi altre domande sui tag