4.5. Kalıtım
Kalıtım (miras alma), nesne yönelimli veritabanlarından kaynaklanan bir kavramdır. Bu sayede veritabanı tasarımında ilginç ve yeni olasılıkların yolu açılmıştır.
İki tablo oluşturalım: Bir iller
tablosu ile bir başkentler
tablosu. Doğal olarak, başkentler aynı zamanda ildir, dolayısıyla illeri listelerken dolaylı olarak başkentleri de bir şekilde göstermek isteriz. Biraz akıllıca hareket ederek, şöyle bir şema kullanabilirsiniz:
CREATE TABLE başkentler ( ad text, nüfus real, yükseklik int, -- (metre cinsinden) ülke char(2) ); CREATE TABLE kentler ( ad text, nüfus real, yükseklik int -- (metre cinsinden) ); CREATE VIEW iller AS SELECT ad, nüfus, yükseklik FROM başkentler UNION SELECT ad, nüfus, yükseklik FROM kentler;
Çok fazla sorgulamadan bu doğru çalışır, fakat, bazı satırları güncellemek istediğinizde tuhaf şeyler olur.
Bu daha iyi bir çözümdür:
CREATE TABLE iller ( ad text, nüfus real, yükseklik int -- (metre cinsinden) ); CREATE TABLE başkentler ( ülke char(2) UNIQUE NOT NULL ) INHERITS (iller);
Bu durumda başkentler
tablosu, iller
tablosundaki bütün sütunları (ad
, nüfus
ve yükseklik
) miras alacaktır. ad
sütununun türü text
olup, değişken uzunlukta dizge kabul eden bir PostgreSQL türüdür. başkentler
tablosu ek bir sütuna, ülke kısaltmasını gösteren ülke
sütununa sahiptir. PostgreSQL'de bir tablo, sıfır ya da daha fazla tablo miras alabilir.
Örneğin, aşağıdaki sorgu, tüm illerin isimleri arasından başkentler de dahil 500 metre'den daha yüksekteki illeri bulmaktadır:
SELECT ad, yükseklik FROM iller WHERE yükseklik > 500;
Sorgu şöyle dönecektir:
ad | yükseklik ---------+---------- Erzurum | 1900 Bitlis | 1500 Ankara | 850 (3 satır)
Aşağıdaki sorgu ise, ülke başkenti olmayan illerden 500 metre ve daha yüksekte olan illeri bulmaktadır:
SELECT ad, yükseklik FROM ONLY iller WHERE yükseklik > 500;
Çıktısı:
ad | yükseklik ---------+---------- Erzurum | 1900 Bitlis | 1500 (2 satır)
Buradaki ONLY
deyimi sorgunun sadece iller
tablosunda yapılacağını iller
tablosunu miras alan tablolarda yapılmayacağını belirtir. Daha önce bahsedilen SELECT
, UPDATE
ve DELETE
cümleleri de dahil olmak üzere pek çok SQL cümlesi ONLY
deyimini destekler.
Bilginize
Kalıtım yeterince kullanışlı olduğundan, kullanışlılığını sınırlayan tekil kısıtlar ve anahtarlar ile bütünleştirilmemiştir. Daha fazla bilgi güncel PostgreSQL belgelerindeki Inheritance bölümünde bulunabilir.