4.2. Anahtarlar

SQL Dili kısmındaki hava_durumu ve iller tablolarını tekrar ele alalım ve hava_durumu tablosuna girilecek kayıtlardan iller tablosundaki kayıtlarla eşleşmeyecek olanlarının tabloya girilmeyeceğinden emin olmak istediğinizi varsayalım. Buna verilerin göreli bütünlüğünün sağlanaması diyoruz. Basitleştirmeli veritabanı sistemlerinde bu şöyle gerçeklenir: Önce iller tablosunda eşleşen bir kaydın olup olmadığına bakılır ve yeni hava_durumu kaydının tabloya girilip girilmeyeceğine karar verilir. Bu yaklaşım çok sakıncalı sorunlar içerir, ancak PostgreSQL bunu sizin için yapabilir.

Tabloların yeni bildirimleri şöyle olurdu:

CREATE TABLE iller (
        ad     varchar(80) primary key,
        konum  point
);

CREATE TABLE hava_durumu (
        il        varchar(80) references iller(ad),
        asg_sck   int,
        azm_sck   int,
        yağış     real,
        tarih     date
);

Şimdi geçersiz bir kaydı girmeye çalışalım:

INSERT INTO hava_durumu VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');

Çıktısı:

HATA:  "hava_durumu" tablosu üzerindeki ekleme veya güncelleme işlemi "hava_durumu_il_fkey" foreign key kısıtlamasını ihlal ediyor
AYRINTI:  "iller" tablosunda (il)=(Berkeley) anahtarı mevcut değildir.

Anahtarların davranışları uygulamanıza en iyi şekilde uyarlanabilir. Bu eğitmende bu basit örnekten daha ileri gitmeyeceğiz, fakat daha fazla bilgi edinmek isterseniz, PostgreSQL belgelerindeki Data Definition kısmına bakabilirsiniz. Anahtarları doğru şekilde kullanarak veritabanı uygulamalarınızın kalitesini oldukça arttırabilirsiniz, dolayısıyla anahtar kullanımını iyi öğrenmenizi öneririz.