Domanda

Supponiamo che ho un form che contiene tre 10 campi:campo1..field10.Memorizzare i dati di un form in una o più tabelle di un database, utilizzando probabilmente 10 colonne del database.

Ora supponiamo che un paio di mesi più tardi, che voglio aggiungere 3 più campi.E in futuro posso aggiungere/eliminare i campi da questo modulo in base alle mutevoli esigenze.Se ho una colonna di database per ogni campo del form, quindi avrei dovuto apportare modifiche al database ogni volta che cambia la forma.Questo mi sembra una manutenzione mal di testa.Ci deve essere un modo più sofisticato.

Quindi la mia domanda è, come faccio a progettare un modello di dati che è debolmente accoppiati con la mia interfaccia utente?Un concreto caso d'uso è un sistema di CRM che è estensibile/personalizzabile dagli utenti.

È stato utile?

Soluzione

A meno che non hai una buona ragione per fare questo, allora questo è generalmente una cattiva idea.Lo rende molto difficile da ottimizzare e scala database.

Se si deve assolutamente fare, poi Travis suggerimento è bene per piccoli tavoli, ma la sua non è davvero intenzione di scala che bene.

Altri suggerimenti

Si potrebbe abstract campi di una tabella separata in modo che siano molti-a-molti con la tabella del Formulario:

Modulo

ID
Nome
ecc.

Campo

ID
Etichetta
Valore

FormField

Idmodulo
FieldID

Il mio team si avvicinò con una soluzione per questo, quando ho lavorato per Quest Computing a MIRA (www.totalaims.com).In sintesi, abbiamo aggiunto schermate di manutenzione che ha permesso all'amministratore di aggiungere metadati e anche come risultato di aggiungere campi al database di alcune tabelle.I campi sono stati aggiunti anche alla loro manutenzione e ricerca automaticamente schermi.Abbiamo costruito questo sulla parte superiore del OpenACS.Si può scoprire di più www.openacs.org ricerca per "flexbase" o "dynfields" o guardare qui www.project-open.org/doc/intranet-dynfield/ .Questo ha funzionato abbastanza bene il loro principale svantaggio di essere un effetto collaterale del principale a testa cioèche l'aggiunta di campi, potrebbe essere fatto da parte di non-amministratori di database e di conseguenza le prestazioni potevano essere facilmente compromessa.

Ho fatto questo in passato, con una colonna XML nel database per memorizzare i campi aggiuntivi.Io di solito non sono un grande sacchetto di proprietà della colonna XML e quindi utilizzare XSD per applicare la convalida quando si fa gli aggiornamenti o inserti.Quando io sono il recupero di i dati che ho regole in XSL o il modello a oggetti di determinare se l'elemento viene visualizzato, quale ulteriore formattazione da applicare e per i moduli web che tipo di elemento di input da utilizzare in base al tipo di dati il nodo della proprietà.

Funziona davvero bene, se c'è bisogno di avere alcuni dati relazionale e altri dati memorizzati extensibly per evitare l'ampio tavolo con un sacco di null righe effetto.

Se non hai bisogno di fare relazionali cose con i dati, come l'adesione o la rotazione con le altre tabelle del database, quindi un semplice auto-contenuti modulo XML è una buona soluzione.

La maggior parte dei database ora sono di prima classe, il supporto di XML per questo genere di cose.In SQL Server, per esempio, è possibile applicare uno schema XSD per una colonna di tipo di dati XML proprio nel datbase.Nelle versioni più recenti c'è anche il supporto per l'indicizzazione su queste colonne.

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