Multivalore campi una buona idea?
-
13-09-2019 - |
Domanda
Sono stato recentemente introdotto la nuova funzionalità di Access 2007 che è campi multivalore. La mia impressione iniziale è che si tratta di una cattiva idea di fare uso di valori multipli in un unico campo. Tradizionalmente, se si voleva consentire per un record di avere diversi valori per un campo si creerebbe altri due tavoli e collegarli con le chiavi esterne. Questo permette una facile interrogazione e garantisce che i valori duplicati riferimento allo stesso elemento. Mantenere le liste in una cella sembra una violazione della finalità delle banche dati.
Ci sono buoni usi per questi campi che non mi fanno sentire sporco?
Soluzione
L'idea di campi multivalore è stato quello di sostenere facile creazione di oggetti report / interfaccia, inoltre, si può creare un modulo che visualizza dicono le categorie per un problema. Invece di fare un lavoro intenso, Dio non voglia si unisce, era presumibilmente più semplice per memorizzare:
meccanica, elettrica
come valore in un campo piuttosto che
meccanica Elettrico
Personalmente non mi piace e assumo questo tipo di campo è stato creato per il personale non tecnici come ragionieri :) (sto scherzando). No seriamente, non utilizzare questo a meno che non si sta creando uno strumento stupido che raramente chiunque utilizzerà e raramente qualcuno avrà mai di attingere.
Il modo corretto per gestire questa situazione è join duplicati, e senza valori multipli all'interno di colonne (questa è comunque tutto 3NF).
Un altro motivo per questo è stato creato è stato quello di sostenere i valori multipli all'interno di un elenco SharePoint.
Jon
Altri suggerimenti
See:
tipi di dati multivalore considerati nocivi: come pericoloso può essere un tipo di dati ?
Ho avuto un lungo colloquio con Suraj Poozhiyil, Access Program Direttore ... sia Suraj ed io sono d'accordo con tutto il cuore che gli sviluppatori non lo fanno bisogno di usare i campi multivalore. Le persone che capiscono i database hanno già un buon modo di attuazione molti a molti relazioni e otterranno alcun beneficio dai campi multivalore.
Quindi, la mia chiara e certa consulenza ai gli sviluppatori è di non usare più valori campi. Non hanno nulla da offrirci tranne il dolore potenziale.
Non proprio rispondendo alla domanda qui, ma i lettori avrebbe fatto piacere notare che v'è un intero settore di nicchia intorno all'idea di MultValued database :
Queste banche dati differiscono da un database relazionale nel senso che hanno funzionalità che supportano e incoraggiano l'uso di attributi avere una lista di valori, piuttosto che tutti gli attributi avente un singolo valore
Dal momento che in questo caso il motore di database ha estensioni al suo linguaggio di interrogazione per accogliere la natura multidimensionale del suo tabelle (che presumo di accesso, probabilmente non) allora non è davvero paragonabile ai campi multivalore in Access. Ma un interessante parallelo in ogni caso (per chi non ha in precedenza nemmeno sentito parlare di MultValued Database).
Un grande segmento del mercato di accesso non è sviluppatore, ma tipo di tecniche, gli utenti. Essi potrebbero non capire il valore di normalizzazione, ma possono ottenere qualcosa su cui lavorare. Hanno solo bisogno di qualcosa di facile ed è meglio di un campo di testo libero in cui la gente scrive dentro, dove la speranza che tutti i tipi la stessa cosa.
Come si impara di più, potrebbero iniziare a utilizzare altre tabelle e chiavi esterne. Ma, a volte, un campo multivalore è abbastanza buono.
campi multivalore possono facilmente evitare di dover creare una nuova tabella e di relazione.
Soda -> Tipi
Perché ho bisogno di un nuovo tavolo solo per dire che la Pepsi è disponibile in regolare, dieta, e altro ancora.
Vorrei che ci permettono di dare campi multivalore colonne, allora sarebbero proprio come un tavolo, ma con molto meno lavoro
BASTA DIRE NO!
se si sta imparando SQL, imparare il modo giusto e normalizzare le tabelle. se si sa progettazione di database farlo correttamente. Non ogni funzione è da utilizzare.
Necro-post ... Penso che la domanda avrebbe dovuto essere rivisto quando il filo iniziato, ma non voglio passare attraverso il processo di modifica ora.
La domanda è: "I campi multivalore una buona idea?"
La vera domanda che avrebbe dovuto essere chiesto è "multivalore campi in RDBMS una buona idea?"
Come altri hanno notato c'è un intero modello MVDBMS sostegno campi multivalore. Sono un esperto in questo campo e hanno lavorato con il modello da oltre 30 anni. Certo che è una buona idea a mio parere e ad altri che utilizzano la piattaforma ogni giorno. E sì, Caché non solo ha un grande modello multidimensionale stessa ma supporta anche il modello MVDBMS. Quindi, in questo senso, la risposta alla domanda è sì.
Ma per un RDBMS e in particolare MS ACCESS la risposta è quasi certamente NO perché né il modello RDBMS né che la piattaforma intrinsecamente supporta il concetto.
La risposta accettata è corretta, IMO, in quanto non si limita a rispondere alla domanda posta, risponde alla domanda che era destinato ad essere chiesto. Ma per essere meticoloso, per l'esatta domanda posta, la risposta accettata è errata.
Credo che la vera risposta è "E 'solo una buona idea se la piattaforma DBMS lo supporta, YES per MVDBMS e forse altre piattaforme NoSQL, NO per RDBMS."
Io davvero non mi piace i campi multivalore. Forse lo hanno fatto per rendere più facile di interfacciarsi con altri sistemi più valori, come il vecchio sistema / Unidata PICK. Scommetto che è divertente upsize un database di Access con un uso pesante di questa nuova funzionalità di SQL Server.