Créons deux classes. La classe "capitals" contient les capitales d'état qui sont aussi des villes. Naturellement, la classe capitals doit hériter des villes.
CREATE TABLE cities (
name text,
population float,
altitude int -- (in ft)
);
CREATE TABLE capitals (
state char2
) INHERITS (cities); |
Dans ce cas, une instance de capitales
hérite de tous les attributs (nom, population, et altitude) depuis son parent, villes. Le type d'attibut nom est
text, un type Postgres natif pour les chaînes de longueur variables ASCII. Le type d'attibut population est
float, un type Postgres natif pour les nombres décimaux en double précision. Les capitales d'état ont un extra attribut, state, qui fournit leur état. Dans Postgres, une classe peut hériter de zéro ou plus autres classes, et une requête peut referencer soit toutes les instances d'une classe soit toutes les instances d'une classe plus tous ses descendants.
| la hiérarchie héritage est actuellement un graphe acyclique direct. |
Par exemple, les requêtes suivantes trouvent toutes les villes qui sont situées à une altitude de 500ft ou plus :
SELECT name, altitude
FROM cities
WHERE altitude > 500;
+----------+----------+
|name | altitude |
+----------+----------+
|Las Vegas | 2174 |
+----------+----------+
|Mariposa | 1953 |
+----------+----------+ |
D'autre part, pour trouver les noms de toutes les villes, incluant les capitales d'état, qui sont situées à une altitude de plus de 500ft, la requête est :
SELECT c.name, c.altitude
FROM cities* c
WHERE c.altitude > 500; |
qui renvoie :
+----------+----------+
|name | altitude |
+----------+----------+
|Las Vegas | 2174 |
+----------+----------+
|Mariposa | 1953 |
+----------+----------+
|Madison | 845 |
+----------+----------+ |
Ici le "*" après cities indique que la requête doit être lancée sur les cities et toutes les classes au-dessous de cities dans la hiérarchie héritage. Plusieurs commandes que nous avons déja vues --
>select,
update et
delete -- supportent la notation "*", ainsi que d'autres comme
alter.