PHP - Veritabanı şeması: sürüm kontrolü, dallanma, göçler

1 Cevap php

Ben php projelerde veritabanı şema sürüm için tekrar sistemi (veya bulmak) ile gelip çalışıyorum.

Php için mevcut Rayları tarzı göç projeleri vardır. http://code.google.com/p/mysql-php-migrations/ iyi bir örnektir. Bu şubeler arasındaki çatışmalar ile yardımcı göç dosyaları için damgalarını kullanır.

General problem with this kind of system: When development branch A is checked out, and you want to check out branch B instead, B may have new migration files. This is fine, migrating to newer content is straight forward.

Şube daha yeni bir göç dosyalar varsa, en yakın paylaşılan yama aşağıya doğru göç etmek gerekir. Şube A ve B ölçüde farklı kod tabanları varsa, hatta daha aşağı göç etmek zorunda kalabilirsiniz. Bu anlamına gelebilir:, B Çıkış paylaşılan yama sayısını belirlemek, A check out, bu yama aşağıya doğru göç ederler. Bu gerçek uygulamalı yamalar, Sonra B. çıkış şube B mevcut olmadığı için A yapılabilir ve yeni B yama göç gerekir. A. B den geçerken yine süreci tersine

Proposed system: When migrating upwards, instead of just storing the patch version, serialize the whole patch in database for later use, though I'd probably only need the down() method. When changing branches, compare patches that have been run to patches that are available in the destination branch. Determine nearest shared patch (or oldest difference, maybe) between db table of run patches and patches in destination branch by ID or hash. Could also look for new or missing patches that are buried under a number of shared patches between the two branches.

Otomatik () yöntemleri aşağı muhafaza db tablosunu kullanarak, en yakın paylaşılan yama aşağı birleştirme ve ardından BRANCHE en son yama kadar birleştirme.

My question is: Is this system too crazy and/or fraught with consequences to bother developing? My experience with database schema versioning is limited to PHP autopatch, which is an up()-only system requiring filenames with sequential IDs.

Update, 2 years later

Bu eski bir yazı olduğunu, ama onlar eğilimli gereksiz yere karmaşık ve hata konum olarak ben gelişimi sırasında genel olarak göçler terk ettik olduğunu belirtmek istedim.

Bunun yerine, ben komut dosyaları oluşturmak kullanın:

  1. veritabanını temizleyin,
  2. şema oluşturmak,
  3. (gerçek içeriği) bilinen uygulama, veri ekleyebilir ve
  4. (geliştirme içeriği) fikstür veri eklemek.

Şube değiştirme, ya da diğer geliştiricilerin güncellemeleri alırken, bilinen bir duruma almak için tek bir komut ile tamamen veritabanını yeniden.

Üretim sunucuları hala veritabanı yamalar gerekiyor, ancak bu elle zaten yaratılmış olması gerekir.

1 Cevap

Eh, ben ileriye taşımak için herhangi bir neden bulmak mümkün değildi.

O gibi proje, burada:

http://github.com/Billiam/MySQL-PHP-AutoMigrations

Bazı aşk (doğru yorumlarda, birim test, asıl bug test) İhtiyaçları, ama şimdi benim için iyi çalışıyor gibi görünüyor.

Bu http://code.google.com/p/mysql-php-migrations/ Yukarıdaki fikirleri içerecek bir çatal, ve diğer bazı küçük şeyler.

Migrating down is done from methods saved in the database on the way up so that file changes (like those when switching between branches) do not affect downward migrations. Added two functions:

  • ve sonra göçler dizinde yeni göç kadar, eski paylaşılan göç aşağı göç kolları sihirli 'auto' fonksiyonu.
  • Gerçekte ne yapacağını oto gösteren işlev 'teklif'.

Ancak bu yaklaşımın potansiyeli (hatta beklenen) tuzaklardan işitme hala very açıktır.