Veritabanı Tasarımı Nasıl Olmalıdır? Veya Olmamalıdır.



Selamun Aleyküm Sevgili Albatu yazılım takipçileri bugün sizlere bir bir müşteri ile görüşme sonucunda bir veritabanı tasarımı nasıl yapılır bundan bahsedeceğim. 

Öncelikle Müşterinin istemlerini anlatan bir metni sizinle paylaşacağım; 

Satış ve Stokları tutabileceğimiz bir yazılım ihtiyacımız bulunmaktadır bu yazılım sayesinde firmamızın ürünlerini dijital ortamda tutabileceğimiz kategorize edebileceğimiz ve müşterilerimize sattığımız ürünlerin hareketini ve istatistiğini alabileceğimiz bir yazılım isteğimiz bulunmaktadır. 

İstemlerimizi aşağıda ki maddeler doğrultusunda olmalıdır. 

  1. Ürünler olmalıdır ürünlerde Ürün adı, ürün ekleniş tarihi fiyatı ve kategori bilgisi olmalıdır. 
  2. Müşteri olmalıdır bu müşterinin adı, soyadı telefonu adresi hangi şehir ilçe ve mahallede yaşadığına dair bilgiler tutulmalı ve şehir bazlı ilçe bazlı ve mahalle bazlı müşteri istatistikleri ile bilgi alabilmeliyim. 
  3. Personel olmalı ve bu personel 3 ana yetkisi olmalı satış  temsilcisi, stok temsilcisi ve admin olarak olmalı. 
  4. Admin kullanıcısı herşeye erişebilir olmalı ve her türlü yetki ve tasarrufu yapabilmeli 
  5. Satış Temsilcisi sadece satış tarafını yönetebilmeli 
  6. Stok temsilcisi sadece stok tarafını yönetebilmeli. 
  7. Stokta iade bilgilerini de görmek istiyoruz. 
  8. Stokta Ürün Kategorisi, Ürün Adı Ürün Fiyatı Stoğu ekleyen kişinin bilgileri adet bilgisi stok ekleme tarihi iade varsa iade bilgisi veya durumu hakkında bilgileri görebilmeliyiz. 
  9. Satış tarafında ürün kategorisi ürün adı ürün fiyatı satış yapan kişinin bilgileri satışın yapıldığı müşterinin bilgilerini  ve satışın yapıldığı tarihi tutmalıyız. 
Sisteme login olmalı kullanıcı ve bunları bir yetkilendirme ile yapmalı.

MÜŞTERİ İSTEMİNİ ANALİZ EDELİM

Öncelikle arkadaşlar veri tabanı tasarımına geçmeden önce maddeleri kısa bir analiz etmek istyorum ve bunu maddeler halinde; 

  1. Madde de 2 adet  tablo tasarımı çıkaracağımı anlıyorum ve içerisinde bana Ürün adı tarih fiyat kategoriId vb. sutun adları olduğunu gözledim. 
  2. Madde de de Müşteri, ve Şehir Mahalle İlçe adres vb. tablo tasarımı yapabileceğim bir tablo tasarımı anladım ve orada bir çok sutun isimleri de bulunuyor. 
  3. Madde de Personel ve Yetki tablolarının olduğunu anladım. 
  4. Madde de ise istemler artık yazılım yazılmaya başlandığında ele alınacak konular olduğu için bu kısmı tablo tasarımıma dahil etmiyorum. 
  5. Madde de yine tablo tasarımı söz konusu değil yazılım istemi olduğunu anlıyorum. 
  6. Madde de yine yazılım istemleri ile alakalı ve tablo tasarımı söz konusu değil. 
  7. Madde de yine bir tablo tasarımı görüyorum burada iade bilgilerinin olabileceği bir tablo olduğunu farkediyorum 
  8. Madde de ürün bilgilerinin ve personel bilgilerinin de tutulacağı bir stok tablosu kurmam gerektiğini anlıyorum. 
  9. Madde de yine Satış tablosu oluşturmam gerektiğini ve içerisinde müşteri personel vb. bilgilere erişmek istiyor. 
Artık CRM analizini yaptığımıza göre tablo tasarımına geçebiliriz. Yanlız genel yanlış tasarım tablosuna bir örnek olacak şekilde bir tasarım göstermek istiyorum ve sonra onunda analizini anlatayım. 

KÖTÜ VERİTABANI TASARIMI NASIL YAPILIR?

  1. Urunler(Id,Adi,Tarih,fiyat,kategoriAdi)
  2. Musteri (Id,adi,syoadi,telefonu,adresi,sehiradi,ilceadi,mahalle,telefon,mail),
  3. Personel(id,adi,syoadi,,telefonu,mail,yetkiadi)
  4. Stok(Id,UrunKategorisi,urunAdi,Urunfiyat,personel,adet,tarih,iademesaj)
  5. Satis(Id,urunKategori,UrunAdi,urunFiyat,personel,müşteri,tarih)
Yukarıda tablo oluşturulan tabloların neden kötü bir tasarım olduğunu şimdi sizlere madde madde açıklayacağım. 

  1. Urunler tablosunda kategoriAdi bulunmamalıdır kategori ayrı bir tabloda olmalıdır. Bunun sebebini açıklayacak olursak; 
    1. Ürünler içerisinde kategori bu durumda elle ekletilmiş olur buda ürünlerin müşteri tarafından girildiğinde bir çok veri girme kargaşasına neden olabilir ve ürünlerin istatistiki bilgilerini almakta oldukça güçleştirir. 
    2. Bir kategori bu şekilde birden fazla eklenir buda bellekte daha çok yer tutmasına neden olur. 
  2. Yine burada aynı hatalar söz konusu müşterinin tüm bilgileri tek bir tabloda tutulmuş şehir adı ilçe adı bunlarla alakalı bir bilgi çekilmek istendiğinde doğru sonuçlar verilemez yukarıda kine benzer sorunlar devam ediyor. 
  3. Aynı sorunu personelde de görüyoruz burası daha sıkıntılı çünkü yetki ayrı bir tabloda tutulmadığı için ve yetkilerde standart olduğu için olmayan bir yetki eklendiğinde kullanıcın erişim sıkıntılarına neden olabilir. 
  4. Madde de zaten balık baştan kokar misali ürün bilgisini zaten ayrı bir tablo da tutmuşuz neden bir daha stok içerisinde ben bu bilgileri tutuyorum.
  5. Stokta yapılan hatanın aynısı satış içinde yapılmış müşteri bilgisi, ürün bilgisi hepsi zaten mevcut veri tekrarı üzerine veri tekrarı yapılmış. 
İYİ VERİ TABANI TASARIMI NASIL YAPILIR?

 Şimdi arkadaşlar veri tekrarı olmayan istatistiki bilgileri net bir şekilde almamızı sağlayacak çoktan seçtirme yaptırabileceğimiz bir veritabanı tasarımını paylaşıyorum; 

  1. Kategori(id,ad,parentId)
  2. Urun(id,adi,tarih,fiyat,kategoriId)
  3. Sehirler(id,ad,parentId)
  4. Musteri(id,ad,soyad,telefon,sehirId,telefon,mail)
  5. Yetki(id,ad)
  6. Personel(id,ad,soyad,telefon,mail,yetkiId)
  7. IadeDurumlari(id,ad)
  8. Stok(id,UrunId,PersonelId,adet,Tarih,IadeDurumId)
  9. Satis(id,urunId,personelId,MusteriId,tarih)
Şimdi arkadaşlar karşılaştırdığınız gibi orada bütün her şeyi bir kaç tablo da dizayn ederken burada böldük parçaladık ve hoyrat tasarımı bu şekilde dizgin bir hale getirdik.

Maddeleri burada da açıklamak istiyorum; 
  1. Madde de gördüğünüz üzere sonsuz bir kategori yapısı kuracak bir yapı kurduk. Örneğin bir kategori eklediğimizi düşelim ;   Id = 1 ad = Elektronik Aletler parentId=0 bunun bir üst kategori olduğunu var sayalım bu yüzden parentId değerini 0 verdik. şimdi ikinci alt kategori eklemek istiyorum; Id = 2 ad = Beyaz Eşya ParentId= 1 burada eklemesini yaptığımız 2. kategori bir üst kategori olan elektronik eşyaların altında yer almaktadır. ParentId'si farkettiğiniz üzere birinci eklenen ürünün id bilgisi ile aynı ben bunu bu şekilde sonsuza kadar ekleyebilirim ve hiç bir veri tekrarı olmadan tek tablo ile fazla da yer kaplamadan yapabilirim. 
  2. Madde de ürünümüz var ürün içerisinde gördüğünüz üzere kategori adı tutmuyorum kategorinin id'sini tutuyorum kategoriid kendi tablosunda birincil anahtardır hiç bir zaman değişmez ve ben doğru bir istatisiki bilgiyi buradan alabilirim sayı tuttuğum içinde çok yer kaplamıyor. 
  3. Madde de Kategori gibi sonsuz alt alta ekleyebileceğim bir yapıyı temsil ediyor. Ben Örneğin İl eklerim ilçeyi eklerim mahalleyi eklerim caddeyi eklerim ev daire noya kadar sonsuza kadar kısaca ekleyebilirim bu yapıyla. 
  4. Müşteri sehirId koydum çoktan seçtirme yaparsam eğer doğru sorgularla nokta atışı hangi il hangi ilçe hangi mahalle vb. bir çok sorgulama ve filtreleme yazabilirim ama yukarıda ki kötü tasarım bu bilgilerin de yanlış girilmesine sebebiyet verebilirdi. 
  5. Madde de personel bilgilerinde gördüğünüz gibi stabil bir yetki id tutuyoruz. 
  6. Madde Yetki yi ayrı bir tabloda tuttuk zır bırt yeni yetki eklenmeyecek stabilleştirdik
  7.  Madde Iade durumlarıda tıpkı yetki gibi elle girilmesine izin vermedik çoktan seçtirme yapısını bina ettik.
  8. Stokta artık rahat rahat istatisiki bilgilerini alabiliriz 1. numaralı personelin eklediği stoklar gibi veya seçilen üründe ki stokta bulunan ürün miktarları gibi biz bu şekilde yapmasaydık en çok kargaşayı stok ve satış tablolarında yaşayacaktık. 
  9. Stokta ki durum aynı şekil satış tablosunda da geçerlidir. 
Evet arkadaşlar Veritabanı tasarımı ile alakalı yazımı okuduğunuz için teşekkür ederim bir makalenin daha sonuna geldik. Paylaşımlarımızı değerli buluyorsanız Youtube hesabımız olan Albatu ya abone olmanızı rica eder selam ve dua ile.

 


Yorum Gönder

0 Yorumlar