Code First vs Db First

Kısaca ORM(Object relational mapping) nedir?

ORM, yazılım ile veritabanı arasında katman görevi görür. Nesne tabanlı yazılım dillerinde veritabanı ile iletişimi sağlar.

Veritabanları lisanslı ürünlerdir ve genelde yıllık olarak lisanslandırılırlar. Yazılım hizmetini alan firma ve kurumlar ilerleyen zamanlarda kullandıkları veritabanını çeşitli nedenlerden dolayı değiştirebilirler. Hazırlanan yazılımlar ORM frameworkleri ile geliştirildikleri zaman bu değişimden maliyet açısından çok daha az etkilenirler.

ORM frameworkleri, yazılımın veritabanından bağımsız çalışmasını sağlar.

Veritabanı, ORM ve yazılım ilişkisi

ORM ile klasik veritabanı sorguları(SQL) yazılmaz. Onun yerine ORM’nin özelinde kullanılan sorgular ve fonksiyonlar kullanılır ve veritabanı ile ilgili yapılan(CRUD – Create Read Update Delete) işlemlerinde bunlar kullanılır. Geliştiriciler SQL öğrenmek yerine yazılım dilinin class ve objelerinden faydalanırlar.

Database

Veritabanı yazılım projeleri için neredeyse olmazsa olmazıdır. Gerek veri girişleri gerekse arşiv için tutulan log kayıtları gibi verilerin hepsi veritabanı üzerinde tutulmaktadır. Bu veriler de veritabanı içerisindeki tablolarda tutulur.

Yazılımı; geliştirmeye başlamadan önce tasarımı yapılır. Tasarım sırasında hem ekranlar çıkartılır hem de ekranlardan girilen değerlerin veritabanında nerede tutulacağı belirlenir.

SQL scriptleri ile, belirlenen tablolar veritabanı üzerinde oluşturulur.

Code First

Code first yaklaşımında ise; tasarım sırasında ortaya çıkarılan tablolar kullanılacak ORM framework yapısına göre objelerin hazırlanması ile yapılır. Hazırlanan bu objelere aynı zamanda entity model de denilmektedir. Entity modeller aslında veritabanı üzerindeki tabloları ifade eder yani map edilmiş olur. Entity modellerin oluşturulmuş olması veritabanının oluştuğu anlamına gelmez. Veritabanının gerçekten oluşturulması gerekir, bunun için yine ORM framework’ü kullanılarak migration dosyaları oluşturulur. Migration dosyaları genelde CLI (command line interface) yardımıyla çalıştırılarak, veritabanını meydana getirirler.

Geliştirme devam ettikçe tablo yapılarında değişiklikler olabilir. Bunların yönetimi yine entity modeller ile gerçekleştirilir. Entity model üzerinde yapılmak istenen değişiklik hazırlanır ve yeni migration dosyası meydana getirilir. Bu dosya veritabanı üzerine uygulanır ve veritabanı güncellenir.

Veritabanı yeniden oluşturulmak istendiğinde zaman; hazırlanan migration dosyaları sırası ile çalıştırılmalıdır.

Database First

Database First yaklaşımında, geliştirme işlemine başlamadan önce veritabanı SQL scriptleri ile meydana getirilir. Hazırlanan bu veritabanı üzerine sadece SQL scriptleri ile (CRUD) işlemleri gerçekleştirilir.

Geliştirme devam ettikçe veritabanı üzerinde de değişiklikler yapılır. Bu değişiklikler yönetimi yine SQL scriptleri ile olur. Bunlar alan ekleme, yabancı anahtar, yeni view eklemek yada güncellemek gibi olabilir.

Değişiklik işlemlerinde hazırlanan scriptler belirli bir sırada olmalıdır aksi takdir durumda veritabanı hata verir ve bazı scriptler çalışmaz.

Sonuç

Bu yazıda veritabanı kullanılan projelerdeki en çok kullanılan veritabanı yönetim metodolojilerini anlatmaya çalıştım, iki yönetiminde pozitif ve negatif tarafları var. Kullanılan kaynak ve projenin yapısına göre yönteme karar verilir.

Code First yöntemi geliştirici sayısının fazla olduğu, projenin tamamının local bilgisayarda çalıştığı uygulamalarda avantaj sağlar.

Database First ise veritabanının tek bir yerde olduğu, veritabanı için bir yöneticinin ve yetkin birinin olduğu ve geliştiricilerin bu ortamlara bağlanarak geliştirme yaptıkları projelerde avantaj sağlar.