Prestazioni: una tabella o più tabelle (generate a livello di codice) per la stessa entità logica?

1

Voglio chiedere qualche suggerimento per un'architettura che posso implementare per un'applicazione Java che ho bisogno di creare (pensieri iniziali sotto).

Si suppone che sia un'applicazione Swing locale per il monitoraggio degli aspetti finanziari di più siti di costruzione. Simile a Excel ma con alcune funzionalità aggiuntive come i dati postali ecc.

Dopo aver riflettuto, mi è venuta l'idea di utilizzare un database Derby con una tabella separata per i client, un'altra per le categorie di prodotti utilizzati e più tabelle "ConstructionX", ciascuna contenente record per un diverso sito di costruzione, creato dinamicamente tramite JDBC.

Quest'ultima parte è ciò di cui sono più preoccupato perché non sembra davvero una buona soluzione programmaticamente ma lo fa pragmaticamente .

Non ho molta esperienza nella creazione di applicazioni come questa, quindi ecco la mia domanda: c'è un modo migliore per progettare questo database? Sono aperto a suggerimenti (per favore non pubblicarlo su TheDailyWTF).

(Inizialmente avevo posto questa domanda su StackOverflow ed è stato reindirizzato qui)

Come nota a margine (dato che qualcuno su SO ha suggerito qualcosa di simile anche a questo): Inizialmente avevo pianificato di creare una sola tabella "Costruzione" che conservasse i record per i tutti siti di costruzione in cui ogni record sarebbe taggato con un numero di sito di costruzione a cui fa riferimento (eventualmente formando una relazione con una tabella contenente tutti i siti). Tuttavia, ero preoccupato per i tempi di esecuzione delle istruzioni "SELECT" (quando si visualizzano tutti i record solo per un sito specifico). Qualcuno può confermare che sarebbe una soluzione migliore qui?

    
posta Cube. 23.08.2016 - 14:02
fonte

2 risposte

5

Generare tabelle separate per la stessa entità in base a un valore di dominio è generalmente una cattiva idea.

ParlandodiCONNSTRUCTIONeCONSTRUCTION_SITE:

  • Assicuraticheletabellesianoindicizzateadintervalli
  • COSTRUZIONEhaunPK
  • CONSTRUCTION_SITEhaunPK
  • COSTRUZIONEhaunFKcheindicaCONSTRUCTION_SITE

CisaràunindiceperogniPKeogniFK.Ilmotoredidatabasesioccuperà,ilpiùvelocementepossibile,difiltrarelerighechedesideri.Eccoacosaservonoimotorididatabase.

Comesisuoldire:"Ottimizzazione prematura, ecc."

    
risposta data 23.08.2016 - 15:27
fonte
0

La base su cui mi è stato insegnato è che se c'è un'enumerazione di cui avrai bisogno, probabilmente dovrebbe essere definita come la chiave primaria in una tabella e quindi utilizzata come chiave esterna.

    
risposta data 26.08.2016 - 18:38
fonte

Leggi altre domande sui tag