Creemos dos clases. La clase capitals contiene las capitales de los estados,
las cuales son también ciudades. Naturalmente, la clase capitals debería
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 todos los atributos
(name, population y altitude) de su padre, cities. El tipo del atributo name (nombre) es
text, un tipo nativo de
Postgres
para cadenas ASCII de longitud variable. El tipo del atributo population (población) es
float, un tipo de datos, también nativo de
Postgres
, para números de punto flotante de doble precisión. Las clase capitals tiene un
atributo extra, state, que muestra a qué estado pertenecen. 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 una clase y sus
descendientes.
| La jerarquía de la herencia es un gráfico acíclico dirigido.
|
Por ejemplo, la siguiente consulta encuentra todas aquellas ciudades que están
situadas a un altura de 500 o más pies:
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, incluídas las
capitales estatales, que estén situadas a una altitud de 500 o más pies, la consulta es:
SELECT c.name, c.altitude
FROM cities* c
WHERE c.altitude > 500;
|
which returns:
+----------+----------+
|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 la
herencia. Muchos de los comandos que ya hemos discutido (
select,
and>upand> and
delete)
brindan soporte a esta notación de
"*" al igual que otros como
alter.