İlişkisel Veritabanında Temel Kavramlar ve Normalizasyon

0
5

Veri; ölçüm, deney, gözlem veya sayım yoluyla elde edilen bilgidir. Bu bilgileri yaşatmak/işlemek içinse veritabanı programlarını kullanırız. Aslında bilgileri işlememizin amacı, hayatımızı kolaylaştırmaktır. Örneğin, bir e-ticaret sitesi yapacağız; ama ürünler, müşteriler, siparişler, teslimat, fatura bilgileri, üretici, tedarikçi, dağıtıcı… gibi detayları düşünmedik/birbirleriyle ilişkilendirmedik. Bu durumda bunun altından kalkmak çok zahmetli bir iş yüküne dönüşmekle birlikte hataları da beraberinde getirecektir. Verileri birbirleriyle doğru bir şekilde ilişkilendirerek minimum hata maksimum performans/kazanç sağlayabiliriz. Tabii bu durum, normalizasyon (eniyileştirme) kurallarını beraberinde getirmektedir; ancak veritabanı tasarımında ‘her zaman her durumda geçerli olan kurallar’ yoktur.

Unutmayalım amacımız; tekrarlanan verileri / iş yükünü azaltmak ve veritabanı hakimiyetini arttırmak. Bunun için de verilere, bunları yazdığımız tablolara ve ilişkilendirme için bazı teknikleri öğrenmeye/tecrübe edinmeye ihtiyacımız var.
veritabanı

Şimdi bu teknikleri öğrenmeye, uygulamaya dökerek tecrübe edinmeye başlayalım.

  1. Projemizde olması gereken nesneleri tanımlamalıyız ve her nesne için bir tablo oluşturarak, tablolara isim veririz.

Örnek: Dershane için nesnelerimiz: Öğrenciler, öğretmenler, dersler, derslikler…

  1. Tablo isimleri: Verilerin bulunduğu tablolara isim verirken sözcük gruplarının kullanılması, yani kelime sayısı fazla olan adlandırmaların yapılması doğru bir yöntem değildir. Aynı şekilde çok kısa/anlaşılmayan harflerle yapılan adlandırmalar da kullanılmamalıdır. Ör: ‘Kutuphane_sistemindeki_kitaplar’ yerine ‘Kitaplar’ denebilir. Yine tablo adlarının hepsi ya büyük harfle ya da küçük harfle başlamalıdır. Yine tablo adları ya tekil ya da çoğul olmalıdır-tekil olması sonraki kodlama aşamasında karışıklığı önler. Yani tablo isimlendirmeleri bir düzen içerisinde yapılmalı ve her tablo bu düzende olmalıdır.

Örnek: e-ticaret sitesi için tabloların adları: Urun, Musteri, Siparis, Teslimat, FaturaBilgisi, Uretici, Tedarikci, Dagitici …

  1. Her bir tablo için anahtar alan seçilir. Bir tablodaki anahtar alan; o tabloda bulunan nesnenin, diğer nesneler ile karışmasını önler. Şöyle ki, Ogrenci tablosu için OgrenciNo bir anahtar alandır. Çünkü aynı okulda, aynı öğrenci numarasında birden fazla öğrencinin olması mümkün değildir. Yani anahtar alan ‘eşsiz’ bir alanı ifade eder ve sadece bir tek nesne için geçerlidir.
  2. Tablo isimlerini ve anahtar alanları belirledikten sonra tablolarda bulunan nesneler için, bu nesnelere ait her bir özelliği bulunduğu tabloya ekleyin.

Örnek: Bir üye tablosu için: UyeNo, Adi, Soyadi, EmailAdresi, EvTelNo, CepTelNo…

  1. İlişkisel veritabanı tasarımında ilişki türleri:

İlişkisel veritabanı tasarımında bire bir, bire çok ve çoğa çok ilişkiler vardır.

Bire bir ilişki; bir nesnenin bir özelliğe, bir özelliğin de sadece bir nesneye ait olduğu durumdur. Örneğin, bir TC kimlik numarası, sadece bir vatandaşa aittir; bir vatandaş sadece bir tane TC kimlik numarası alabilir.

Bire çok ilişki; bir nesnenin birden çok özelliğe sahip olması ya da bu özelliklerin sadece bir nesneye ait olmasıdır. Örneğin, bir müşteri çok sayıda sipariş verebilir; her sipariş yalnızca bir müşteri tarafından verilir.

Çoğa çok ilişki ise, genelde nesne özelliklerinin aynı olduğu yani tekrarların fazla olduğu yerlerde karşımıza çıkmaktadır. Bu durumda da ek bir tablo oluşturmamız gerekir ki karmaşıklığı ve tekrarları en aza indirgeyelim. Zaten veritabanı tasarımı yapmaktaki amacımız; tekrarlanan verileri / iş yükünü azaltmak ve veritabanı hakimiyetini arttırmaktı.

Örnek: 2 öğrenci, 3 seçmeli dersten iki tane seçecek olsun. Öğrenciler: Ayşe, Ali; Dersler: Fizik, Matematik, Kimya olsun. Ali de Ayşe de bu üç dersten istediğini seçebilir. Ayrıca bu öğrenciler aynı dersi de seçebilir; yani bir ders birden fazla öğrenci tarafından seçilebilir ya da bir öğrenci birden fazla ders de seçebilir. Yani bir öğrencinin birden fazla dersi olabilir. İşte burada çoğa çok ilişki olduğundan, ortak olan nesne özellikleri baz alınarak ek bir tablo oluşturulur. Burada oluşturulan ek tablo OgrenciDers tablosu, bu tabloda bulunan alanlar ise Id, OgrenciId, DersId olmalıdır.

veritabanı örnek

  1. Tablolarda bulunan anahtar alanlara bağlı olmayan özellikler için ek tablolar gerekebilir.

Örnek: Bir kütüphaneden ödünç alınan kitabın ödünç tablosunda anahtar alan OduncNo ‘dur. Bu anahtar alan ise ödünç verme işlemiyle ilgilidir ve bu tabloda bulunan alanlar ödünç verme ile ilgilidir. Ödünç alanın adresi gibi özellikler için yeniden adres yazmaya gerek yoktur, çünkü adres alanı üye işlemleriyle ilgilidir. Bu nedenle Uye tablosu oluşturarak OduncAlan nesnesini anahtar alan olarak tanımlamamız gerekir.

  1. Tüm tabloları ve bulundurdukları nesnelerin birbirleriyle ilişkilerini tanımlamaya çalışırız.

Örnek: Kitabı ödünç veririz. Bu nedenle Odunc tablosu ile Kitap tablosu arasında bir ilişki vardır. Kitap, üyelere ödünç verilir. Bu durumda Odunc ile Uye tabloları arasında bir ilişki vardır. Bir kitap en az bir türe dahildir. Bu nedenle de Tur ile Kitap arasında bir ilişki vardır.

Veritabanı tasarlarken yukarıda bahsettiğim normalizasyon koşullarını dikkate alarak tabloları ve bunlar arasındaki ilişkiyi kurabiliriz. Şimdi bir e-ticaret sitesi için tabloları nasıl oluşturacağımıza bakalım ve bu tablolar arasındaki ilişkileri inceleyelim.

Bir e-ticaret sitesinde olması gereken her nesne için bir tablo oluşturacağız. Bu nesneler; ürün, müşteri, kategori, kampanya, marka, sipariş, stok, taksit seçenekleri, ürün fiyatı, ürün özellikleri, ürün yorumları, kullanıcı ve rol. Bu nesneleri düşünürken genel düşünüp sonrasında her biri kendi içinde birçok özellik içeriyorsa bunu ayrı bir tabloda ele almak daha doğru olacaktır. Aslında bu düşünüş şekli, nesneye ait özellikler arasında çoka çok ilişki olması durumudur. Örneğin, bir ürünün birçok özelliği olabileceği gibi, bir özellik de birçok ürüne ait olabilir. Bu nedenle ürün tablosu ve ürün özellikleri tablosundan başka bir ara tablo daha oluşturacağız.

Her nesnenin kendine ait özelliklerini bulunduğu tabloya ekleyelim:

Urun tablosunda; UrunId, UrunAdi, KategoriId alanları bulunmalıdır.

Ürün fiyatını, ürün tablosunda tutmak istediğinizi duyar gibiyim. Halbuki ürün fiyatının; KDV, alış fiyatı, satış fiyatı, indirim birçok bileşeni vardır. Özetle UrunFiyati tablosunda; UrunId, KDV, AlisFiyati, SatisFiyati, Indirim alanları bulunmalıdır.

Musteri tablosunda; Id, Ad, Soyad, SehirId, Adres, Email, Telefon alanları

Marka tablosu için; Id, MarkaAdi, Aciklama, FirmaAdi alanları

Kategori tablosu için; Id, KategoriAdi alanları

UrunYorum tablosunda; Id, UrunId, Yorum alanları

Kampanyalar tablosunda; Id, Kampanya, KampanyaOrani, BaslangicTarihi, BitisTarihi alanları

Taksit seçenekleri içinse iki ayrı tabloya ihtiyacımız var. Biri bankayla ilgili bilgileri içeren tablo; diğeri taksit bilgilerini içeren tablodur. Banka tablosunda Id, BankaId, UrunId, TaksitCizelgeId yer almalı. TaksitSecenekleri tablosunda ise; Id, TaksitSayisi, TaksitTutari, ToplamTutar alanları

Stok tablosunda; Id, UrunId, Adet alanları

Siparis tablosunda; Id, UrunId, MusteriId, DetayId alanları

Urun ve UrunOzellik ara tablosunda; Id, UrunId, DetayId alanları

Kullanici tablosunda; Id, RolId, Ad, Soyad, SehirId, Adres, TCNo, Email, KayitTarihi alanları

Rol tablosunda; Id, RolAdi alanları bulunmalıdır.

Böylece ilişkisel veritabanı tasarımı yaparken bize yardımcı olabilecek normalizasyon yöntemlerini ele alarak, tabloları ve tablolar arasındaki ilişkilerin nasıl kurulacağını öğrendik.

Henüz Yorum Yok

CEVAPLA