Veritabanı İlişki Tipleri

Dünyadaki veri büyüklüğün artması ve bu verinin gittikçe değer kazanması ile Oracle, MsSQL ve MySQL gibi ilişkisel veritabanlarında (relational database) veri tutarlılığı, hız, veriye kolay ulaşma, stabilite çok önemli bir noktaya geldi. Tabiki bu özellikleri sağlamamanın ilk kurallarından biriside veritabanındaki verinin nasıl saklanacağının tasarımı. Bu nedenle veritabanı kurulurken ilişki tiplerine dikkat edilmeli ve gerekiyorsa zorunluluklar ile ilişki bütünlüğü kontrol edilerek devamlılığı sağlanmalıdır.

İlişki tiplerine geçmeden önce aşağıdaki iki kavramı bilmek önemli. Bunlar bizim tablolarımızın veri bütünlüğünü korumak için kullandığımız anahtarlardır.

Birincil Anahtar (Primary Key): Tablolarda benzersiz kayıtlar elde etmemizi sağlayan sütuna verilen addır.

İkincil Anahtar (Foreign Key): Bir tabloda benzersiz kayıt oluşturmayı sağlayan sütunun diğer tabloda bir sütun olarak bulunmasına denir.

İlişkisel veri tabanlarında ilişki tiplerini inceleyecek olursak 3 tip ilişki vardır:

  • Bire Bir
  • Bire Çok
  • Çoka Çok

Bire Bir İlişki Tipi: İki tablo arasındaki ilişkiyi sağlamak için kullanacağımız alanların ikiside kendi tablolarında birincil anahtar (primary key) ise birebir ilişki olur.

Yukarıdaki şekilde MUAYENELER ve MUAYENEDETAY adlı iki tablo vardır. Her muayeninin bir detayı olacağı ve her detayında sadece bir muayene için olacağını düşünürsek güzel bir bire bir ilişki tipi olur. Burada ilişki iki tablonun MuayeneNo adlı birincil anahtarı ile sağlanır.

Eğer MUAYENELER ve MUAYENEDETAY tablolarını birleştirerek veritabanını sorgulamak istersek aşağıdaki SQL sorgusunu çalıştırmamız yeterli olacaktır:

1
2
 SELECT * FROM Muayene, MuayeneDetay
 WHERE Muayene.MuayeneNo = MuayeneDetay.MuayeneNo

Bire Çok İlişki Tipi: İki tablo arasındaki ilişkiyi sağlamak için kullanacağımız alanlardan birisi birincil anahtar (primary key) diğeri yabancı anahtar (foreign key) ise bire çok ilişki olur.

Yukarıdaki şekilde MUAYENELER ve HASTALAR adlı iki tablo vardır. Her hastanın birden fazla kez muayne olabileceğini ve her muayenenin yalnız bir hastaya ait olduğunu düşünürsek güzel bir bire çok ilişki tipi olur. Burada ilişki HASTALAR tablosundaki birincil anahtar HastaNo ile MUAYENE tablosundaki yabancı anahtar HastaNo ile sağlanır.

Eğer MUAYENELER ve HASTALAR tablolarını birleştirerek veritabanını sorgulamak istersek aşağıdaki SQL sorgusunu çalıştırmamız yeterli olacaktır:

1
2
 SELECT * FROM Muayene, Hastalar
 WHERE Muayene.HastaNo = Hastalar.HastaNo

Çoka Çok İlişki Tipi: Çoktan çoğa ilişikiler karmaşıklığı nedeniyle veritabanında bir çok soruna neden olabilir. Sorunun temel nedeni bir tablodaki anahtar ilişkili olduğu tabloda birden çok kez olabilirken karşıtı da doğrudur.
Bu yüzden istenilen ilişkiselliği sağlamak için ilişkiyi birden çoğa indirgemek gerekir. Yani araya fazladan bir tablo koyarak karmaşıklıktan kurtulmuş oluruz.

Yukarıdaki tablolardanda görüldüğü gibi eğer ortadaki tablo olmasaydı birçok mühendisle bir çok proje ilişkisi oluşacak ve karmaşıklık yaratacaktı. Fakat araya yeni bir tablo ekleyerek MUHENDISLER ve MUHENDISPROJE tabloları arasında bire çok ayrıca MUHENDISPROJE ile PROJELER tablosu arasında bire çok bir ilişki oluşturuldu.

Böylece verimli bir ilişkisel veritabanı oluşturuldu.

Çoktan çoğa ilişkiyi birden çoğa indirgediğimiz için iki tane birden çoğa ilişki elde ettik yine bu sebepten iki tane ikincil anahtar (Foreign Key) ortaya çıktı. Dolayısıyla SQL sorugusu iki adet olacak. Birincisi bir mühendisin yaptığı proje, ikicisi ise bir projede görevli mühendis olacak.

Birinci sorgumuz (Id numarası 1 olan mühendisin yaptığı projeleri getiren sorgu)

1
2
 SELECT * FROM Muhendisler, MuhendşsProje, Projeler
 WHERE MuhendisProje.PersonelID = Muhendisler.PersonelID AND Muhendisler.PersonelID=1

İkinci sorgumuz (Id numarası 1 olan projede görev alan mühendisleri getiren sorgu)

1
2
 SELECT * FROM Muhendisler, MuhendşsProje, Projeler
 WHERE MuhendisProje.ProjeID = Projeler.ProjeID AND Projeler.ProjeID=1

Medium.com da yazımın linki: @guvengulec

Oracle Workflow Notification Expand Roles

If you are sending the Notification to a Role (everyone with the Payables Responsibility) the Expand Roles is very important

  • Checked, this will create a separate Notification to each person in the Role.  If an action is expected every person has an opportunity to act on the Notification
  • Unchecked, this will create a single Notification which is emailled to each person in the Role.  The first person to act on the notification completes (or closes) it.

oracle workflow notification activity

[Solved] VMWare Virtual Machine “Failed to Lock the File” Error

 If you want to start your operating system after you have run VMWare Virtual Machine on your computer, your operating system will not work and you will see a window

Can not open the disk file_name.vmdk or one of the snapshot disks it depends on. Reason: Failed to lock the file. . The solution is very easy.

Immediately after the Can not open the disk line, navigate to the directory with the file name “filename.vmdk” . Delete the folder “file_name.vmdk.lck” at index O and restart the operating system you want to start from VMWare Virtual Machine.

Good luck…