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.
| 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.