Kalıtım
Önceki Gelişmiş Özellikler Sonraki
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 cities tablosu ile bir capitals tablosu. Doğal olarak, başkentler aynı zamanda şehirdirler, dolayısıyla şehirleri listelerken dolaylı olarak başkentleri de bir şekilde göstermek isteriz. Biraz akıllıca hareket ederek, şöyle bir şema kullanabilirsiniz:
CREATE TABLE capitals (
  name       text,
  population real,
  altitude   int,    -- (feet cinsinden)
  state      char(2)
);

CREATE TABLE non_capitals (
  name       text,
  population real,
  altitude   int     -- (feet cinsinden)
);

CREATE VIEW cities AS
  SELECT name, population, altitude FROM capitals
    UNION
  SELECT name, population, altitude FROM non_capitals;
Ç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 cities (
  name       text,
  population real,
  altitude   int     -- (feet cinsinden)
);

CREATE TABLE capitals (
  state      char(2)
) INHERITS (cities);
Bu durumda capitals tablosu, cities tablosundaki bütün sütunları (name, population ve altitude) miras alacaktır. name sütununun türü text olup, değişken uzunlukta dizge kabul eden bir PostgreSQL türüdür. Eyalet başkentleri ek bir sütuna, eyalet sütununa sahiptir ve hangi eyaletin başkenti olduğu bu sütunda belirtilir. PostgreSQL'de bir tablo, sıfır ya da daha fazla tablo miras alabilir.
Örneğin, ağağıdaki sorgu, tüm şehirlerin isimleri arasından başkentler de dahil 500 feet'ten daha yüksekteki şehirleri bulmaktadır:
SELECT name, altitude
  FROM cities
  WHERE altitude > 500;
Sorgu şöyle dönecektir:
   name    | altitude
-----------+----------
 Las Vegas |     2174
 Mariposa  |     1953
 Madison   |      845
(3 rows)
Aşağıdaki sorgu ise, eyalet başkenti olmayan şehirlerden 500 feet ve daha yüksekte olan şehirleri bulmaktadır:
SELECT name, altitude
    FROM ONLY cities
    WHERE altitude > 500;
   name    | altitude
-----------+----------
 Las Vegas |     2174
 Mariposa  |     1953
(2 rows)
Buradaki ONLY deyimi sorgunun sadece cities tablosunda yapılacağını cities tablosunu miras alan tablolarda yapılmayacağını belirtir. Daha önce bahsettiğimiz SELECT, UPDATE ve DELETE cümleleri de dahil olmak üzere pek çok SQL cümlesi ONLY deyimini destekler.
Not
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 için PostgreSQLTM 8.0 belgelerindeki Kalıtım bölümüne bakınız.
Önceki Üst Ana Başlık Sonraki
Hareketler Başlangıç Sonuç
Bir Linux Kitaplığı Sayfası