You are on page 1of 2

Herencia en PostgreSQL

Para quienes desarrollan con lenguajes orientados a objetos como Java, C# (por señalar
algunos), es común conocer el concepto de herencia entre clases.

En PostgreSQL es posible aplicar parcialmente esta característica, con algunas limitantes


atingentes propias a las bases de datos. El mejor ejemplo de herencia en bases de datos se
aplica a conceptos de diseño con generalizaciones o especializaciones, los cuales también
son conceptos de modelado Entidad-Relación (MER) :

En este caso, podemos notar que tanto las entidades Clientes y Funcionarios son
especializaciones particulares de la “superentidad” de Personas, por ende, tanto clientes
como funcionarios heredarían sus atributos. De forma contraria, la entidad de “Personas”
corresponderían a una generalización de Clientes y Funcionarios la cual no tiene atributos
específicos de las “subentidades”.

¿Y ésto como se traduce en PostgreSQL?, simple, pero mejor manos a la obra :

1 -- PASO 1 : Se crea la super-entidad como una tabla normal


2 CREATE TABLE personas
3 ( numero SERIAL NOT NULL PRIMARY KEY,
nombres VARCHAR(50),
4 apellidos VARCHAR(50),
5 direccion VARCHAR(200),
6 telefono VARCHAR(20),
7 fecha_nacim DATE
8 );
9
10-- PASO 2 : Se crean las sub-entidades usando herencia
CREATE TABLE clientes
11( nro_cuenta BIGINT,
12 estado VARCHAR(10),
13 tipocliente CHAR(1)
14 ) INHERITS (personas); -- Aquí esta la herencia
15
16CREATE
(
TABLE funcionarios
cargo VARCHAR(25),
17 departamento VARCHAR(25),
18 fecha_ing DATE
19) INHERITS (personas); -- Aquí esta la herencia
20
21
22

Algunos pros y contras al usar herencia con PostgreSQL :

 Las operaciones DML (INSERT, UPDATE y DELETE) aplican desde las sub-
entidades hacia la super-entidad, esto es muy útil ya que permite alivianar las
operaciones sobre múltiples tablas a la vez

1
2 -- Ingresa solamente en CLIENTES
INSERT INTO clientes
3 ( numero, nombres, apellidos, direccion, telefono,
4 fecha_nacim, nro_cuenta, estado, tipocliente)
5 VALUES
6 ( 3006001, 'GERARDO', 'VILLABLANCA', 'AVDA. PERU 5040',
'+56912312300', NULL, 900100, 'A', 'V' );
7
8 -- Los datos también se agregan a PERSONAS
9 SELECT * FROM personas WHERE numero=3006001;
10

 Las super-entidades genéricas permiten organizar de mejor forma los datos para
búsquedas distribuidas en distintas tablas.
 No es posible modificar (ALTER TABLE) las columnas heredadas en las sub-
entidades.
 Ya que la herencia no es completa, no se heredan de forma automática las claves
primarias, foráneas, secuencias ni índices que puedan tener las super-entidades, sin
embargo, esto se puede suplir generando manualmente estos objetos en caso de ser
necesario.

You might also like