Serkan Ayyıldız

Meraklı bir yazılım uzmanı...

SQL Ara Tablo

Yeniden merhabalar :)

Bugün yeni bir SQL makalesinde yine beraberiz ve SQL ara tablo oluşturma konusuna giriş yapıyoruz.

Veritabanı tasarımlarından ilk makalemizden beri bahsediyorum ve veritabanları yazılım ve veri madenciliği gibi üst veritabanı projelerinin vazgeçilmezi haline geldi ve durum böyle olunca bir veritabanını projeye uygun şekilde tasarlamak için bazen haftalar alabiliyor.Bunun nedeni projelerin ihtiyaç ve fonksiyonlarının veritabanına doğru modellenmesi gerektiğidir çünkü yanlış modellenen veritabanları ciddi zaman kayıplarına neden olabilmektedir.

Doğru veritabanı tasarımı için veritabanı mantığına ve normalizasyon kurallarına uygun tablolamalar gerçekleştirilmelidir ve bugünkü makalemiz normalizasyon kurallarından birisi olan çoka-çok dediğimiz veri yapıları hakkında olacaktır.

Çoka-çok denilen tablo tasarımı iki farklı türden verinin en esnek şekilde aynı yerde toplanmasıdır ve bu iki değişken birbirinden bağımsız olmaktadır.Konuyu daha iyi anlayabilmeniz için önceki makalelerimizden beri süregelen BakkalDB isimli örnek veritabanımız üzerinde görelim.

Veritabanımızın son tasarımı aşağıdaki gibiydi:

sql-diagram

Yapmak istediğimiz örnek olay şu: müşteri bakkala geliyor ve ürün alıyor bizde bunu kayıt altına alıyoruz.
Varsayım olarak müşterinin büyük bir markete gelmiş olsun ve markete girer girmez ilk ne yapıyoruz,tabiki hemen bir sepet kapıyor ve ürünleri bu sepete dolduruyoruz.Bu olayı veritabanına modellerken şunu düşünmeliyiz:

Kullanıcı 1 kg elma alıyor ve 3 kg üzüm alıyor,böylece sepetine birden çok çeşit ürün atmış oluyor.Ancak bir başka müşteri de 2 kg elma ve 2 kg üzüm alıyor yani aynı türden ürünleri farklı bir sepete atıyor.

İşte bu durumda şunu diyoruz:

Bir ürün cinsi birden çok müşterinin sepetinde olabilir,aynı zamanda bir sepette de birden çok çeşitte ürün olabilir.

Bu durumda hem ürünler hem de müşteriler tablosunu bir noktada buluşturmalıyız ve o noktaya ara tablo diyoruz.

Ara tabloda kullanacağımız iki anahtar yapısı var;primary key ve foreign key.Primary key kullanmamızın amacı ara tablo sonuçta içerisinde birden çok veri depolanacak bir SQL tablosu ve bu verileri sıralı ve düzenli bir şekilde listelemek için kullanıyoruz,foreign keyi de bu ara tablo içerisine doldurulacak referans veriler diğer tablolardan çağrıldığı için kullanıyoruz.

Şimdi müşterilerin alışveriş sepetlerini barındıracak "Sepetler" adında bir tablo oluşturuyoruz ve normal tablo oluşturur gibi primary key tanımlıyoruz:

sql-table

Primary key olarak "SepetID" kolonumuzun değeri her veri girişinde otomatik artsın diye auto-increment özelliğini aktifleştirdik.(Önceki makalelerimzde öğrenmiştik.)

Ardından ürünler tablosundan referans veri çağırabilmemiz için yeni bir kolon ekliyoruz,bu kolon ismi çağırdığımız tablodaki kolon ismiyle aynı olmak zorunda değil ancak ben alışkanlık ve kolay anlaşılır olsun diye aynı isimle yazıyorum böylece normalizasyonu sağlıyorum bir nevi.

sql-ara-tablo

Burada dikkat etmemiz gereken nokta ara tablolarda referans çağrılan kolonların boş geçilmemesi gerektiğidir,aksinde çağrılan veri diğer hangi veriyle birleştirilemeyecek ve tasarımımız hatalı olacaktır.Bu yüzden Allow Nulls seçeneğinin işaretini kaldırdık.

Şimdi ürünler tablosundaki "UrunID" primary key niteliğindeki kolonu ara tablomuzdaki "UrunID" kolonumuzun üzerine sürüklüyor ve açılan pencereye onay verdikten sonra foreign key bağlantımızı kuruyoruz:

MSSQL

Aynı işlemi müşteriler tablosu için uyguluyoruz:

SQL-Foreign-Key

Artık ara tablomuz içerisine veri girmeye hazır ancak bu şekilde çok basit bir ara tablo düzeni yapmak gerçek şartlara pekte uygun değil çünkü bazı sabitlenmesi gereken bilgiler olacaktır.
Örneğin sepete atılan ürünün fiyatını ve birimini tutmak çok akıllıca olacaktır,özellikle fiyat bilgisini tutmak zorundayız çünkü ürünler tablosundaki fiyat bilgisi ürünün o andaki fiyatını gösteriyor yani bugünkü satılan fiyatı tutmaz ve yarın elmaya zam gelirse bu durumda sanki bugün zamlı fiyat üzerinden satış yapmış gibi yanlış bir mantık ortaya çıkar.

Şimdi fiyat ve birim kolonlarımızı ekliyoruz:

Database-Table

Artık ara tablomuz kullanıma hazır sayılır,sayılır diyorum çünkü henüz veritabanı tasarımımız bitmiş sayılmaz.Bir sonraki makalemizde "Sepetler" ara tablosu üzerinde seveceğinizi umduğum güzel bir konuyu öğreneceksiniz.

Veritabanımızın son hali:

SQL-Database

Şimdilik bir sonraki SQL makalemizde görüşmek dileğiyle hoşçakalın :)

Bir yorum bırak E-posta adresiniz yayınlanmayacaktır.

Menu