Veritabanı Tasarımlarında Karşılaşılan Güçlükler ve Çözüm Önerileri

advertisement
Veritabanı Tasarımlarında Karşılaşılan Güçlükler ve Çözüm Önerileri
Muhammed Çayırlı
Süleyman Demirel Üniversitesi / Keçiborlu MYO
S.Demirel Üniversitesi Keçiborlu MYO 32700 Keçiborlu / Isparta TR, cayirli@sdu.edu.tr
ÖZET
Bir işletmenin günlük faaliyetlerini sürdürebilmesi için, işletmenin çeşitli konuları ile ilgili ve
aynı zamanda işletmenin büyüklüğü ile de doğru orantılı olarak çok miktarda bilgi depolaması
gerekebilir. Günümüzde basit bir web uygulamasından, devasa kuruluşların ağır verilerine
kadar, birçok alanda veritabanı uygulamalarına ihtiyaç duyulmaktadır. Birçok yazılım ürünü,
çok iyi görsel araçlara sahip olmasına rağmen, zamanla kullanışsız hale gelmişlerdir. Bunun
önemli nedenlerinden biride yazılımların aşırı veri yoğunluğunu destekleyememeleri ya da
mevcut veritabanlarının iyi tasarlanmamış olmasıdır. Bilgisayar Eğitimlerinin en önemli
konularından biriside yazılımların üzerinde çalışacağı verilerin organizasyonunu ve tasarımını
içeren Veritabanı Yönetim Sistemleridir. Veriler üzerinde çalışmaya başlamadan önce bu
verilerin yer alacağı Veritabanlarının tasarımlarının yapılması öncelikli bir zorunluluktur. Bu
bildiride yazılım geliştiricilerinin veritabanı tasarımlarında karşılaştıkları güçlüklere bir
çözüm önerisi sunulmuştur.
Anahtar Kelimeler: Veritabanı, İlişkisel Veritabanları, Veritabanı Tasarımı
1. GİRİŞ
Kurum içi ve kurumlar arası ilişkilerin çok fazla gelişmesi ve hatta karmaşıklaşması sonucu,
verilerin doğru bir şekilde kayıt altına alınması, saklanması ve gerektiğinde de kolaylıkla
erişilebilmesi, şirketlerin iş yapabilme kapasitelerinde büyük artılar sağlamaktadır [1]. Bunun
yanında kurumların büyümesi, birden fazla noktaya dağılması ve ayrıca harici iletişim
noktalarının (bayiler, tedarikçiler, müşteriler) artması sonucu veri kaynaklarının
fazlalaşmasıyla veri yönetimi, günümüzde çok daha önemli bir hale gelmiştir. Bu bağlamda
mevcut verilerin tek bir noktada toplanması ve aynı zamanda birçok noktadan da bu bilgilere
ulaşılması, veriler üzerinde ihtiyaca göre özelleştirilmiş raporlar yaratılması, bunların düzenli
olarak yedeklenmesi ve kullanıcı yetkilendirmeleri yaparak verilere gereksiz ve yetkisiz
erişimlerin önlenmesi için iyi tasarlanmış esnek bir veritabanının gerekliliği kaçınılmaz
olmaktadır. İyi bir veritabanı tasarlayabilmek için evrensel geçerliliği olan kuralların
bulunmaması, tasarımcıların bilgi, yetenek ve tecrübelerini üst düzeyde kullanmalarını
gerektirmektedir [2]. Tasarımın temelinde, veritabanı tanımının ve ilişkisel veritabanı
kavramının iyi bilinmesi yer almaktadır.
Bildirinin ikinci bölümde veritabanı ve ilişkisel veritabanı kavramlarının tanımları verilirken,
üçüncü bölümde on madde ile veritabanı tasarımının ilkeleri ve teknikleri sunulmaktadır. Son
bölümde ise sonuçlar üzerinde durulmaktadır.
2. VERİTABANI NEDİR?
Bir okul; öğretmen ve öğrencilere ait kimlik bilgileri, ders programları, sınav sonuçları,
yoklama raporları gibi bilgileri saklama gereksinimi duyabilir. Buna karşılık ticari bir firma
ise; personel özlük bilgileri, depodaki malzemelere ait hareketler, müşterilerin telefon
numaraları, gelen siparişler, gönderilen teslimatlar, ürün fiyatları gibi bilgileri de saklamak
isteyebilir. Belirli bir düzen içinde korunmak istenen bilgilerin içeriği ne kadar farklı olursa
olsun, ortak bir konu yada belirli bir amaçla ilişkili bilgilerin oluşturduğu bütüne Veritabanı
denilmektedir [3].
Bir işletmenin günlük faaliyetlerini sürdürebilmesi için, işletmenin çeşitli konuları ile ilgili ve
aynı zamanda işletmenin büyüklüğü ile de orantılı olarak, çok miktarda bilgi depolanması
gerekebilir. Ancak bilgilerin sadece depolanması yeterli değildir. Bu bilgiler arasındaki
ilişkilerinde saklanması gerekecektir. Çok büyük sayıdaki bilgilerin klasik dosya sistemi ile
depolanması, tutulması mümkün olmadığı gibi veriler arasındaki ilişkilerin belirlenmesi de bir
o kadar zordur.
Tasarımın önemli ilkelerinden biri olan veritabanının amacını ve ne için kullanılması
gerektiğini belirledikten sonra, ortak bir hedefe yönelik verilerin gruplandırılarak tablolarda
saklanması gerekir. Belirli bir konuyla ilgili olguların yer aldığı en temel veritabanı nesnesi
olan tabloların amacı verileri depolamaktır. Ortak bir hedef dâhilinde farklı tablolarda yer alan
verilerin, yeniden anlamlı biçimde bir araya getirilmesi gerekebilir. Bu işlemin
gerçekleşebilmesi için tablolar arasındaki ilişkilerin tanımlanması gerekmektedir. İçerisinde
yer alan tabloların birbirleriyle ilişkilendirildiği, tüm bilgileri tek tablo üzerinde
barındırmayan, gereksiz tekrarlardan arındırılmış, güncelleme ve değişiklik yapılırken tüm
veritabanının elden geçirilmediği, hızlı sorgulama yapılabilen, genişleme imkânları kısıtlı
olmayan, esnek ve ortak bir amaca hizmet eden bir veritabanı İlişkisel Veritabanı olarak
adlandırılabilir [4].
3. VERİTABANI TASARIMI
Bir veritabanı tasarlarken mümkün olduğunca işlevsel olmasına dikkat edilmelidir. Bütün
verileri tek bir tabloda toplamak hiçbir zaman amaca tam hizmet etmeyeceği gibi, her şeyin
bir arada olması da veritabanının yönetilmesinde ve kontrolünde zorluklara, yapılmak
istenilen değişikliklerin zaman almasına ve yapılacak sorgulamalarda zaman kaybına sebep
olabilmektedir. Tabloları, sorguları ve diğer veritabanı nesnelerini oluşturmadan önce,
tasarımı kâğıt üzerinde oluşturmak ve üzerinde çalışmak, ayrıca tasarımı düşünülen
veritabanına benzeyen iyi kurgulanmış veritabanlarını, tabloları arasındaki ilişkileri de göz
önünde bulundurarak incelemek iyi bir başlangıç olacaktır [5].
Veritabanı tasarlarken aşağıdaki temel ilkelerin belirtilen sırada uygulanması, tasarımdan
beklenen amaca uygun sonuçların alınmasında önemli bir etken olacaktır.
3.1. Veritabanının Amacını Belirleme
Veritabanı tasarlamada ilk adım, tasarımın amacını ve ne için kullanılması gerektiğini
belirlemektir. Bunun için;
•
•
•
Veritabanını kullanacak kişilerle konuşulmalı, tasarımcının ve kullanıcıların
veritabanına sormak istediği sorular beyin fırtınası yöntemiyle toplanmalı,
Veritabanının oluşturması istenilen raporların taslağı çizilmeli,
Verileri kaydetmek için kullanılacak formlar bir araya getirilmelidir.
Veritabanının amacı belirlendiğinde, veritabanından istenilen bilgilerin listesi oluşmaya başlar.
Bu listeden hareketle, veritabanında hangi olgulara ilişkin bilgilerin saklanması gerektiği ve
her olgunun hangi konuyla ilgili olduğunun belirlenmesi gerekir. Bu olgular veritabanındaki
alanlara (sütunlara) ve bu olguların ilgili olduğu konular da tablolara karşılık gelir.
3.2. Veritabanında Gerek Duyulan Alanları Belirleme
Her alan belirli bir konuyla ilgili bir olguyu içerir. Örneğin, müşteriler ile ilgili şirket adı,
adres, şehir, ülke ve telefon numarası gibi olguların saklanması istenebilir. Bu olguların her
biri için ayrı bir alan oluşturulması gerekebilir. Hangi alanlara gereksiniminiz olduğunu
belirlerken, aşağıdaki tasarım ilkeleri unutulmamalıdır:
•
•
•
•
•
Gerek duyulacak tüm bilgiler eklenmelidir.
Bilgiler en küçük mantıksal parçalar halinde saklanmalıdır. Örneğin, çalışan adları
çoğu kez Adı ve Soyadı gibi iki alana ayrıldığından, verileri Soyadı'na göre
sıralamak daha kolaydır.
Birden çok öğenin yer aldığı listelerden oluşan veriler için alan oluşturulmamalıdır.
Örneğin, bir tedarikçiler tablosunda, tedarikçiden alınan her ürününün virgülle
ayrılmış listesini içeren bir Ürünler alanı oluşturulursa, yalnızca belirli bir ürünü
sağlayan tedarikçileri bulmak çok daha zor olacaktır.
İfade sonucu oluşan türetilmiş veya hesaplanmış veriler eklenmemelidir. Örneğin,
BirimFiyat ve Miktar alanları varsa, bu iki alandaki verileri çarpan ek bir alan
oluşturulmamalıdır.
Birbirine benzeyen alanlar yer almamalıdır. Örneğin, Tedarikçiler tablosunda Ürün1,
Ürün2 ve Ürün3 isimli alanlar oluşturulursa, belirli bir ürünü sağlayan tüm
tedarikçileri bulmak çok daha zor olacaktır. Ayrıca, belirli bir tedarikçi üçten çok
ürün sağlarsa, veritabanının tasarımını değiştirmek gerekecektir. Bu alan
Tedarikçiler tablosu yerine Ürünler tablosuna yerleştirilirse, ürünler için yalnızca
bir alana gereksinim olacaktır.
3.3. Veritabanında Gereksinim Duyulan Tabloları Belirleme
Her tablo ortak bir konu ya da belirli bir amaç hakkında bilgi içermelidir. Alan listesi,
gereksinim duyulan tablolara ilişkin ipuçları sağlar. Örneğin, bir İşeAlmaTarihi alanı varsa,
bu alanın konusu bir çalışandır ve bu nedenle de Çalışanlar tablosuna aittir. Müşteriler için bir
tablo, Ürünler için bir tablo ve Siparişler için farklı bir tablo veritabanında yer alabilir.
3.4. Her Bir Alanın Hangi Tabloya Ait Olduğunu Belirleme
Her bir alanın hangi tabloya ait olacağına karar verilirken şu tasarım ilkeleri göz önünde
bulundurulmalıdır:
•
•
Alan, yalnızca tek bir tabloya eklenmelidir.
Tablonun birçok kaydında görünen bilgilerin aynısını verecekse, alan bir tabloya
eklenmemelidir. Tablodaki bir alanın çok miktarda yinelenen bilgi içereceği
belirlenirse, o alanın yanlış tabloda olma olasılığı çok yüksektir.
Örneğin, bir müşterinin adresini içeren bir alan Siparişler tablosuna eklenirse,
müşteri birden çok sipariş verdiğinde bu bilgiler birden çok kayıtta
yinelenebilecektir. Bununla birlikte, adres alanı Müşteriler tablosuna koyulursa,
yalnızca bir kez görünür. Bu bakımdan, bir veritabanındaki bir tablo, çalışma
sayfası gibi düz bir dosya veritabanındaki bir tablodan farklıdır.
Her bilgi parçası yalnızca bir kez saklandığında, bu bilgi tek bir yerde
güncelleştirilebilir. Bu daha faydalıdır ve böylece farklı bilgi içeren yinelenen giriş
olasılığı da ortadan kalkmış olur.
3.5. Alanı Her Kayıttaki Benzersiz Değerlerle Tanımlama
İlişkisel bir veritabanı, farklı tablolarda saklı bilgileri bağlamak için, örneğin, çalışanların
aldığı sipariş talepleri ile çalışanları ilişkilendirmek için, veritabanındaki her tablo veya
tablodaki her ayrı kaydı benzersiz olarak tanımlayan bir alan veya alanlar kümesi içermelidir.
Bu tür bir alana veya alanlar kümesi birincil anahtar olarak adlandırılır.
Birincil anahtar benzer bilgileri birbirinden ayıran ve her kaydı benzersiz kılan bir
tanımlayıcıdır. Ayrıca bilgileri bir araya getirir. Bir tablo, birincil anahtar kullanılarak başka
bir tabloyla ilişkilendirilebilir. Tablolar bu şekilde veri paylaşır ve her iki tabloda da verilerin
yinelenmesini engellenmiş olur. Birincil anahtarlar, bakımı zor olan ve birlikte çalışmayan
çok sayıda yinelemeli listelerle çalışmak yerine ilişkisel veritabanlarının gücünden
yararlanmaya olanak sağlar.
Anahtar alanların seçiminde, tasarımcıyı kısıtlamadığı sürece, doğal alanların tercih
edilmesinde önemli fayda vardır. Örneğin, araçlar ile ilgili bir tablo oluştururken, plakalar
anahtar alan olarak belirlenebilir. Çünkü her bir plakadan bir tek araç trafiğe çıkabilir. Bu
tasarımcıyı kısıtlamaz. Öğrenci tablosu için, öğrenci numarası doğal bir anahtar alandır,
çünkü aynı okulda, aynı numaradan bir öğrencinin daha bulunması söz konusu değildir.
Tablolar ilişkili olduğunda, bir tablonun birincil anahtarı diğer tablonun yabancı anahtarı
olmaktadır.
3.6. Yinelenen Bilgi İçeren Alanlar İçin Ek Tablo Oluşturma
Veritabanı için gereksinim duyulan alanlar ve bu alanların yer alacağı tablolar belirlendikten
sonra her hangi bir alanda tekrarlanan verilerin oluşması, tasarımında en sık karşılaşılan veri
tekrarı hatasının olduğunu göstermektedir. Tasarımın hatasız olabilmesi, yinelemenin olduğu
bu tablonun en az bir tabloya daha ayrılmasıyla mümkün olabilir. Tasarımın bu önemli
ilkeleri dâhilinde unutulmamalıdır ki, her veritabanı projesine uyacak evrensel bir tasarım
tekniği yoktur. Dolayısıyla iyi bir tasarım bu kurallar çerçevesinde tasarımcının ne kadar
teferruatlı düşünebildiğine bağlıdır.
3.7. Anahtar Alana Bağlı Olmayan Alanları Belirleme
İlişkisel veritabanlarında, tablodan herhangi bir tek kayda erişmek için mutlaka bir farklı
özellik sağlanmalıdır ve bu özellik de anahtar alan vasıtasıyla gerçekleşir. Ancak bazen,
anahtar alan ile aynı tabloda yer aldığı halde, anahtar alan ile birebir ilişkisi olmayan bir alan
bulunabilir. Bu türden alanları elimine edip ayrı tablolara ayırmak gerekmektedir.
Örneğin, bir kütüphane bilgilerini içeren veritabanı tasarımında, Ödünç tablosunu ele alacak
olursak, ödünç verilen her kitap için ödünç alanın adresi de bilinmek istenebilir, ancak bu
bilgi Ödünç tablosuna yazılmamalıdır. Çünkü Ödünç tablosunun birincil anahtar alanı, uygun
bir doğal alan olmadığı için ödünç verme sayısını tutan OduncNo alanı olacaktır. Dolayısıyla
bu alana yazılacak bilgi, ödünç verme işlemi ile doğrudan ilgilidir. Oysa ödünç alanın adres
bilgisi, ödünç alan kişinin kendisine bağlı bir özelliğidir. Bu kişinin her aldığı kitap için
adresini tekrar tekrar yazmaya gerek yoktur. Aynı şekilde otomasyon içerisinde başka
yerlerde de bu kişinin adres bilgilerine muhtemelen ihtiyaç duyulabilir çünkü adres Ödünç
tablosunun değil, üyenin bir özelliğidir.
3.8. Tablolar Arasındaki İlişkileri Belirleme
Veritabanında yer alacak bilgileri farklı tablolara belirli konu başlıklarına göre ayırıp, birincil
anahtar alanlarını belirlendikten sonra veritabanımıza ilgili bilgileri ayrı tablolardan yeniden
anlamlı biçimde bir araya getirmesini söyleyebilmek için, tablolar arasında ilişkilerin
belirlenmesi ve tanımlanması gereklidir. Her biri bir konuya dair verileri barındıran tabloların
tümü göz önüne alınmalı ve birbirleri ile olan ilişkileri tanımlanmalıdır. Örneğin, kütüphanede
bulunan bir kitabı ödünç verebiliriz. Bu durumda, Ödünç tablosu ile Kitap tablosu arasında bir
ilişki olacaktır. Kitapların üyelere ödünç verilmesinden dolayı, Ödünç tablosu ile Üyeler
tablosu arasında da bir ilişki tanımlanmalıdır. Kitaplar ile üyeler arasında ortak bir amaca
yönelik herhangi bir bilgi olamayacağından dolayı bu iki tablo direkt bir ilişki içinde değildir,
ancak dolaylı olarak Ödünç tablosu üzerinden bir birlerine bağlıdırlar.
3.9. Tasarımı Geliştirme
Tasarımı yapılan veritabanında gerek duyulan tablolar, alanlar ve tablolar arası ilişkiler
belirlendikten sonra, sıra tasarım üzerinde çalışmaya ve olabilecek hataları araştırmaya
gelmiştir. Veritabanı tasarımını şimdi değiştirmek, tabloları veriyle doldurduktan sonra
değiştirmekten daha kolaydır. Kullanılacak Veritabanı Yönetim Sisteminde tasarlanan yapıyı
oluşturduktan sonra henüz veri girişi yapılmadan veritabanındaki ilişkileri denemek için,
istenilen yanıtları almak amacıyla sorgular oluşturup oluşturulamayacağı denetlenmeli,
formların ve raporların taslakları oluşturulup beklenilen sonuçları gösterip göstermediği
kontrol edilmelidir. Ve son olarak veritabanının iyileştirilmesi ve esnek bir tasarımın
olabilmesi için eğer varsa gereksiz yinelenen veriler tespit edilmeli ve ortadan kaldırılmalıdır.
3.10. Tasarımı İyileştirme
•
Tablolara isim verirken mümkün olduğu durumlarda tekil isimler kullanılmalıdır.
Böylece hem daha anlaşılır bir tasarım yapılmış hem de daha sonra kodlama
aşamasında karşılaşılabilecek karışıklığın önüne geçmiş olunur. Örneğin, içinde
kitap ile ilgili bilgiler bulunduracak tablonun adını Kitap koymak oldukça
mantıklıdır.
•
Tabloların yapısını oluştururken ilk sıraya o tablo için birincil anahtar olarak
belirlenen alanı yerleştirmek bir kural değildir ancak tablonun okunabilirliği ve
göze hoş görünmesi açısından tercih edilmesi, iyi bir tasarım için yararlı olacak bir
tekniktir.
•
Bir tablo için doğal bir anahtarın belirlenemediği durumlarda tabloya, yapay birincil
anahtar alan eklenir. Bu anahtar alan isimlendirilirken genellikle tablo adı ile başlar
ve sonuna ID ifadesi eklenir. Örneğin, Sipariş tablosunda her bir siparişi birbirinden
benzersiz kılan bir doğal anahtar bulunmadığı durumlarda, birincil anahtar olarak
atanan yapay anahtara SiparisID ismi verilebilir.
•
Farklı tablolarda yer alan iki alan aynı veriyi tutuyorsa, iki alana da aynı ismi
vermek, karışıklığa yol açabilir gibi görünse de aslında bu sayede daha düzgün bir
yapı ortaya çıkar. KitapNo alanı, Kitap tablosunda da Ödünç tablosunda da kitap
numarası tutmaktadır. Bu alanlardan birine KitapNo diğerine OduncGidenKitapNo
demek, karışıklığa neden olabilir. En iyi seçim her iki tabloda ortak veri tutan
alanlara aynı ismi vermektir.
4. SONUÇ
Veritabanları ana hatlarıyla, veriyi verimli şekilde depolamayı ve bilgiye dönüştürmeyi
amaçlayan sistemlerdir. Veritabanı sistemleri, günümüzde hemen her gün kullandığımız
birçok yerde karşımıza çıkmaktadır. Faturalarımızın ödenmesi, sinema rezervasyonları yada
sıklıkla kullandığımız e-posta işlemlerinin temelinde bir veritabanı bulunmaktadır. Büyük
veya orta ölçekli bir veritabanı projesinin geliştirilme sürecinde doğruluk, güvenlik, verimlilik
hayati önem taşımaktadır. Hataların oluşmasını engellemek ve esnek bir veritabanı tasarımına
sahip olmak için on adımda anlatılan bu tasarım ilkelerinin belirtilen sırada uygulanması
gerekir. Tasarımın bu önemli ilkeleri dâhilinde unutulmamalıdır ki, her veritabanı projesine
uyacak evrensel bir tasarım tekniği yoktur. Dolayısıyla iyi bir tasarım bu kurallar
çerçevesinde tasarımcının ne kadar teferruatlı düşünebildiğine bağlıdır.
5. KAYNAKLAR
[1]. http://www.redbilisim.com/public/veritabani.aspx?nmx=2_5 (Erişim Tarihi: Ocak 2005).
[2]. Gözüdeli, Y., “Veritabanı Programlama”, Byte Türkiye Dergisi Yayınları, İstanbul, 2003
[3]. Köseoğlu, K., “Veritabanı Mantığı”, ISBN: 975-6477-56-3, Pusula Yayıncılık ve İletişim
İstanbul, 2005
[4]. http://www.aspnedir.com/makaleler_icerik.asp?id=73 (Erişim Tarihi: Haziran 2005).
[5]. http://office.microsoft.com/tr-tr/training/default.aspx (Erişim Tarihi: Haziran 2005).
Download