I miei requisiti sono:
- È necessario essere in grado di aggiungere dinamicamente campi definiti dall'utente di qualsiasi tipo di dati
- Devi essere in grado di interrogare rapidamente gli UDF
- È necessario essere in grado di eseguire calcoli sugli UDF in base al tipo di dati
- Devi essere in grado di ordinare gli UDF in base al tipo di dati
Altre informazioni:
- Cerco prestazioni principalmente
- Esistono alcuni milioni di record master ai quali possono essere associati dati UDF
- L'ultima volta che ho controllato, c'erano oltre 50 milioni di record UDF nel nostro database attuale
- La maggior parte delle volte, un UDF è associato solo a poche migliaia di documenti Master, non a tutti
- Gli UDF non vengono uniti o utilizzati come chiavi. Sono solo dati utilizzati per query o report
Opzioni:
Crea una grande tabella con StringValue1, StringValue2 ... IntValue1, IntValue2, ... ecc. Odio questa idea, ma la prenderò in considerazione se qualcuno può dirmi che è meglio di altre idee e perché.
Creare una tabella dinamica che aggiunge una nuova colonna su richiesta, se necessario. Inoltre, questa idea non mi piace poiché ritengo che le prestazioni sarebbero lente se non indicassi ogni colonna.
Creare una singola tabella contenente UDFName, UDFDataType e Value. Quando viene aggiunto un nuovo UDF, genera una vista che estrae solo quei dati e li analizza in qualunque tipo sia specificato. Gli articoli che non soddisfano i criteri di analisi restituiscono NULL.
Crea più tabelle UDF, una per tipo di dati. Quindi avremmo tabelle per UDFStrings, UDFDates, ecc. Probabilmente farebbe lo stesso di # 2 e genererebbe automaticamente una vista ogni volta che viene aggiunto un nuovo campo
XML DataTypes? Non ho mai lavorato con questi prima ma li ho visti menzionati. Non sono sicuro che mi darebbero i risultati che desidero, soprattutto con le prestazioni.
Qualcos'altro?