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, [email protected] Ö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).