Her şema diyagramı doğru başlar ve yalancı olarak biter; ER diyagramını otomatik oluşturmayan her ekip bunu yaşar. Biri onu lansmandan bir hafta önce çizer, wiki'de gururla yerini alır, sonra ürün yayına çıkar. Yirmi migration sonra hâlâ bir users tablosu (deleted_at kolonu olmadan), o zamandan beri ikiye bölünmüş bir orders tablosu ve Mart'ta refactor edilip kaldırılmış bir ilişki gösterir. Yeni mühendisler onu okur, ona inanır ve artık var olmayan bir veritabanının resmi üzerine inşa eder.
Olağan tepki suçluluktur: güncel tutmalıydık. Ama her migration'dan sonra bir diyagramı elle güncellemek kimsenin kazanamadığı bir angarya, bu yüzden asla yapılmaz. Kalıcı çözüm, diyagramın nereden geldiğini değiştirmektir. Diyagram şemanın yanında bakımı yapılan bir şey değil de şemadan üretilen bir şeyse kayma imkânsız hâle gelir, çünkü resim her zaman güncel gerçeğin bir görünümüdür.
Diyagramı yazılan değil, türetilen bir şey olarak gör
Şeman zaten kanonik bir yerde yaşıyor: çalıştırdığın migration'lar ve herhangi bir ortamdan dump edebileceğin DDL. Doğruluğun kaynağı bu ve makine tarafından okunabilir. Elle bakımı yapılan bir diyagram bu gerçeğin ikinci bir kopyasıdır ve herhangi bir şeyin iki kopyası birbirinden kayar. Yapılacak hamle, diyagramı şemanın bir izdüşümü yapmaktır; tıpkı bir raporun bir tablonun izdüşümü olması gibi: istendiğinde yeniden üretilir, asla elle düzenlenip bayatlatılmaz.
Pratikte bu şu demek: güncel resmi istediğin her an güncel şemayı içeri verirsin ve diyagramı dışarı alırsın. Elle uzlaştırma yok, "buna en son kim dokundu" yok, bayat ilişkiler yok.
ER diyagramını zaten dump ettiğin DDL'den oluştur
Özel bir export'a ihtiyacın yok. Her veritabanı şemasını SQL olarak verebilir ve LetDraw'un okuduğu da tam olarak bu SQL. Postgres'te tek bir komut; MySQL ve diğerlerinin de kendi karşılıkları var.
# Postgres: dump just the schema, no data pg_dump --schema-only --no-owner mydb > schema.sql # then: Generate from Code → paste schema.sql → get the ER diagram
Koddan Oluştur penceresini aç, dosyayı yapıştır; LetDraw diyagramı kurar: tipli kolonlara sahip tablolar, işaretlenmiş primary ve foreign key'ler ve REFERENCES ifadelerinden çizilmiş, düzgün crow's-foot uçlu bire-çok çizgiler. Bir öğleden sonra boyunca dikdörtgen sürüklemek artık tek bir yapıştırma ve gerçek DDL'den geldiği için tasarımı gereği doğru.
On saniyede yeniden ürettiğin bir diyagram asla bayatlamaz, çünkü kimsenin onu güncellemeyi hatırlaması gerekmez.
ER diyagramını güncel tutmak için iş akışına bağla
Diyagramı üretmek ucuz olduğunda onu dürüst kalacağı bir yere koyabilirsin. Kaymayı yapısal olarak imkânsız kılan birkaç alışkanlık:
- Her release'te yeniden üret. Release kontrol listene "ER diyagramını
schema.sqldosyasından yenile" maddesini ekle. Bu cümleyi okumak, onu yapmaktan daha uzun sürer. - Yeniden çizme, karşılaştır. Bir migration geldiğinde taze bir diyagram üret ve karşılaştır. Yeni tablo, yeni kolon, değişen key: değişiklik görünür olur ve yerinden oynamayan kısımlara elle eklediğin notları korursun.
- Kapsamı değişiklikle sınırla. Bir review'da yalnızca konuşulan tabloları yapıştır. Güncel olduğu kanıtlanabilir, odaklı altı tablolu bir ER diyagramı, belki güncel olan kırk tablolu bir posteri geçer.
- Kod olarak da sakla. Diyagramı yeniden Mermaid ya da D2'ye çevir ve migration'ın yanına commit'le; böylece resim değişiklikle birlikte aynı pull request'te yol alır.
Şema diyagramının amacı güvendir
Bir şema diyagramı ancak insanlar kontrol etmeden ona inandığında yerini hak eder. Bu inancı kazanmanın yolu disiplin değil; ters giden insan adımını ortadan kaldırmaktır. Resmi zaten bakımını yaptığın DDL'den üret, şema her değiştiğinde yenile; diyagram bir müze parçası olmaktan çıkıp ekibin gerçekten başvurduğu bir şeye dönüşür. Tasarımı gereği doğru, varsayılan olarak güncel.
Şemanı dump et, bir kez yapıştır ve zihnindeki modelin gerçekten çalıştırdığın veritabanına ne kadar yakın olduğunu gör.