Professional Documents
Culture Documents
Para comprender ste concepto muy interesante y til para muchos casos hacer uso del
siguiente ejemplo bastante sencillo.
Ya se tiene la tabla padre, a partir de este momento se puede crear un hijo a partir
de l. Adems se va agregar 1 columna ms que indicara el departamento o estado
que pertenece a sa capital.
CREATE TABLE capitales (
departamento char(2)
) INHERITS (ciudades);
Tabla ciudades
insert into ciudades values ('Fernando de la Mora', 24522, 25);
insert into ciudades values ('Lambar', 34500, 135);
insert into ciudades values ('San Lorenzo', 16852, 120);
Tabla capitales
insert into capitales values ('Asuncion', 450000, 136, 'CN');
insert into capitales values ('Encarnacion', 128000, 120, 'EN');
Con esto se obtiene una reduccin en la construccin del ndice y ganaremos velocidad con
ello adems de un mejor orden conceptual de las tablas.
No slo se puede heredar de un padre, es posible heredar de varias tablas, as teniendo la
tabla hija todas las columnas de sus padres, y en caso que 2 o ms padres tengan un
columna con el mismo nombre stas se fusionarn en la hija siempre y cuando sean del
mismo tipo de dato.
Al utilizar sta poderosa caracterstica existen algunas consideraciones que hay que tener
en cuenta para evitarnos sorpresas desagradables e inesperadas.
http://www.devtroce.com/2010/11/14/herencia-de-tablas-en-postgresql/
Herencia
La herencia es un concepto de bases de datos orientadas a objetos que abre nuevas
posibilidades interesantes de diseo de bases de datos.
Crear dos tablas: una tabla de ciudades (cities) y otra tabla de capitales (capitals).
Naturalmente, las capitales tambin son ciudades, as que uno quisiera tener cierta forma
de mostrar las capitales de manera implcita cuando se listan las ciudades. Si uno es
realmente inteligente inventara un esquema como este:
CREATE TABLE
name
population
altitude
state
);
capitals (
text,
real,
int,
-- (en pies)
char(2)
CREATE TABLE
name
population
altitude
);
non_capitals (
text,
real,
int
-- (en pies)
Esto funciona bien para las consultas, pero se va poniendo feo cuando se necesita
actualizar varias filas.
Una mejor solucin es esta:
CREATE TABLE
name
population
altitude
);
cities (
text,
real,
int
-- (en pies)
En este caso, una fila de capitals hereda todas las columnas de su tabla madre, cities
(name, population y altitude). El tipo de dato de la columna name es text, que es un tipo
de dato nativo de PostgreSQL para cadenas de letras de longitud variable. Las capitales
de estado tienen una columna adicional, state, que muestra su estado. En PostgreSQL,
una tabla puede heredar de cero o ms tablas.
Por ejemplo, la siguiente consulta encuentra el nombre de todas las ciudades, incluyendo
las capitales, que estn ubicadas a una altitud superior a los 500 pies:
SELECT name, altitude
FROM cities
WHERE altitude > 500;
Resultado:
name
| altitude
-----------+---------Las Vegas |
2174
Mariposa |
1953
Madison
|
845
(3 rows)
Por otro lado, la siguiente consulta encuentra todas las ciudades que no son capitales de
estado y que estn situadas a una altitud igual o superior a 500 pies:
SELECT name, altitude
FROM ONLY cities
WHERE altitude > 500;
name
| altitude
-----------+---------Las Vegas |
2174
Mariposa |
1953
(2 rows)
Aqu, el ONLY antes de cities indica que la consulta debe ejecutarse solamente sobre la tabla de
ciudades y no sobre las tablas que estn debajo de ella en la jerarqua de herencia. Muchas de las
rdenes que ya se han mencionado (SELECT, UPDATE y DELETE) admiten la notacin ONLY.
http://pgsqltutorial.readthedocs.org/en/latest/part_iii/inheritance.html
Las 12 reglas de Codd son un sistema de reglas propuestas por Edgar F. Codd, del modelo relacional
para las bases de datos, diseado para definir qu requiere un sistema de administracin de base de
datos.1
Codd se percat de que existan bases de datos en el mercado las cuales decan ser relacionales, pero lo
nico que hacan era guardar la informacin en las tablas, sin estar estas tablas literalmente
normalizadas; entonces ste public 12 reglas que un verdadero sistema relacional debera tener
aunque en la prctica algunas de ellas son difciles de realizar. Un sistema podr considerarse "ms
relacional" cuanto ms siga estas reglas.
Regla 9: independencia lgica de los datos, los cambios al nivel lgico (tablas,
columnas, filas, etc.) no deben requerir un cambio a una solicitud basada en la
estructura. La independencia de datos lgica es ms difcil de lograr que la
independencia fsica de datos.
http://es.wikipedia.org/wiki/12_reglas_de_Codd
Herencia
La herencia es un concepto de bases de datos orientadas a objetos que abre nuevas posibilidades
interesantes de diseo de bases de datos.
Creemos dos tablas: una tabla de ciudades (cities) y otra tabla de capitales (capitals).
Naturalmente, las capitales tambin son ciudades, as que uno quisiera tener cierta forma de mostrar las
capitales de manera implcita cuando se listan las ciudades. Si uno es realmente inteligente inventara
un esquema como este:
CREATE TABLE
name
population
altitude
state
);
capitals (
text,
real,
int,
-- (en pies)
char(2)
CREATE TABLE
name
population
altitude
);
non_capitals (
text,
real,
int
-- (en pies)
Esto funciona bien para las consultas, pero se va poniendo feo cuando se necesita actualizar varias
filas.
Una mejor solucin es esta:
CREATE TABLE
name
population
altitude
);
cities (
text,
real,
int
-- (en pies)
En este caso, una fila de capitals hereda todas las columnas de su tabla madre, cities (name,
population y altitude). El tipo de dato de la columna name es text, que es un tipo de dato nativo de
PostgreSQL para cadenas de letras de longitud variable. Las capitales de estado tienen una columna
adicional, state, que muestra su estado. En PostgreSQL, una tabla puede heredar de cero o ms
tablas.
Por ejemplo, la siguiente consulta encuentra el nombre de todas las ciudades, incluyendo las capitales,
que estn ubicadas a una altitud superior a los 500 pies:
SELECT name, altitude
FROM cities
WHERE altitude > 500;
Resultado:
name
| altitude
-----------+---------Las Vegas |
2174
Mariposa |
1953
Madison
|
845
(3 rows)
Por otro lado, la siguiente consulta encuentra todas las ciudades que no son capitales de estado y que
estn situadas a una altitud igual o superior a 500 pies:
SELECT name, altitude
FROM ONLY cities
WHERE altitude > 500;
name
| altitude
-----------+---------Las Vegas |
2174
Mariposa |
1953
(2 rows)
Aqu, el ONLY antes de cities indica que la consulta debe ejecutarse solamente sobre la tabla de
ciudades y no sobre las tablas que estn debajo de ella en la jerarqua de herencia. Muchas de las
rdenes que ya se han mencionado (SELECT, UPDATE y DELETE) admiten la notacin ONLY.
http://pgsqltutorial.readthedocs.org/en/latest/part_iii/inheritance.html
Herencia
La herencia es un concepto de las bases de datos objeto-relacionales. Esto abre nuevas posibilidades
para el diseo de bases de datos.
Creemos dos tablas: Una tabla ciudades y una tabla capitales. Naturalmente, las capitales son ciudades,
por lo que quizs quiera mostrar implcitamente las capitales cuando liste las ciudades. Si es inteligente
, podra pensar un esquema as:
CREATE TABLE capitales (
nombre
text,
poblacion real,
altitud
int,
-- (in ft)
estado
char(2)
);
CREATE TABLE no_capitales (
nombre
text,
poblacion real,
altitud
int
-- (in ft)
);
CREATE VIEW ciudades AS
SELECT nombre, poblacion, altitud FROM capitales
UNION
SELECT nombre, poblacion, altitud FROM no_capitales;
Esto funciona bien ya que la consulta funciona, pero se ve feo a la hora de actualizar algunas filas para
una cosa.
Una mejor solucin es:
CREATE TABLE
name
population
altitude
);
ciudades (
text,
real,
int
-- (in ft)
En este caso, un registro de capitales hereda todas las columnas (name, population, y altitude) de la
tabla padre, ciudades. El tipo de la columna name es texto, un tipo nativo de PostgreSQL para campos
variables de caracter. Las capitales poseen una columna adicional state, que muestra el estado al que
pertenece la capital. En PostgreSQL, una tbala puede heredar desde cero a ms tablas.
Por ejemplo, la siguiente consulta encuentra los nombre de todas las ciudades, incluido el estado de
algunas capitales, que estan ubicadas a una altitud superior a los 500 pies:
SELECT name, altitude
FROM ciudades
WHERE altitude > 500;
retorna:
name
| altitude
-----------+---------Las Vegas |
2174
Mariposa |
1953
Madison
|
845
(3 rows)
Por otra parte, la siguiente consulta encuentra todas las ciudades que no son capitales de estado y que
estan situadas a una altitud de 500 pies o superior:
SELECT name, altitude
FROM ONLY cities
WHERE altitude > 500;
name
| altitude
-----------+---------Las Vegas |
2174
Mariposa |
1953
(2 rows)
La palabra ONLY indica que la consulta deber correr solo sobre la tabla que le precede, y no sobre las
tablas jerarquicamente dependientes. Muchos de los comandos que discutimos - SELECT, UPDATE, and
DELETE - soportan esta notacin.
http://www.arpug.com.ar/trac/wiki/tutorial-inheritance.html
Herencia
PostgreSQL ofrece como caracterstica particular la herencia entre tablas, que permite
definir una tabla que herede de otra previamente definida.
inherits (persona);
En la tabla estudiante se definen las columnas id_estudiante, carrera, grupo,
gradoSemestre y tutor, pero al solicitar informacin de la estructura de la tabla observar
que tambin incluye las columnas definidas en persona:
demo=# \d estudiante
Table "estudiante"
Column
|Type
| Modifiers
---------------+-----------------------+----------id_estudiante | character varying(8) |
nombre1
direccion
carrera
grupo
gradoSemestre
tutor
|
|
|
|
|
|
character varying(30)
character varying(30)
character varying(50)
character(1)
integer
character varying(50)
|
|
|
|
|
|
La herencia no slo permite que la tabla hija contenga las columnas de la tabla padre,
sino que establece una relacin conceptual es-un.
La consulta del contenido de la tabla estudiante mostrar, por supuesto, un solo registro.
Es decir, no se heredan los datos, nicamente los campos (atributos) del objeto:
demo=# select * from estudiante;
nombre |direccion
|carrera
|grupo | grado
--------+-------------+---------------------------+-------+------Juan
| Treboles 21 | Ingenieria en Computacion | A
| 3
(1 row)
El ltimo registro mostrado es el que fue insertado en tabla estudiante, sin embargo la herencia define
una relacin conceptual en la que un estudiante es-una persona.
Por lo tanto, al consultar cuntas personas estn registradas en la base de datos, se incluye en el
resultado a todos los estudiantes.
Para consultar slo a las personas que no son estudiantes, podemos utilizar el modificador ONLY:
demo=# select * from only persona;
nombre
| direccion
-----------------------+-----------Alejandro Magno
| Babilonia
Federico Garca Lorca | Granada 65
(2 rows)
No es posible borrar una tabla padre si no se borran primero las tablas hijo.
demo=# drop table persona;
NOTICE: table estudiante depende de table persona
ERROR: no se puede eliminar table persona porque otros objetos
dependen de l
HINT: Use DROP ... CASCADE para eliminar adems los objetos
dependientes.
Como es lgico, al borrar la fila del nuevo estudiante que hemos insertado, se borra de las dos
tablas.
Tanto si lo borramos desde la tabla persona, como si lo borramos desde la tabla estudiante.
http://www.dataprix.com/42-herencia