normalleştirme ve uygulaması normalleştirme neden...
TRANSCRIPT
Normalleştirme ve Uygulaması
1
Normalleştirme Neden Uygulanır: İlişkisel veritabanı oluşturmak için normalleştirmeyi bilmek çok önemlidir. Normalleştirme işlemini anlayabilmek için ise fonksiyonel bağımlılık kavramını iyi öğrenmek gerekir. Normalleştirme veri kayıplarını engellemek, verinin tekrarlanmamasını sağlamak ve yetersizliği önlemek için veritbanına uygulanır. Herhangi bir tablonun tekrarlı veriler içerdiği duruma birinci normal form denir. Birinci normal formu Aşağıdaki tablo ile ele alacağız.
Dikkat edilecek olursa belirli alanlarda tekrarlar yer almaktadır.
Satır Ekleme Sorunu: Böyle bir tabloda ancak yeni bir ürün satın alıdığında yeni bir müşteri eklenir eğer alış veriş yoksa mantıksal olarak müşteri eklemek boş kayıt eklemekle aynı anlama gelir.
Normalleştirme ve Uygulaması
2
Satır Silme Sorunu: Eğer Müşteri bir defa alışveriş yapmışsa yapılan alışveriş silindiğinde tüm müşteri kaydı silineceğinden bu kayıttaki müşteri biliglerine birdaha ulaşılamaz.
Güncelleştirme Sorunu: Eğer Müşterilerden birinin oturma adresi değişirse bu tablodaki bu müşteri ile ilgili tüm kayıtlar güncellenmelidir örneğimizde 5 kayıt olmasına rağmen büyük bir veri tabanında böyle küçük bir değişiklik için bile binlerce kayıdı güncellemek gerekir.
İkinci Normal Form: Birinci normal formda tekrarların ne tür sorunlara neden olduğunu öğrendik şimdide bu sorunları çözmek için birinci normal formdaki tabloyu başka normal tablolara bölmeliyiz. Fonksiyonel bağımlılık göz önünde bulundurularak tablolar bölünmelidir. Bölünen tablolardan birinin birincil anahtarı ile bölünen diğer tablodaki birncil olamayan bir alan arasında bağımlık varsa buna tam bağımlılıkta denir; bu duruma ikinci normal form denilir.
ikinci normal formda da satır ekleme ve silme sorunları ortaya çıkıyor. Satır ekleme sorunu: Müşteri tablosuna bir il eklemek istediğinizde mantıken bir müşteri eklemek gerekir.
Normalleştirme ve Uygulaması
3
Satır Silme Sorunu: Müşteri silindiğinde (Örn: Gökmen İmamoğlu) müşterinin oturduğu şehir ve şehirle ilgili plaka verisi de silinebilir Bu sorunları Düzeltmek için Üçüncü Normal form uygulanır. Üçüncü Normal Form İkinci Normal Form yapısındaki Tabloların Fonksiyonel bağımlılık içermese de alt tablolara bölünmesinden elde edilir.
Master Details Formlar Oluşturmak
4
Master-Detail Form Oluşturmak: Beyaz eşya satışı yapan bir firmanın sattığı ürünler için fatura kesme işleminde kullanılacak bir veritabanı yapısı oluşturulmak istenmektedir aşağıdaki örnekte bu işe yarayan bir veritabanının nasıl hazırlanacağı adım adım anlatılmaktadır. İlgili veritabanının şematik yapısı ve ilişki diagramı Şekil 1. de gösterilmektedir.
Şekil 1. Veritabanının Şematik Yapısı. Öncelikle veritabanında yer alan tabloları aşağıdaki bilgiler ışığında tanımlamamız gerekir
1) Müşteri Tablosu
tblMusteri MusteriID Long Integer Adi Text 25 Soyadi Text 25 Adresi Text 250 TelefonNumarası Text 15 InputMask: \(999") "000\ 00\ 00;;_ Eposta Text 50
Şekil 2. Müşteri Tablosu
Master Details Formlar Oluşturmak
5
Şekil 3. Müşteri Verileri
2) Ürün Tablosu
tblUrun UrunID Long Integer Adi Text 50 Kodu Text 50 Fiyati Currency Format: #,##0.00" TL";-#,##0.00" TL"
Şekil 4. Ürün Tablosu
Şekil 5. Ürün Verileri
Master Details Formlar Oluşturmak
6
3) Fatura Tablosu
tblFatura FaturaID Long Integer MusteriID Long Integer Adres Text 250 Tarih Date/Time InputMask: 00/00/0000;0;_ FaturaNumarasi Text 10
Şekil 6. Fatura Tablosu 4) Fatura Detay Tablosu
tblFaturaDetay FaturaDetayID Long Integer FaturaID Long Integer UrunID Long Integer Adet Long Integer
1) Birinci adımda master-detail türünde bir ilişkinin bulunduğu tblFatura’ya müdahale edeceğiz. İlk değişikliği bu tablodaki MusteriID alanının, Caption (Başlık) ve Default Value (İlk değer) özelliklerinde yapıyoruz. MusteriID Caption’ına Adı Soyadı bilgisini giriyoruz ve Default Value “0”ı siliyoruz ve bu sayede bir ilk değer görüntülenmesini engellemiş oluyoruz (Bknz: Şekil 7).
Master Details Formlar Oluşturmak
7
Şekil 7. Caption ve Default Value değişikliği
MusteriID Caption’ına Adı Soyadı bilgisinin girilmesi ile bundan sonra Tabloda MusteriID ifadesinin Görünmesi Yerine Adı Soyadı Bilgisinin Görünmesini Sağlamış oluyoruz ve Dolayısıyla bundan sonra yaratacağımız tüm Rapor, Form ve Sorgularda Listeleme Anında başlık olarak girdiğimiz Başlık Metni görüntülencektir. (Önemli not: Sorgularda başlıkta görülen değil Tablonun tanımında kullanılan hali ile alan ismi kullanılmalıdır Örneğin: Yanlış : SELECT Adı Soyadı, Adresi,Tarih FROM tblFatura Doğru: SELECT MusteriID, Adresi,Tarih FROM tblFatura )
2) İkinci Adım olarak MusteriID alanında iken Lookup (Arama) tabına geçiyoruz. Bu alanda
öncelikle Display Kontrol kutucuğundaki Text Box tanımını Combo Box haline getirmemiz gerekmektedir.
Master Details Formlar Oluşturmak
8
Daha sonra Row Source satırına SELECT Adi, Soyadi, MusteriID FROM tblMusteri SQL komutunu giriyoruz
Yaptığımız bu işlemle Fatura tablosunda MusteriID alanına veri girmek istediğimizde müşterilerinin ID lerini (örn : 1, 5, 200) yazmak yerine yaptığımız tanım sayesinde Müşterinin İsmini açılan listeden Seçip bu isimle özdeş MüşteriID sayısal verisini yazdığımız SQL Komutunun üçüncü (3) kolonundan
Şekil 8. Bound Column
Master Details Formlar Oluşturmak
9
alıyoruz ve Bound Column’a (İlişkili Sütun) bu nedenle 3 sayısını giriyoruz. Bound Column’a 3 değerini girdiğimizde veritabanına şu komutu vermiş oluyoruz; tabloya veri girerken ismini listeden seçtiğim kişinin ID’sini bul ve bu ID değerini fatura tablosundaki MusteriID alanına sayısal olarak yaz. Ancak
listeleme durumu için Column Counta 2 değerini verdiğimizde bu SQL Cümlesinden dönen sonuçlardan sadece ilk iki kolondaki verileri metin olarak yani Adı Soyadı olarak Listele demiş oluyoruz.
Şekil 9. Veri Giriş ve Sonuç Listesi Dikkat edilecek olursa yukarıdaki Şekil 9’da veri girerken listeden isim soyad seçilmiş olmasına rağmen kayıt girildikten sonra tblonun genel listesinde sadece adı alanı görüntülenmektedir bu durumu düzeltmek için Fatura tablosundaki MusteriID alanında küçük bir değişiklik gerekmektedir. Bu değişiklik Şekil 10 da gösterilmektedir. Row source kutucuğundaki SQL cümlesinde bir alan birleştirme işlemi
Master Details Formlar Oluşturmak
10
Şekil 10. Alan Birleştirme uygulanmaktadır. Ancak bu işlem yapıdıktan sonra Adı ve Soyadı alanları tek bir alan haline gelmiş oldukları için listlenen kolon sayısı değişmiştir bu nedenle MuşteriID nin listelem sırası olan 2 Row Source alanına değer olarak verilmeli ve listelenecek kolon sayısı bilgisi içinse sadece ilk kolonu listelemek için 1 değeri girilmelidir.Bu düzeltmeler yapıldıktan sonra Fatura tablosu durumu aşağıdaki şekilde verilmiştir.
Şekil 11. Düzeltmeden Sonraki Durum
Master Details Formlar Oluşturmak
11
Form Oluşturmak: Form oluşturmak için öncelikle Form Tabına geçmeliyiz.
Create Form by using wizard komutunu verin. Komutu verince aşağıdaki dialog kutusu karşınıza çıkacaktır.
Table/Queries Listesinde tblFatura tablosu seçili iken Available Field Listesinden MusteriID, Adres, Tarih ve FaturaNumarası alanlarını sağ tarafa aktarın FaturaID solda kalsın.
Master Details Formlar Oluşturmak
12
işlemden sonra dialogun durumu yukaradaki gibidir. Bu işlemden sonra Tables/Queries alanında tblFaturaDetay tablosunu seçin bu durumda dialog aşağıdaki gibi görünecektir.
Burda bilinmesi gereken ilk seçilen tblFatura’nın Master tblFaturaDetay’ın Detail olduğudur. Ayrıca tblFaturaDetay dan alanları sağa atarken Master tablonun (bu örnekte tblFatura) Primary Key alanıyla aynı isimli alanı sağ tarafa aktarmamalıyız. Master tablonun Primary Key ile Detail Tablodaki Foreign Key arasında kurduğumuz ilişki nedeni ile bir bağlantı vardır. Bu nedenle eklediğimiz her detay veriye aktif faturanın FaturaID’si otomatik olarak eklenir. İşlemi uyguladıktan sonra dialog aşağıdaki gibi görünmelidir.
Ekran bu halde iken Next tuşuna basılır. Bu komut verildikten sonra dilaog aşağıdaki gibi görünür.
Master Details Formlar Oluşturmak
13
Ekran görüntüsü böyle iken Next tuşuna basılır.
Ekran da seçenekler belirir datasheet bu işlem için uygun bir seçenektir. Bu durumda Next tuşuna basılır.
Form için uygun bir stil seçilir ve Next tuşuna basılır. Aşağıdaki Dialog kutusunda Form alanında İsmi frmFatura ve Subform alanına frmFaturaDetay Subform yazın ve Finish tuşuna basın.
Master Details Formlar Oluşturmak
14
Şonuç aşağıdaki gibidir.