Veritabanı Tasarımında İlişki Çeşitleri

İlişkisel veritabanı neredeyse tüm veritabanlarında kullanıldığı için tasarımı ve normalizasyonu önemli bir konu. İyi bir ilişkisel veritabanı tasarımı yapmanın bir çok avantajı vardır. Tasarlanan ilişkisel veritabanın kalitesine paralel olarak kısaca sıralanacak avantajlar şunlardır :

  • Tekrarlanan verilerin azaltılması.
  • Veritabanı hakimiyetini yükseltmek.
  • İş yükünü azaltmak ve esneklik sağlamak.

İlişkisel veritabanlarında olabilecek üç çeşit ilişki vardır. Bunlar:

  • Bire Bir
  • Birden Çoğa
  • Çoktan Çoğa

şeklindedir.

Bire Bir İlişki Türü: (İlişkisel Veritabanı Tasarımı)

Bire Bir ilişki, bir tablodaki bir satır, diğer tablodaki bir satır ile ilişkili olabilir.

Yukarıdaki örnekte consignment_datas ve entry_accept_controls adlı iki tablo var. Bunlar bizim veritabanında kullandığımız tablolar. Consignment_datas, irsaliye demektir. Diğer tablo ise giriş kabul onayı demektir. Burada bir irsaliyeyi bir kişi onaylayabilir. İrsaliye üzerindeki bir onay birden fazla kişiye ait olamaz. Bu yüzden bu iki tablo arasında bire-bir ilişki vardır. İrsaliye tablosunda entry_accept_control_id foreign keydir. Diğer tablo ile bire-bir ilişkiyi bu foreign key sayesinde kuruyoruz.

Eğer irsaliyeyi kimin onayladığını öğrenmek istersek aşağıdaki sql kodunu kullanmamız yeterli olacaktır.

1 SELECT * FROM consignment_datas, entry_accept_controls WHERE consignment_datas.entry_accept_controls_id = entry_accept_controls.id

Bire Çok İlişki Türü:

Bire-çok ilişki türünde bir tablonun satırları diğer tablonun birden çok satırı ile ilişkili olabilmektedir.

Veritabanımızdan bir örnek verecek olursak, cari hesaplar(currency_accounts) ve dekontlar(receipts) arasındaki ilişki bire çoktur. Yani bir cari hesap birden çok dekontla ilgili olabilir fakat bir dekontun birden fazla cari hesap ile ilişkisi olamaz.

Eğer bir cari hesabın faturalarını listelemek istersek kabaca:

1 SELECT * FROM currency_account,receipts WHERE currency_account.id = receipts.currency_account_id;

Sql sorgusunu çalıştırabiliriz. Böylece önümüze tüm attribute’lerin yer aldığı bir döküm gelecektir.

Bire-çok en fazla kullanılan ilişki çeşididir.

Çoğa-Çok İlişki Türü: (Many to Many)

Çoka-çok veritabanında bir tablodaki bir satır, karşı tablodaki birden fazla satır ile ilişkili iken, karşı tablo için de aynısı geçerlidir.

Bizim programımızda cases ve bank_accounts arasında çoğa-çok ilişki olacaktır. Yani birden çok kasa birden çok banka hesabına para yatırıp çekebilirken tersi de doğrudur. Bu tarz ilişkileri belirlerken iki tarafın id’sine de ulaşabileceğimiz ayrı bir tablo oluşturmak akıllıca olacaktır.

İlişkiyi yukarıdaki şekildeki gibi kurabiliriz. Bu şekilde iki adet bire-çok ilişkili tablo elde etmiş olduk. Bu iki adet sorgu yazarak istediğimiz bilgileri çekebileceğimiz manasına geliyor.

Birinci sorgumuz cari hesabı 2 olan carinin bankalarla olan ilişkisini gösterir.

1 select * from bank_accounts,cases,payment_withdraws where payment_withdraws.bank_accounts_id=bank_accounts.id and payment_withdraws.cases_id=2

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.