Bagaimana Anda versi / melacak perubahan ke tabel SQL?

16

Saat bekerja di tim pengembang, tempat semua orang membuat perubahan pada tabel lokal, dan tabel pengembangan, bagaimana Anda menyimpan semua perubahan dalam sinkronisasi? File log pusat tempat semua orang menyimpan perubahan sql mereka? Halaman wiki untuk melacak mengubah pernyataan tabel, file .sql individual yang dapat dijalankan oleh dev untuk membawa db lokal ke versi terbaru? Saya telah menggunakan beberapa solusi ini, dan saya berusaha untuk mendapatkan solusi solid yang baik yang berhasil, jadi saya menghargai ide Anda.

kawan
sumber

Jawaban:

4

Saya menggunakan alat Migrasi Database berbasis kode dan menjaga kode migrasi di kontrol sumber.

Dengan menggunakan cap waktu sebagai nomor versi, sejumlah pengembang sebagian besar bebas untuk menambahkan migrasi sesuka mereka dan kami dapat menjalankan alat Migrasi terhadap salinan basis data kami dengan percaya diri.

Saya dulu menggunakan SQL Script di bawah kontrol versi, tetapi menemukan pendekatan berbasis kode jauh, lebih mudah untuk bekerja dengan karena mereka semua berada dalam satu "tempat" logis dan mampu mengeksekusi semua skrip yang diperlukan dengan satu perintah.

quentin-starin
sumber
4

Saya tidak melakukannya sendiri, tetapi beberapa pengembang mempertahankan koleksi skrip SQL di bawah kendali sumber yang, ketika dijalankan, dapat membuat kembali tabel database untuk tujuan pengujian, dan membangun database kosong untuk tujuan produksi.

Teknik yang sama dapat digunakan untuk versi database di situs pelanggan, ketika bidang atau tabel perlu ditambahkan atau dihapus, atau transformasi data perlu dilakukan.

Robert Harvey
sumber
3

Buat skrip di bawah kontrol versi dan integrasi berkesinambungan untuk memverifikasinya

Salah satu pendekatan yang berhasil bagi saya adalah membuat setiap pengembang bekerja dengan skema mereka sendiri yang dapat mereka lakukan sesuai dengan keinginan mereka. Skema mereka dapat dirusak dan diisi dengan data uji yang diambil dari satu set skrip versi terkontrol yang berkontribusi bagi semua pengembang.

Membangun integrasi berkelanjutan setiap malam mengambil versi terbaru dari semua skrip dan berusaha untuk membangun basis data uji kohesif dari mereka. Aplikasi kemudian memiliki serangkaian tes integrasi dan fungsional yang dijalankan untuk memverifikasi bahwa skema saat ini sesuai dengan kandidat rilis saat ini.

Sebelum memulai jalan ini, ada desain database yang cukup solid di tempat dan DBA selalu mengawasi hal-hal untuk mencegah pengembang menjadi gila dengan denormalisasi dan kengerian lainnya.

Kontrol versi sangat membantu di sini karena perubahan pada skrip segera terlihat. Kami juga menggunakan VERSIONtabel database untuk mengidentifikasi keadaan keseluruhan dari database. Ini adalah urutan bilangan bulat sederhana dan tidak ditautkan ke aplikasi tertentu.

Secara keseluruhan, ini bekerja dengan baik dan berarti bahwa pengembang tidak lagi takut mengubah tingkat kegigihan karena mereka selalu dapat membatalkan skema mereka sendiri tanpa mempengaruhi orang lain.

Gary Rowe
sumber
2

Jika Anda berada di toko MS, Visual Studio 2010 memiliki beberapa alat kontrol versi database yang bagus, yang juga dapat menghasilkan skrip perubahan / penerapan berdasarkan perbedaan antara dua database.

CaffGeek
sumber
2

Seiring dengan menjaga skemata dan skrip SQL lainnya di bawah kontrol versi, praktik praktis lainnya adalah mempertahankan tabel 'versi skema' dalam DB yang sebenarnya .

create table schema_migrations (
    `appliedAt` timestamp not null default CURRENT_TIMESTAMP,
    `migrationCode` varchar(256) not null,
    `extraNotes` varchar(256),
    primary key (`migrationCode`)
)
Dan McGrath
sumber
1

Pendekatan yang saya gunakan adalah menyediakan satu tabel untuk parameter. Tabel ini akan memiliki satu pasangan nama / nilai untuk versi yang dihidupkan oleh basis data. Ini memberi saya dua manfaat: Saya punya cara memverifikasi database hanya memperbaiki telah diterapkan melalui aplikasi, dan saya bisa menggunakan nilai itu untuk skrip SQL saya.

Skrip SQL akan membuat tabel baru, mengubah kolom, dan pekerjaan apa pun yang diperlukan pada database untuk mempromosikan skrip dari versi sebelumnya. Idealnya saya juga akan memiliki skrip rollback, tetapi sebagian besar waktu saya tidak.

BTW, seluruh pendekatan ini telah diotomatisasi sebagai bagian dari Ruby on Rails, lengkap dengan skrip rollback. Saya suka ide itu, tetapi tidak semua kerangka melakukan itu. Ketika saya tidak menggunakan Ruby on Rails, saya menggunakan pendekatan yang diuraikan di atas.

Berin Loritsch
sumber