funzioni "flessibili" in SQL Server 2012? [chiuso]

0

Sto cercando una cosa molto esotica e non ho idea se esiste affatto in SQL Server 2012. (Per favore perdonami - il mio background è in T-SQL, ma non ancora i dettagli di SQL 'programming' .) Quindi, se questo 'questo' è un UDF o SP o qualcos'altro - non lo so.

La sfida è avere qualcosa di così flessibile da poter restituire una tabella con uno o più record e un elenco di campi determinato in fase di runtime. Immagino qualcosa di simile a un tavolo virtuale, ma "più leggero" e più veloce. È fattibile (e come)?

Ad esempio, supponiamo di avere due record (ID in 1 e 2 ) ei loro valori per il campo ' name ' sono ' R1 ' e ' R2 '. Qualche altra logica mi fa venir voglia di combinarli in un record con ID ' virtual1 ' e due nomi di campi, ' F1 ' e ' F2 ' con valore ' R1 ' e ' R2 ' - molto molto ribassato, ma questo mi piacerebbe ottenere ...

    
posta 18.04.2014 - 11:11
fonte

3 risposte

2

Non sei sicuro che questo soddisfi le tue esigenze, ma le visualizzazioni possono essere molto dinamiche se sai come usarli correttamente. Le tabelle dovrebbero essere ben strutturate e contenere i dati esattamente una volta, tuttavia le viste possono organizzare queste tabelle con qualsiasi combinazione di colonne che si possa immaginare, dato che si sa come definirle in una query. Penso che questo sia un modo molto efficace per organizzare un database senza dover sacrificare una buona struttura del database. Tuttavia stiamo parlando della creazione di una tabella da colonne da tabelle esistenti .

Se si desidera creare una tabella da zero, probabilmente si dovrebbe esaminare tabelle temporanee (vedi nella sezione Tabelle temporanee di seguito). Queste tabelle scompaiono quando si disconnette, rendendole ideali per contenere informazioni per l'esecuzione di varie attività. Come un normale tavolo, puoi renderli in grado di contenere qualsiasi tipo di informazione desideri. Naturalmente, devi ancora dedicare del tempo a definire ogni campo singolarmente, tuttavia, supponendo che tu stia scrivendo uno script dinamico, questo dovrebbe essere un compito banale.

L'alternativa è che si sta lontani da SQL Server del tutto e si utilizzano solo database di tipo NoSQL. Questi sono veramente dinamici e sono destinati a essere modificati al volo. Se avere un database dinamico fosse abbastanza importante, considererei l'uso di NoSQL come mongodb piuttosto che SQL Server.

    
risposta data 18.04.2014 - 17:43
fonte
1

SQL Server ha la possibilità di ospitare assembly .NET quindi, in teoria, potresti scrivere codice per farlo fare quello che vuoi.

In caso contrario, c'è sempre EAV , ma non lo farei lo auguro al mio peggior nemico.

Quello che devi veramente fare è capire come puoi limitare il tuo ambito. Invece di costruendo una piattaforma interna , cerca di capire il minimo possibile di flessibilità aggiuntiva che soddisferà i requisiti del tuo software e implementalo. La mia ipotesi è che puoi farlo con una tabella personalizzata e alcuni DDL .

    
risposta data 18.04.2014 - 17:55
fonte
-1

Può essere fatto (e in effetti è stato fatto), ma non è una funzionalità di SQL Server e non è particolarmente 'leggero'.

Un sistema di gestione di database relazionali memorizza tutti i suoi dati nelle tabelle (ovvero l'elemento 0 nelle 12 regole di Codd). La flessibilità che descrivi viene quando definisci tabelle che definiscono 4 cose: tabelle, righe, colonne e valori.

  • La tabella 'tabelle' elenca tutte le tue tabelle (id tabella, attributi).
  • La tabella 'colonne' elenca le colonne in tutte le tabelle (id tabella, id colonna, attributi).
  • La tabella 'righe' elenca le righe in tutte le tabelle (ID tabella, ID riga).
  • La tabella 'valori' elenca i valori in tutte le tabelle (id tabella, ID riga, id colonna, valore). se non vuoi tutte le stringhe, puoi avere più tabelle 'valori'.
  • Potrebbero esserci altre tabelle di ricerca per attributi e tipi, a seconda della fantasia che vuoi ottenere.

Puoi accedere ai dati generando qualche SQL piuttosto elegante che unisce le 4 tabelle alla tabella virtuale che hai menzionato.

Forse non quello che avevi in mente, ma può fare quello che hai chiesto.

E sì, questa è una piattaforma interna e ha alcune caratteristiche in comune con un Tabella dei contenuti . Come menzionato in questi riferimenti, alcune piattaforme molto conosciute usano questa tecnica in misura maggiore o minore, specialmente quando tabelle, campi e relazioni devono essere definiti al volo. Mi vengono in mente Microsoft CRM e Oracle Financials. Basta non farlo a meno che tu non ne abbia davvero bisogno. Quindi non aver paura.

Ovviamente un sistema costruito in questo modo sarebbe quasi impossibile da interrogare direttamente in SQL. Di norma, gli utenti finali di tali sistemi non scrivono SQL, ma utilizzano invece la query e gli strumenti di reporting forniti come parte del sistema. È anche possibile che il sistema generi viste in tempo reale per presentare le tabelle interne in un formato relazionale standard, sul quale è possibile scrivere query SELECT standard e utilizzare strumenti di reporting orientati a SQL.

    
risposta data 18.04.2014 - 16:45
fonte

Leggi altre domande sui tag