creazione dinamica di nuove tabelle di ricerca in base ai valori in tabella dati principale

StackOverflow https://stackoverflow.com/questions/673805

  •  21-08-2019
  •  | 
  •  

Domanda

Sto lavorando su un'applicazione che accetta tutti i dati CSV caricati, lo memorizza insieme ad altri insiemi di dati che sono stati caricati in precedenza, e quindi produce un output (CSV o HTML) in base alla selezione dell'utente che colonne / valori che desidera venga restituito. La banca dati sarà ampliato per gestire automaticamente nuove colonne / differenti e tipi di dati come richiesto. Questo è di preferenza a un modello entità-attributo-valore.

Esempio - il caricamento di questi 2 set a un database vuoto:

set di dati A:

name  | dept  | age   
------+-------+------
Bob   | Sales | 24
Tim   | IT    | 32

set di dati B:

name  | dept  | age  | salary
------+-------+------+--------
Bob   | Sales | 24   | £20,000
Tim   | IT    | 32   | £20,000

Sarà programatically modificare la tabella 'data' in modo che l'importazione di set di dati risultati A in 3 colonne di nuova creazione (nome, reparto, età). L'importazione di set di dati risultati B in 1 colonna di recente creazione (stipendio). Al momento, dimenticare se i set di record dovrebbero essere combinati o meno e che non ci sia la normalizzazione.

Il problema che ho è che alcune colonne avranno anche valori di ricerca - diciamo che la colonna Dept a un certo punto nel futuro hanno associato i valori che danno l'indirizzo e numeri di telefono di quel reparto. Lo stesso potrebbe essere vero per la colonna Salary, alzando lo sguardo raggruppamenti fiscali, ecc.

Il numero di colonne in questo grande tavolo non deve diventare troppo alto (alcune centinaia), ma sarà abbastanza alto per voler all'utente di amministrare la struttura della tabella di ricerca e dei valori attraverso un pannello di amministrazione piuttosto che avere a coinvolgere gli sviluppatori di volta in volta .

La domanda è se utilizzare singole tabelle di ricerca per ogni colonna (value, descrizione), oppure una tabella di ricerca combinato che fa riferimento alla colonna (colonna, valore, descrizione). Normalmente avrei optare per le singole tabelle di ricerca, ma qui l'applicazione sarà necessario creare in modo automatico (ad esempio lookup_dept, lookup_salary) e quindi aggiungere un nuovo join nell'istruzione SQL maestro. Ciò avverrebbe, su richiesta dell'utente, piuttosto che quando la colonna aggiunto (per evitare centinaia di tavoli vuoti).

La tabella di ricerca combinata invece dovrebbe essere unito più volte sulla tabella di dati, selezionando sul nome della colonna ogni volta.

le ricerche individuali sembra avere senso per me, ma io possono essere abbaiavano completamente l'albero sbagliato.

È stato utile?

Soluzione

Sono d'accordo che le singole tabelle è preferibile. E 'più scalabile e migliore per l'ottimizzazione delle query. Inoltre, se in futuro gli utenti vogliono più colonne su una particolare ricerca allora si può aggiungere.

Sì, l'applicazione dovrà creare automaticamente tabelle e vincoli:! Io normalmente non farlo, ma allora questa applicazione è già alterando le tabelle esistenti e l'aggiunta di colonne a loro, che io normalmente non fare neanche

Altri suggerimenti

Ah, l'idea " Un vero lookup table ". Una delle rare volte Concordo con l'onorevole Celko. ricerca di Google anche

tavoli individuali ogni volta. E ' "correggere", nel senso di database.

La mia ragione (senza normalizzazione pedanti per favore): ogni riga in una tabella contiene una sola entità. nomi ad esempio frutta, auto fa, marche di telefonia. Per mescolare loro è una sciocchezza. Potrei avere una marca di telefono chiamato "Apple". Ehm ... aspetta un attimo ...

Hai detto,

  

Questo è di preferenza a un modello entità-attributo-valore.

Ma mi sembra che è esattamente quello che ti serve.

Si consiglia di utilizzare un triplestore RDF, e interrogare con SPARQL.

Dimentica SQL, questo è un lavoro per RDF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top