Creemos dos clases. La clase capitals contiene las capitales de los estados que son también ciudades. Naturalmente, la clase capitals debe heredar de cities.
CREATE TABLE cities (
name text,
population float,
altitude int -- (in ft)
);
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
En este caso, una instancia de capitals hereda
(inherits) todos los atributos (name, population,
altitude) de la clase cities. El tipo del atributo name es
text, un tipo de dato nativo de
Postgres para cadenas ASCII de longitud
variable. El tipo del atributo population es float, un
tipo datos, también nativo, para números de punto flotante de doble
precisión.
Además capitals tiene un atributo extra, state, que muestra el
estado al que pertenece. En Postgres una
clase puede heredar de ninguna o varias otras clases, y una consulta
puede hacer referencia tanto a todas las instancias de una clase como
a todas las instancias de sus descendientes.
Nota: En realidad, la jerarquía de la herencia es un gráfico dirigido y acíclico.
SELECT name, altitude
FROM cities
WHERE altitude > 500;
+----------+----------+
|name | altitude |
+----------+----------+
|Las Vegas | 2174 |
+----------+----------+
|Mariposa | 1953 |
+----------+----------+
Por otro lado, para encontrar los nombres de todas las ciudades, incluyendo las capitales de estado, que están localizadas a un altitud por encima de los 500 pies, la consulta sería:
SELECT c.name, c.altitude
FROM cities* c
WHERE c.altitude > 500;
Lo que devuelve lo siguiente:
+----------+----------+ |name | altitude | +----------+----------+ |Las Vegas | 2174 | +----------+----------+ |Mariposa | 1953 | +----------+----------+ |Madison | 845 | +----------+----------+Aquí, el "*" después de cities indica que la consulta debe realizarse sobre cities y todas las clases que estén por debajo de ella en la jerarquía de herencia. Muchas de las órdenes que ya hemos analizado (SELECT, UPDATE y DELETE) permiten la utilización de "*", así como otros, como pueden ser ALTER TABLE.