) a manera de conocerlo un poquito ya que no sabía nada y me encontré con algunos detalles.
Detalles de interés que se podrán observar en las instrucciones de ejemplo que copio mas adelante:
- La diferencia contra otros manejadores de Base de Datos es que se puede hacer herencia entre tablas.
- Cuando se heredan las tablas, las llaves primarias se tienen que redefinir dado que estas no se heredan.
- Cuando se borran las tablas, los índices también se eliminan de forma automática.
- Cuando se hacen muchas operaciones de creación/borrado en la base de datos, es necesario darle mantenimiento (opción vacuum en el pgadmin3).
- La sintaxis para las fechas siempre es: YYYY-MM-DD.
Vamos a los ejemplos ahora sí:
-- Eliminamos la vista
DROP VIEW if exists dime_sus_tutores, dime_personas_sin_cel;
-- Eliminamos indices primero (aunque cuando se borran las tablas estos ya se eliminan)
DROP INDEX if exists idx_clave_escolar;
-- Eliminamos las tablas
drop table if exists
tutores, personas, alumnos, tutores_alumnos;
-- Tabla personas PADRE
create table personas (
id integer PRIMARY KEY,
nombres varchar(75) not null,
genero varchar(1),
fecha_nacimiento date,
lugar_nacimiento varchar(150),
curp varchar(18) unique,
tel varchar(20),
cel varchar(20),
email varchar(50),
cuando date default current_date
);
-- Tabla hija de personas
create table tutores(
id integer primary key,
ocupacion varchar(100)
) inherits (personas);
-- Tutores
insert into tutores (id, nombres, genero, fecha_nacimiento, lugar_nacimiento, cel, ocupacion) values
(1, 'Ricardo Rogers', 'm', '1970-01-10', 'Ciudad de México', '0445554374879', 'Musico'),
(2, 'Guillermo Garcia', 'm', '1971-04-12', 'Tlaxcala', '044 55 94637383', 'Contador'),
(3, 'Pita Perez', 'f', '1964-05-22', 'Ciudad de México', null, 'Ama de casa');
-- Tabla hija de personas
create table alumnos (
id integer primary key,
clave_escolar varchar(25),
fecha_ingreso date,
carrera varchar(50)
) inherits (personas);
-- Creacion de un indice
create unique index idx_clave_escolar on alumnos(clave_escolar);
insert into alumnos
(id, nombres, genero, fecha_nacimiento, lugar_nacimiento, cel, clave_escolar, fecha_ingreso, carrera) values
(4, 'Leonora Rogers Mendoza', 'f', '1994-01-10', 'Ciudad de México', '044 55 12345678', 'a100-101', '2011-08-14', 'informatica'),
(5, 'Maximiliano Hotel', 'm', '1993-04-12', 'Tlaxcala', '044 55 87654321', 'b200-202', '2011-07-13', 'contaduría'),
(6, 'Lupita Gómez Pérez', 'f', '1993-02-22', 'Ciudad de México', null, 'c300-303', '2011-06-12', 'contaduría'),
(7, 'Arturo Gómez Pérez', 'm', '1994-05-22', 'Ciudad de México', null, 'd400-404', '2011-05-11', 'administración')
;
-- Tabla que relaciona personas y tutores
create table tutores_alumnos (
id_tutor integer REFERENCES tutores(id),
id_alumno integer references alumnos(id),
primary key (id_tutor, id_alumno)
);
-- relaciones
insert into tutores_alumnos values (1,4),(2,5),(3,6),(3,7);
-- una vista
create view dime_sus_tutores as
select a.nombres as Alumno, a.clave_escolar as Clave, t.nombres as Tutor, t.cel
from tutores_alumnos ta
left join alumnos a on ta.id_alumno = a.id
right join tutores t on ta.id_tutor = t.id
order by a.nombres
;
-- otra vista
create view dime_personas_sin_cel as
select p.id, p.nombres, p.tableoid, c.relname
from personas p, pg_class c
where cel is null
and p.tableoid = c.oid
;
Fuentes: