Tablolar arası İlişkiler (Bire-bir, Bire-çok, Çoka-çok)

Blog Eğitim ve Bilgi Haberler Veri Tabanı Tasarımı
Spread the love
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
İlişkiler

İlişkisel veritabanı neredeyse tüm veritabanlarında kullanıldığı için tasarımı ve normalizasyon önemli bir konudur. İ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.

Tabloda tutulan verilerden benzersiz yani aynı değeri iki kez içermeyecek olan sütun birincil anahtar olarak belirlenir Tablodaki bir anahtar alan başka bir tablodaki anahtar alanı göstermesidir

İlişki Primary key ile foreign key arasında kurulur. Üç adet ilişki tipi bulunmaktadır; ONE TO ONE, ONE TO MANY, MANY TO MANY. Tasarımı yaparken bunlardan hangisini kullanacağımızı iyi belirlememiz gerekiyor. Şimdi bu ilişki türlerini tek tek inceleyelim.

ONE TO ONE (1-1)

Bir tablodaki bir satırverinin diğer tablodaki bir satırlık veriye denk gelmesidir. Örnek verecek olursak: araba bilgilerininin tutulduğu bir tablo ve arabaların sigorta bilgisinin tutulduğu bir sigorta tablosu var. Bir arabanın bir adet sigortası vardır. Bir sigorta biligiside bir arabaya aittir. Bu şekilde düşündüğümüzde iki tablo arasında bire bir ilişki türünü kurabiliriz.

create table tbl_cars(
cars_id int primary key identity,
plate nvarchar(10),
mark nvarchar(20),
model nvarchar(20)
)
create table tbl_insurance(
insurance_id int primary key identity,
company nvarchar(20),
startdate date,
finishdate date,
cars_id int unique foreign key references tbl_cars(cars_id)
)

ONE TO MANY (1-N)

En fazla rastalanan ilişki türüdür. Bir tablodaki bir satır verinin diğer tablodaki birden fazla satırlık veriye denk gelmesidir.

Örnek verecek olursak: liseye giden öğrenciler ve okullarını tutacağımız bir veritabanı için bir tane ogrenci tablosu ve bir tanede okul tablosu olsun. Bir öğrenci bir lisede eğitim alır. Birden fazla lisede eğitim alamaz. Fakat bir lisede birden fazla öğrenci eğitim alır. İlişki türüne göre bir lise, birden fazla öğrenci olarak düşünürsek one to many ilişkisini kurabiliriz

create table tbl_highschool(
highschool_id int primary key identity,
name nvarchar(20),
adress date,
phone date
)
create table tbl_student(
student_id int primary key identity,
name nvarchar(10),
surname nvarchar(20),
phone nvarchar(20),
highschool_id int foreign key referencestbl_highschool(highschool_id)
)

 

MANY TO MANY (N-N)

Son ilişki türümüz en karmaşık olan çoktan çoğa ilişki türü. Bu ilişki türünde iki tabloda birden fazla bağa sahiptir. Iki tablodaki birer satırlık verilerin, karşılıklı olarak birden fazla satırlık veriye denk gelmesidir.

Bir örnek üzerinde anlatacak olursak; film bilgilerinin tutulduğu bir tablo ve kategori bilgilerinin tutulduğu diğer tablo olsun. Bir film birden fazla kategoriye sahip olabilir.(dram, psikolojik gerilim…) bir kategoride de birden fazla film olabilir. Bu durumda karşılıklı olarak film ve kategori tabloları birbirine many to may olarak ilişkilidir.

Bu ilişkiyi oluşturmak için her iki tablonun primary keylerini ortak ara bir tablo bağlayarak tutarız.

create table tbl_category(
category_id int primary key identity,
name nvarchar(10)
)
create table tbl_movie(
movie_id int primary key identity,
name nvarchar(20),
producer date,
produce_year date
)
create table CategorryToMovie(
id int primary key identity,
category_id int foreign key references tbl_category(category_id),
movie_id int foreign key references tbl_movie(movie_id)
)

 

Aşağıdaki tablolar arasındaki ilişki türüne karar verin?

 Bir lisede okuyan öğrenci ve veli bilgisinin tutulduğu tablolar  (_________________)
 Tedarikçi ile ürün arasındaki ilişki (_________________)
 Öğrenci ve dersler arasındaki ilişki (_________________)
 Kişiler tablosu ile özgeçmiş bilgisinin tutulduğu tablo arasındaki ilişki (_________________)
 Bir kişi ile ikamet adresi arasındaki ilişki (_________________)
 Ucak bileti ile yolcu arasındaki ilişki (_________________)
 Lise okulu ile öğrenciler arasındaki ilişki (_________________)
 Karikatür ve Karikatürcü arasındaki ilişki (_________________)
 Futbolcular ile takım arasındaki ilişki (_________________)
 Hasta ve muayene arasındaki ilişki (_________________)
 Üretim Firmasi ve ürünler arasındaki ilişki (_________________)
 Personel ve Departman arasındaki ilişki (_________________)
 Siparis tablosu ile kargo firması bilgilerinin tutulduğu tablo arasındaki ilişki (_________________)
 Seçmen ile oy kullandıkları sandık bilgilerinin tutulduğu tablo arasındaki ilişki (_________________)
 Mezarlık sistemindeki ölü ile mezar ilişkisi (_________________)
 Araba ile ona ait sigorta bilgisi (_________________)
 Ürün ve kategori arasındaki ilişki (_________________)
 Bir kişinin çaliştiği şirket ve şirkette calısan insanlar (_________________)
 Yazar ve kitap arasındaki ilişki (_________________)
 Sipariş ile urun arasındaki ilişki (_________________)
 Tarla bilgisi ile ekilen tarım ürünü bilgisi arasındaki ilişki (_________________)
 Otopark ile park edilen araçlar arasındaki ilişki (_________________)
 Bir kişinin daha önceden çalıştığı şirketler, ve şirketlerde çalışan insanlar (_________________)
 Asker ve askerlik yaptığı birim arasındaki ilişki (_________________)
 Cezaevi ve mahkumlar arasındaki ilişki (_________________)
 Bilgisayar ve ip adresi arasındaki ilişki (_________________)
 Mahalle ve muhtarlık(kurum) arasındaki ilişki (_________________)
 Muhtarlık(kurum) ile muhtar arasındaki ilişki (_________________)
 Otobus ve şoför ile arasındaki ilişki(sehirlerarası) (_________________)
 Uydu ve televizyon kanalları arasındaki ilişki (_________________)
 Avukat ve dava arasındaki ilişki (_________________)
 Acil serviste çalışan doktorlar ile ambulans arasındaki ilişki (_________________)
 Organ nakil alan ile veren(donör) arasındaki ilişki (_________________)

Örnek : Bookstore Veritabanı

Bu zamana kadar öğrendiklerimizle küçük bir veri tabanı tasarımı yapalım. Oluşturacağımız veri tabanı kitapları, okuyucuları, yazarlar, yayınevlerinin bilgilerini tutan bir veritabanı olacaktır. Kitapları tutmak için tbl_book, kitapların ayrıntılı bilgisini tutmak için tbl_bookdetail, yayınevlerini tutmak için tbl_publisher, okuyucuları tutmak için tbl_reader, yazarları tutmakiçin tbl_authur tablolarına ihtiyacımız var. Bu tabloların ilişki türlerine baktığımızda;

Tbl_book and tbl_reader : many to many
Tbl_book and tbl_author: one to many
Tbl_book and tbl_publisher : one to many
Tbl_book and tbl_bookdetail: one to one

–create database db_yayimevi
create table tbl_yayimci(
yayimci_id int primary key identity,
isim nvarchar(80) not null,
adres text,
telefon char(11) unique not null ,
email nvarchar(30) unique
)
create table tbl_kitap(
kitap_id int primary key identity,
isim nvarchar(50) not null,
s_sayisi smallint,
b_yili char(4),
yayimci_id int foreign key references tbl_yayimci(yayimci_id)
)
create table tbl_kitapdetay(
detay_id int primary key identity,
isbn char(13) not null unique,
onsoz text,
kitap_id int unique foreign key references tbl_kitap(kitap_id)
)

create table tbl_yazar(
yazar_id int primary key identity,
ad nvarchar(20) not null,
soyad nvarchar(25) not null,
telefon char(11) unique,
cinsiyet char(1) check(cinsiyet=’K’ or cinsiyet=’E’),
dogum_tarih date check(dogum_tarih<getdate())
)
create table tbl_okuyucu(
okuyucu_id int primary key identity,
isim nvarchar(25) not null,
soyisim nvarchar(25) not null,
email nvarchar(30) unique
)
create table tbl_kitapToYazar(
kty_id int primary key identity,
kitap_id int foreign key references tbl_kitap(kitap_id),
yazar_id int foreign key references tbl_yazar(yazar_id)
)

create table tbl_kitapToOkuyucu(
kto_id int primary key identity,
kitap_id int foreign key references tbl_kitap(kitap_id),
okuyucu_id int foreign key references
tbl_okuyucu(okuyucu_id)
)
create table tbl_yazarToYayimci(
yty_id int primary key identity,
yazar_id int foreign key references tbl_yazar(yazar_id),
yayimci_id int foreign key references
tbl_yayimci(yayimci_id)
)

Örnek : Movie Veritabanı

Aşağıda film bilgilerinin yıllara ve kategorilerine göre tutulduğu bir veritabanının tabloları
hazır bir şekilde verilmiştir.
Bu tabloların birbirleri ile ilişkilerini tespit edip sql komutları ile veritabanını oluşturun.

Örnek : Project Veritabanı

Aşağıda muhendislik firmasına ait hazırlanan tablolar vardır. Bu tabloların birbirleri ile ilişkilerini tespit edip veritabanınızı sql komutları ile oluşturun

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.