Oracle’da birbiri ile ilişkili tablolar oluşturmak

Birbiri ile ilişkli tablolar,

bir diğer adı ile primary key – foreign key ilişkisi.

Bu yazımızda Oracle‘da bu tarz bir ilişkinin basit bir örneğini göstermeye çalışacağız.

Tablolarımız: YAZARLAR, KITAPLAR

Aradaki İlişki: Her kitabın bir yazarı var, bir yazarın birden fazla kitabı olabilir.

Doğru Olmayan Çözüm: YAZARLAR tablosuna kitap_adi gibi bir kolon eklemek. Çünkü yazar ikinci kitabını yazdığında yeni bir kolon gerekecek, üçüncüsünü yazdığında üçüncü kolon…

Doğru Çözüm: KITAPLAR tablosuna  yazar_id diye bir kolon ekleyerek sorunu çözebiliriz










Tablolar:

YAZARLAR
id ad soyad
KITAPLAR
isbn kategori baslik sayfa_adedi fiyat yazar_id

Şimdi kodlarımızı yazabiliriz. Dikkat ederseniz yazar_id KITAPLAR  tablosuna foreign key olarak verilmiş yani yazar_id sadece YAZARLAR tablosundakilerden olabilir (yani yazarı olmayan kiyap olamaz)

create table YAZARLAR (

id          number primary key,

ad          varchar2(50),

soyad    varchar2(50)

);

Şimdi de KITAPLAR tablomuzu oluşturalım..

create table KITAPLAR (

isbn                   char(10)    primary key,

kategori             varchar2(50),

baslik        varchar2(50),

sayfa_adedi      number,

fiyat                     number,

yazar_id             number  CONSTRAINT kitap_yazari

REFERENCES YAZARLAR(id)

);

KITAPLAR tablosunda gördüğünüz gibi kitap_yazari isminde bir consraint (kısıtlayıcı) tanımladık referans olarakta YAZARLAR tablosunun id kolunu verdik. Bu sayede öncedende bahsettiğimiz gibi bir kitap eklemek için mutlaka bu kitabın yazarının YAZARLAR tablosuna eklenmiş olması gerekir.

Tablolarımıza birkaç kayıt ekledikten sonra. Yazarlar ve yazdıkları kitapları görmak için şu select sorgusunu yazabiliriz.

select k.baslik, y.ad from yazarlar y, kitaplar k where y.id=k.yazar_id

iyi çalışmalar

[ad#co-1]

Sevebilirsin...

5 Yanıt

  1. kerem dedi ki:

    çok faydalı oldu, teşekkürler.

  2. Elif dedi ki:

    Bunca yıl sonra bile şu yazdığınız gerçekten çok işime yaradı. Teşekkürler.

  3. Atos dedi ki:

    teşekkürler, başlangıç seviyesi için çok faydalı bir yazı olmuş. anlatım da çok yalın ve güzel.

  4. Tayfun dedi ki:

    https://localhost:1158/em linkinden nasıl yapabilirim? Hangi sayfadan yapılıyor bu?

  5. sebahattin kumpınar dedi ki:

    Sorunuzu tam olarak anlayamadım, biraz açıklar mısınız?

Bir Cevap Yazın

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