Come è possibile conciliare lo sviluppo dichiarativo del database e le mozioni dei dati non banali?

4

Tornando a SQL Server dopo diversi anni di distanza, trovo i progetti Visual Studio Database (e ora SSDT ) molto eccitanti, poiché mirano a offrire un modo per sviluppare database in modo dichiarativo, piuttosto che dover manipolare gli script di modifica.

Tuttavia, l'elefante nella stanza è il "movimento dei dati" (non sono sicuro che sia un termine ufficiale): non è troppo difficile scrivere automaticamente una semplice modifica in una tabella, ma se stai normalizzando / denormalizzando, le cose si fanno pelo molto velocemente.

Gert Drapers ha detto tanto in questo video TechEd , e che stanno cercando di elaborare un modo di lavorare con queste complesse migrazioni di dati.

La domanda: Questo mi ha fatto riflettere. Come hai potuto fare questo? C'è un modo - anche in teoria - per definire queste migrazioni di dati in modo dichiarativo? O anche un modo non dichiarativo che potrebbe essere combinato elegantemente con i bit dichiarativi? Qualcosa di simile esiste già in altri framework (ho vagamente sentito qualcosa su Ruby / Rails?)

(Mi chiedevo se pubblicarlo su dba , ma non sono sicuro che gradiscano "buone domande soggettive" (se questo è uno), sentiti libero di migrare se necessario)

    
posta Benjol 11.08.2012 - 11:49
fonte

2 risposte

3

Dopo aver cercato un po ', ho trovato questo riferimento di brevetto dal 2002 per un "motore di trasformazione dei dati dichiarativo":

link

(Disclaimer: quel tipo di brevetti sono la ragione per cui ritengo che il sistema di brevetto del software americano sia totalmente imperfetto e debba essere modificato).

Tuttavia, non so se qualcuno abbia realizzato un prodotto basato su questo brevetto per l'utilizzo che hai descritto sopra. In teoria, dovrebbe essere possibile, eseguendo questi passaggi:

  1. crea un nuovo schema del database come copia di quello esistente (versione 1)
  2. applica le trasformazioni dello schema per trasformarlo in "versione 2"
  3. applica la migrazione dei dati dalla versione 1 del database alla versione 2 del database
  4. sostituisce la versione 1 del database con la versione 2

Se questa è una buona idea per risolvere il problema del "trasferimento dei dati" in questo modo, dipende molto dalle circostanze e dal sistema di database, poiché implica la creazione di una copia completa invece di applicare la migrazione sul posto. Dove funziona, puoi risolvere il passaggio 3 con qualsiasi strumento "Extract-Transform-Load" disponibile sul mercato. AFAIK, strumenti come Microsoft SSIS o Oracle ODI sembrano offrire definizioni dichiarative delle regole di trasformazione e non dichiarative.

    
risposta data 11.08.2012 - 12:56
fonte
1

Se si utilizza il codice Entity Framework per la prima volta per gestire lo schema del database, esiste un'API di migrazione (simile alle migrazioni di Ruby on Rails). Sebbene tu stia usando C #, in sostanza "dichiari" le migrazioni nel codice. E il framework gestisce i meccanismi per te. In molti casi, solo l'atto di creare una nuova istantanea di migrazione è sufficiente per consentire al sistema di rilevare automaticamente e far funzionare la migrazione. Ecco alcuni riferimenti che illustrano come funziona

Articolo di Visual Studio Magazine

ADO.NET Blog del team

    
risposta data 11.08.2012 - 22:53
fonte

Leggi altre domande sui tag