Pratikte, üzerinde çalıştığımız uygulamalarımızın çok büyük çoğunluğu, veritabanı ve bu veritabanı üzerinde çalışan kodlardan oluşurlar.
Programlamaya yeni başlayan amatör programcılar, uygulama geliştirirken genellikle kodlar (php vs.) üzerinde dururlar. Oysa ki kod kısmı işin en son kısmı olup, öncesinde yapılan bir takım analiz ve hazırlıklar sonucunda üretilen uygulama gereklerini, gerçekleştirmek üzere yazılır ve hangi programlama dilini kullanırsanız kullanın çok fazla farklılık göstermezler. Programlama dili değiştiğinde temel olarak değişen, yazım kurallarıdır. Yine aynı döngüleri, aynı mantıksal sınamaları, aynı karşılaştırmaları yaparsınız. Sadece yazım şekli değişir ancak temelde hangi dili kullanırsanız kullanın kodunuz aynı işleri yapar ve aynı sonuçları üretir. Tabi ki istisnaları da olmakla birlikte genel olarak durum böyledir.
Kodlama ve programlama dili konusunu çok basite indirgemek için değil, kodlamaya başlamadan önceki analiz ve planlamalara özel bir vurgulama yapmak için yazdım bunları. Yoksa tabi ki programlama dili çok önemlidir. Fakat yine de programlama dili seçimi, öncesindeki analiz çalışmalarının sonucunda yapılmalıdır.
Uygulama geliştirmenin ilk ve en önemli aşaması olan analiz ve planlama ‘nın pratikte üç önemli ayağı vardır;
* Durum tespiti ve ihtiyaç belirleme (iş analizi),
* Veritabanı tasarımı,
* Algoritma geliştirme,
Bunların herbiri, üzerinde uzun uzun ve ayrıntılı olarak çalışılması gereken ve her programcı (ya da proje yöneticisi) tarafından iyice öğrenilip uygulanılıyor olması gereken çok önemli konulardır. Bu konulardan teorik olarak bahseden ve bir takım yöntem ve kuralları vurgulayan bir sürü yazılı kaynak olmasına rağmen, asıl beceri ve bilgi, programcının zaman içinde edindiği tecrübeleri sayesinde oluşur. Yani uygulama geliştirdikçe ve özellikle kaliteli bir proje ekibi içinde mesai yaptıkça, programcı, pratik olarak bu becerileri kazanır. Programcılık işinin literatürden ziyade usta çırak ilişkisi ile öğrenilen taraflarından birisi de budur.
Üzerinde düşünmeden hazırlanan bir veritabanı üzerinde çalışmak (sorgulama vb), zaman geçtikçe çok zorlaşabilmektedir. Örnek vermek gerekirse; gelecekte programcıdan istenen basit bir rapor, sırf veritabanı düzgün tasarlanmadığı için imkansız ya da çok zorlayıcı bir iş haline gelebilir. Bunun yanında, düzgün tasarlanmayan veritabanı, uygulamanın genişletilebilir olmasını büyük ölçüde baltalar. Örneğin ileride programcıdan istenen bir ek modül, yine sadece veritabanı düzgün tasarlanmadığı için imkansız ya da çok zorlayıcı bir iş haline gelebilir. Hepsinden önemlisi düzgün tasarlanmayan veritabanı, veri tutarsızlığı, tekrarlanan veriler gibi bir sürü çarpıklıktan oluşan bir çorbaya döner. Böyle bir veritabanı, zaman içinde, yukarıda bahsettiğim sorunların birbirini tetiklediği ve büyüttüğü bir kabus haline gelir. Programcı kendini, bitip tükenmek bilmeyen bir sürü anlamsız sorunlardan oluşan kısır bir döngü içinde bulur kendini.
İşte bu nedenle, uygulamayı kodlamaya başlamadan önce, üzerinde çalışacağınız veritabanını çok iyi tasarladığınızdan emin olmalısınız.
Bu yazımda ve devam eden birkaç yazımda, en önemli ayaklardan birisi olan “veritabanı tasarımı” konusunu ele almaya çalışacağım. Bunu yaparken teorik ve genel kabul görmüş kuralların yanında, pratik ve konununun özüne yönelik kısımlarından da bahsedeceğim.
Veritabanı tasarımı konusunda temelde iki yaklaşım mevcuttur;
Resmi Yaklaşım;
İlişkisel veritabanı oluşturulması/tasarlanması sürecinde, bir takım normalleştirme kurallarını(derecelerini) ifade eder. İlk olarak E.F.Codd tarafından kullanılan bu yaklaşım günümüzde çok geniş bir sorun yelpazesine uygulanabilir bir veritabanı modelini ortaya çıkarmıştır. Uzmanlar tarafından bir çok normalleştirme derecesinden bahsedilsede ilk beşi genel kabul görmüş ve resmileşmiştir. Ancak şahsen belirtmek isterim ki “resmi yaklaşım” olarak bahsedilen bu yöntem pratikte veritabanı tasarımı yaparken kullanmaktan ziyade, aşağıda bahsettiğim “resmi olmayan tasarımın” sınanması ve doğrulanması için kullanılır.
Resmi olmayan (pratik) yaklaşım;
Programcının zaman içinde edindiği bilgi ve deneyimleri sonucunda geliştirdiği veritabanı tasarımı yaklaşımını ifade eder. Programcıdan programcıya ufak tefek farklılıklar gösterse de, veritabanı genel olarak belli başlı adımlarla tasarlanır. Bunlar “resmi yaklaşım”dan daha pratik ve somut adımlardır.
Özetlemek gerekirse;
Resmi olmayan yaklaşımla somut olarak ortaya konan veritabanı, resmi yaklaşımla sınanarak doğrulanır. Uygulamanının veritabanı tasarımı ayağındaki genel süreç bu şekildedir.
Devam eden yazılarımda, yukarıda bahsettiğim “resmi olmayan” ve “resmi yaklaşım” bahsetmeye çalışacağım.
Sevgilerimle,
NOT: Yazının ikinci bölümü için:
Veritabanı Tasarımı-2: Resmi Olmayan (Pratik) Yaklaşım
