Qual è l'approccio migliore per sovrascrivere i campi in un database?

5

Ho un database che contiene progetti e ogni progetto contiene molti esempi. Voglio un valore soglia del livello del progetto, per attivare l'evidenziazione quando un campo sul campione è sopra questa soglia. Voglio anche essere in grado di ignorare la soglia a livello di campione individuale.

Quindi posso vedere due modi per implementarlo:

  1. mantieni il campo della soglia (solo) sul campione e attivalo per essere compilato quando il progetto viene salvato.

  2. hanno campi di soglia di livello di campionamento e di progetto e usano solo il campo di esempio quando è rilevante (sembra esserci qualche ridondanza con questo modello, sebbene rappresenti più accuratamente la situazione)?

Ci sono vantaggi / problemi con entrambi gli approcci?

    
posta wobbily_col 19.04.2013 - 15:11
fonte

3 risposte

1

In realtà è una semplice descrizione basata sulla frequenza con cui si aggiorna la soglia del progetto rispetto alla frequenza con cui si esegue una query sugli esempi.

Se la soglia del livello del progetto non viene aggiornata molto spesso, copiare la soglia su ogni riga di esempio (con forse una colonna aggiuntiva per indicare un valore sottoposto a override). Ciò renderà le query più semplici e veloci.

D'altra parte se aggiorni frequentemente la soglia predefinita. Mantenerlo a livello di progetto e ottenere il (minimo) risultato di prestazioni per il join per ogni query.

    
risposta data 20.04.2013 - 02:05
fonte
0

La tua seconda opzione offre la massima flessibilità con una complessità extra minima.

Nel record di esempio, avere un campo nullable che contiene il livello di soglia locale. Impostare il campo su null se il campione deve utilizzare la soglia predefinita dal progetto. Se stai usando SQL, è semplice unire le tabelle e usare isnull per afferrare il valore di soglia:

SELECT Field1, Field2, ISNULL(sample.threshold, project.threshold) as Threshold FROM ...
    
risposta data 20.04.2013 - 04:42
fonte
0

Vado con la tua seconda opzione, memorizza solo il valore di override sui record di esempio quando è diverso dalla soglia del progetto (memorizzato nel record del progetto).

Questa mi sembra la soluzione più pulita (memorizzazione delle informazioni sul progetto con il record del progetto e i dati specifici del campione con il campione), ma ancora più importante c'è un problema con la prima opzione.

Ad esempio, se memorizzi la soglia del progetto sugli esempi in cui non esiste una soglia specifica per il campione e hai una soglia di progetto di 5:

| Sample Name | Threshold | 
| Sample A    | 5         | 
| Sample B    | 5         | 
| Sample C    | 5         | 

Si aggiorna il campione C per avere una soglia di 6: sovrascritta

| Sample Name | Threshold |
| Sample A    | 5         |
| Sample B    | 5         |
| Sample C    | 6         |

Quindi aggiorni la soglia del progetto a 6:

| Sample Name | Threshold |
| Sample A    | 6         |
| Sample B    | 6         |
| Sample C    | 6         |

Se dovessi continuare a cambiare la soglia del progetto, non puoi distinguere C da A e B, il che significa che sarà anche cambiato in 5, il che potrebbe non essere quello che vuoi.

È possibile memorizzare un flag per indicare che la soglia è specifica del campione per evitare questa situazione, ma ciò sembra ridondante se confrontato con l'archiviazione della soglia del progetto sul progetto e con valori null nella soglia di esempio a meno che non sia impostato.

    
risposta data 21.04.2013 - 15:55
fonte

Leggi altre domande sui tag