Come può un gruppo tenere traccia delle modifiche allo schema del database?


67

Quali metodologie di controllo della versione aiutano i team di persone a tenere traccia delle modifiche allo schema del database?


Cosa stai cercando di realizzare qui? Stai cercando di avvisare le persone delle modifiche o creare una pista di controllo di chi ha cambiato cosa e quando? Qualcos'altro interamente?
ScottCher,

@Scott - Essenzialmente per essere in grado di creare quasi come una pista di controllo per altri sviluppatori - quindi sappiamo che abbiamo lo schema di sviluppo più aggiornato e che i siti di test e live possono essere facilmente controllati per vedere quale schema sono in esecuzione.
Toby,

1
Questo è simile alla domanda che ho appena pubblicato, ma penso che siano abbastanza diversi da rispondere a entrambi dba.stackexchange.com/questions/64/…
Beth Whitezel,

1
@BitOff - Sono d'accordo e penso che la mia risposta alla domanda a cui hai fatto riferimento sia qui. L'uso di uno strumento come PowerDesigner o ERWin può aiutare a controllare la versione della progettazione di un database: se il database è modellato esternamente e tutte le modifiche sono pianificate attraverso il modello, è possibile controllare e divulgare meglio tali modifiche per la revisione.
ScottCher,

1
Dai un'occhiata a Liquibase o Flyway
a_horse_with_no_name il

Risposte:


44

solo un paio di minuti fa stavo controllando questo: una tabella che dovrebbe esistere in tutti i progetti con un database , sembra abbastanza semplice da mettere in pratica, dai un'occhiata:

Si chiama schema_version (o migrazioni, o qualunque cosa ti piaccia) e il suo scopo è quello di tenere traccia delle modifiche strutturali o dei dati al database. Una possibile struttura (esempio in MySQL) è:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

inserire in schema_version ( key, extra) i valori ('001', 'versione dello schema');

Sia che tu aggiunga questa tabella dall'inizio del progetto o subito dopo aver distribuito la prima versione su un server di gestione temporanea o di produzione, dipende da te.

Ogni volta che è necessario eseguire uno script SQL per modificare la struttura del database o eseguire una migrazione dei dati, è necessario aggiungere anche una riga in quella tabella. E farlo tramite un'istruzione insert all'inizio o alla fine di quello script (che è impegnata nel repository di codice del progetto).

...


1
@David - Questa è quasi una domanda a sé stante, ma potresti spiegare molto rapidamente in che modo la tabella potrebbe fornire feedback al tuo VCS? Solo con una discarica manuale?
Toby,

@Toby - con una distribuzione, gli script sono stati inseriti in SVN e lo sviluppatore ha fornito il rev SVN o il bug # JIRA - noi (dbas) abbiamo inserito le loro note rapide e rev # in questa tabella. Per legarlo insieme, tuttavia, abbiamo creato una pagina Web in modo che punti a questa tabella con un collegamento ipertestuale a JIRA.
David Hall,

Sì. Fondamentalmente l'OP lo ha al contrario: usi gli script di distribuzione che versione, non lavori dai delta del database. Funzionano comunque solo in casi degenerati (semplificati): potrebbe essere necessario eseguire trasformazioni in più passaggi per aggiornare uno schema, che uno strumento non può generare all'indietro. Ma gli script di distribuzione possono gestirlo.
TomTom,

23

Penso che il metodo migliore sia generare il database come parte del processo di compilazione . Mantieni tutti gli script nel controllo del codice sorgente con il resto del codice e ognuno è responsabile del proprio ambiente.

In caso contrario, RedGate ha uno strumento per integrare il controllo del codice sorgente in SSMS e SQL Compare è utile per confrontare / sincronizzare gli schemi di MS SQL Server. Visual Studio Database Edition ha anche uno strumento di confronto degli schemi integrato .

Un'altra domanda SO mi porta a Migrator Dot Net che inizierò a indagare durante il mio abbondante tempo libero. Sembra un buon metodo, ma potrebbe essere più di un investimento in termini di tempo / spese generali di quanto tu sia disposto a fare.


La "edizione del database" di Visual Studio era un prodotto separato ma ora è inclusa nelle edizioni incluso Team Server. Personalmente preferisco lo strumento RedGate (SQL Compare) per mantenerli sincronizzati.
Tangurena,

12

eiefai ha già menzionato Una tabella che dovrebbe esistere in tutti i progetti con un database . Questo è un ottimo post sul blog, ma IMO fa solo parte di una soluzione funzionante per il controllo di revisione del database. Penso che qualsiasi tentativo di "rispondere" a questa domanda nel mondo reale debba prendere in considerazione alcune delle altre informazioni su VCS e database:


8

Ci sono un paio di angolazioni diverse per affrontare questa domanda, credo. L'angolo "primo strumento", credo, varierà in base alla piattaforma e alle preferenze personali. Caso in questione: sto usando un progetto di database in MS Visual Studio, ma non sono sicuro che questa sia un'ottima soluzione per MySQL. Conosco anche persone che sono abbastanza vendute sui loro strumenti preferiti da Redgate, Erwin, Embarcadero, ecc.

C'è anche un'angolazione "prima di tutto" per questa domanda, che (si spera) verrà rivisitata su questo sito nelle domande successive. Le pietre miliari di questo processo stanno mettendo il tuo schema sotto il controllo del codice sorgente e gestendo le modifiche in modo tale da poter applicare le modifiche dello schema dalla versione "x" alla versione "y" praticamente su richiesta.

Una risposta definitiva a questo argomento finirà per sembrare un libro, quindi probabilmente vale la pena iniziare facendo riferimento a uno: Redgate ha recentemente pubblicato un ebook gratuito chiamato " La guida di Red Gate allo sviluppo basato su team di SQL Server ", e mentre c'è molto da discutere, è un ottimo posto per iniziare a discutere, IMO. Contrariamente al nome, gran parte del materiale in questo libro è abbastanza generale da applicare a qualsiasi DB (non solo SQL Server) e qualsiasi set di strumenti (non solo Redgate). Se non l'hai già visto, vale sicuramente la pena scremare, almeno.

Infine, vale probabilmente la pena collegarlo nella "risposta legacy" di StackOverflow .


5

SchemaCrawler è il mio strumento per produrre un file di testo con tutti gli oggetti dello schema del database. Ho progettato questo output di testo in modo che sia leggibile dall'uomo, oltre che diffondibile da un output simile di un altro server.

In pratica, quello che ho scoperto è che l'output di un file di testo dello schema del database è utile, se fatto come parte della build. In questo modo, puoi controllare il file di testo nel tuo sistema di controllo del codice sorgente e avere una cronologia delle versioni di come il tuo schema si è evoluto nel tempo. SchemaCrawler è progettato per automatizzare anche questo, dalla riga di comando.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.