Stiamo sviluppando un'applicazione .NET con un back-end di SQL Server. Il client richiede la possibilità di aggiungere in modo dinamico attributi personalizzati alle entità dopo che l'applicazione è stata distribuita.Consentire agli utenti finali di aggiungere dinamicamente colonne a una tabella
Come suggerito in a similar question, è possibile creare una tabella che conterrà quindi una riga per ogni valore di attributo personalizzato (modello Entity-attribute-value). Tuttavia, stiamo considerando di consentire agli utenti finali di modificare effettivamente la tabella (also suggested nella stessa domanda), ad esempio aggiungendo e rimuovendo colonne.
(Edit: come notato nei commenti, DDL non sarebbe stato eseguito direttamente dagli utenti o l'applicazione, ma attraverso le stored procedure per garantire che tutto fili liscio)
ragioni principali sono:
- Prestazioni migliorate/attributi ricercabili
- Gli attributi sono quasi sempre obbligati a comparire come colonne, ad es. in una griglia di dati nell'interfaccia utente o durante l'estrazione di dati per un'ulteriore elaborazione in Excel/PowerPivot.
- dati è fortemente tipizzato (al contrario di memorizzare tutti i valori degli attributi come varchar)
- Un modello di dati semplificato
Esistono avvertimenti che dovremmo essere a conoscenza?
Le cose che vengono in mente sono: operazioni che potrebbero essere in grado di gestire il cambiamento struttura dati
- backup/ripristino questi cambiamenti (una vista dipendente dovrebbe eseguire un
select * from table
per includere eventuali colonne aggiunte). - ...
Qualsiasi ingresso riguardo l'approccio è molto apprezzato.
Questo è probabilmente un caso in cui un modello [Entity-attribute-value] (http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) deniturato dove sono gli attributi memorizzato come righe sarebbe in realtà più sensato. – mellamokb
Sì, per favore non lasciare che gli utenti lanciano una chiave inglese nel database. Almeno con EAV puoi avere un certo controllo su quello scempio che stanno provocando ... http://sqlblog.com/blogs/aaron_bertrand/archive/2009/11/19/what-is-so-bad-about-eav -anyway.aspx –
@AaronBertrand, grazie per il link, alcuni buoni punti lì. Tuttavia, egli menziona gli stessi inconvenienti che ci hanno indotto ad esplorare l'approccio non EAV. Non permetteremo agli utenti di eseguire direttamente DDL. Un paio di procedure memorizzate servirebbero da repellente per chiave inglese, assicurando che le operazioni di aggiunta/rimozione funzionino senza intoppi. Inoltre, solo gli utenti qualificati avrebbero il permesso di eseguirli. – bernhof