Devo mantenere un'applicazione che ha molte colonne che sono del tipo di dati di testo, con più valori inseriti al loro interno delimitati da virgole, barre o talvolta anche il carattere pipe (|). Sto cercando di capire perché mai vorresti farlo sulla Terra.Perché dovresti memorizzare un elenco delimitato in una colonna di testo SQL?
Ad esempio, una tabella di ordini ha una colonna denominata dati che contiene informazioni quali:
2x #ABC-12345 Widget, Black: $24.99 /4x #ABC-12344 Widget, Blue: $23.50
dove il /
separa gli elementi; c'è un codice VBScript che legge il valore da un recordset e lo analizza in un ciclo For
per la visualizzazione usando qualcosa di simile (e questo è praticamente esattamente come il codice legge, i nomi delle variabili e tutto) arydtls = split(rstmp("details"), "/")
. Questo metodo viene ripetuto in tutto il codice per varie tabelle.
Mi sembra come esso sarebbe 100x meglio (per non parlare più facile lavorare con) per solo avere i dettagli in una tabella separata e un collegamento ad esso (stranamente, per gli ordini che non fare questo, ma i dati non sempre corrispondono al campo di testo dei dettagli perché la tabella OrderDetail viene aggiornata nel codice, il campo dei dettagli viene trattato come di sola lettura nell'applicazione).
Il mio predecessore ha saputo qualcosa che io non ho, o ho ragione di dire "WTF? !!" quando guardo questo schema? Sembra che sia follemente inefficiente e difficile da mantenere in questo modo, e rende i rapporti in esecuzione più difficili perché i dati di cui ho bisogno potrebbero essere contenuti nei campi di testo O potrebbe essere in una dozzina di tabelle che hanno informazioni simili e sono utilizzate in diversi parti dell'applicazione
Questo è quello che pensavo. La metterò così: potrei fornire al Daily WTF probabilmente un mese di articoli basati solo sul codice di questo ragazzo. –
Consentitemi di aggiungere un altro potenziale scenario: * I dati di testo sono stati importati da un sistema legacy (eventualmente tabelle excel/word) e sono stati concepiti come memoria temporanea finché i dati non sono stati analizzati in una struttura normalizzata. La doppia archiviazione dei dati degli ordini sembra puntare a questo. – JohnFx
@JohnFx - buon punto, anche se immagino che il richiedente sarebbe consapevole del fatto che questi dati sono stati portati da un sistema legacy e il suo predecessore non ha progettato il DB. –