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 PostgreSQL TM 8.0 belgelerindeki Kalıtım bölümüne bakınız.
|