Herencia

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.

Por ejemplo, la siguiente consulta encuentra todas las ciudades situadas a una altitud de 500 pies o m�s:
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.