Veritabanı Tasarımı

Tarih: 19 Şubat 2013 Kategori: Mysql 2 Yorum

database-designVeritabanını tasarlanırken veri bütünlüğü, optimizasyon, normalizasyon vs. gibi kurallar ve işlemler göz önünde bulundurulur. Temel olarak veri tekrarı önlenmeli, veri bütünlüğü sağlanmalı, tablolar arası ilişkiler kurulmalı ve normalizasyon uygulanmalıdır. Veritabanı normalizasyonu başka bir yazımızın konusu olmaya adaydır. Bu yazıda bahsedilmeyecektir.

Veritabanı tasarlanırken önce nesneler tanımlanır. Eğer bir e-ticaret sitesi yapıyorsak üyeler, ürünler, siparişler birer nesnedir. Tanımladığımız her nesne için bir tablo oluşturulur. Üyelerin bilgileri, ürünlerin detayları gibi veriler ayrı tablolarda tutulurlar.

Tablolar oluşturulurken tablolara anlaşılır isimler verilmelidir. Üyelerin bilgilerinin tutulduğu tabloya en anlamlı isim uyeler olacaktır. Tablolar oluştururken şu yazımızda belirttiğimiz gibi tablolara açıklama ve yorumlar eklerseniz ileride yapacağınız değişikliklerde, ya da başka bir programcı veritabanı yapısını incelerken oldukça faydalı olacaktır. Daha önceden çalıştığım bir şirkette mevcut yazılım üzerinde bazı değişiklikler istenmiş ve bu değişiklikler veritabanı yapısını da kapsamaktaydı. Aynı zamanda veritabanı yapısını inceleyip bu yapıya göre sorgular yazmam gerekliydi. Fakat benden önceki yazılımcı veri tabanını o kadar kötü tasarlamıştı ki, anlamak ne mümkün. Tabloların isimleri birbirine çok benziyordu ve ben öğrendiğim bir tablo ismini diğeriyle karıştırıyordum. Tabloları ve sütunları isimlendirirken bazılarında sadece kendisinin anlayacağı kısaltmalar yapmıştı. Tablo ve sütun isimlerinde asla tutarlılık yoktu, birleşik isimlerin kimisi alt çizgiyle kimisi ayraç olmadan yazılmıştı. Veri tabanınızı öyle bir tasarlayın ki sizden sonra başka bir yazılımcı bakınca çözebilsin. Kulağınızı çınlatmasınlar arkanızdan.

Oluşturduğumuz tablolar için birer anahtar alan seçilir. Anahtar alanlar veriye erişmek istediğimizde, ulaşılmak istenilen veriyi diğerlerinden ayırırlar. Örneğin üyeler tablosu için üye numarası anahtar alan olarak seçilebilir. Verileri birbirinden ayırt edici bir özelliğin bulunmadığı düşünürsek, Ahmet ismine sahip 10 adet üyemiz varsa istediğimiz Ahmet’e nasıl ulaşabiliriz?

Her nesne için bir tablo oluşturulur demiştik, nesnenin her niteliği için de bir sütun oluşturulur. Üyelerden talep edeceğiniz her bilgi birer sütuna kaydedilir. Üyenin adı, kullanıcı adı, şifresi gibi bilgiler ayrı sütunlarda yer alır.

Veri tekrarı önlenmelidir, eğer tabloda var olan verinin tekrar kayıt edilmesi gerekiyorsa, yeni bir tablo oluşturulması gerekir. Yukarıda verdiğimiz e-ticaret sitesi örneğinden devam edelim. Az önce belirttiğimizin aksine üye ve sipariş bilgilerini tek tabloda depolamak istersek veri tekrarı oluşacaktır ve bu normalizasyona terstir.

Üyeler tablosu:

uyeNo uyeIsım uyeRumuz uyeAdres
1 Neşe Yılmaz Zara İstanbul

 

Sipariş tablosu:

siparisNo urun uyeIsim uyeRumuz uyeAdres
1 Saat Neşe Yılmaz Zara İstanbul
2 Dijital Kamera Neşe Yılmaz Zara İstanbul

 

Yukarıda gördüğünüz gibi bir tablo tasarımında üyenin bilgileri tabloya tekrar, tekrar kayıt edilir. Bu şekilde veri bütünlüğü bozulur, güncelleme anormallikleri ortaya çıkar. Eğer üye sipariş verdikten hemen sonra adres bilgisini güncellerse, doğru adres bilgisine nasıl erişebiliriz? Üyeler tablosunda kayıtlı adres bilgisi ile sipariş tablosunda kayıtlı adres bilgisi birbirini tutmayacaktır. Ayrıca bir kez depolayacağımız üyenin detay bilgilerini defalarca depolayacağımızdan veritabanına fazladan yük binecektir. Aynı durum ürün bilgileri ve ürün tablosu için de geçerlidir. Yukarıdaki tablonun doğru tasarımı şu şekilde olmalıdır.

Sipariş tablosu:

siparisNo uyeNo urunNo siparisAdet siparisTarih
1 1 3 2 20-01-2012
2 1 4 1 22-01-2012

 

Yukarıdaki tablo hem üyeler, hem de ürünler tablosuyla ilişkilendirilmiştir. Bu tabloda yer alan uyeNo ve urunNo sütunu yabancı anahtar (foreign key) olarak adlandırılır.

Yukarıdaki yanlış tablo tasarımı belirttiğimiz gibi güncelleme anormalliklerine (Update Anomalies) sebep olur. Üç çeşit güncelleme anormalliği vardır: ekleme, düzenleme ve silme.

Ekleme anormallikleri (Insertion anomalies): Veritabanına veri eklerken oluşan anormalliklere ekleme anormallikleri denir. Yukarıdaki yanlış tablo tasarımında yeni bir sipariş girerken üyenin bilgilerini tekrardan girmemiz gerekir. Eğer üyenin bilgilerini girmezsek bu sefer gereksiz boş alanlar oluşur.

Düzenleme anormallikleri (Modification anomalies): Veritabanında düzenleme yaparken ortaya çıkan anormalliklere denir. Eğer üyemiz adres bilgilerini değiştirmek isterse, bir kez yerine birçok defa adres bilgilerini güncellememiz gerekir. Sadece üyeler tablosundaki adres bilgileri güncellersek diğer adres bilgileri ile üyeler tablosundaki adres bilgileri birbirini tutmayacaktır.

Silme anormallikleri (Deletion anomalies): Bu anormallikler veritabanından kayıt silerken oluşur. Eğer üyenin adres bilgileri üyeler tablosu yerine sipariş tablosunda depolanırsa, üyeye ulaşan siparişler silinince üyenin adres bilgileri de silinecektir.

Bu konuda şimdilik bu kadar yazıyor ve bir başka yazıda da veritabanı normalizasyonu üzerine yazmayı planlıyorum. İyi çalışmalar.

2 Yorum

Yorum Yapın
  • eser Cevapla

    Yazılarınızı ilgiyle takip ediyoruz.

    Öğretmenim ve sitenizi öğrencilerime de tavsiye ettim. Çok başarılısınız ve yeni yazılarınızı bekliyoruz.

    • altayalp Cevapla

      Merhaba. Güzel yorumunuz için teşekkür ederim. Vaktim ve bilgim yettiğince yeni yazılar ekleyeceğim. Faydalı olabiliyorsam ne mutlu.