L'héritage est un concept issu des bases de données orientées objet. Il ouvre de nouvelles possibilités intéressantes en conception de bases de données.
Soient deux tables : une table villes et une table capitales. Les capitales étant également des villes, il est intéressant d'avoir la possibilité d'afficher implicitement les capitales lorsque les villes sont listées. Un utilisateur particuli�rement brillant peut écrire ceci
CREATE TABLE capitales ( nom text, population real, altitude int, -- (en pied) etat char(2) ); CREATE TABLE non_capitales ( nom text, population real, altitude int -- (en pied) ); CREATE VIEW villes AS SELECT nom, population, altitude FROM capitales UNION SELECT nom, population, altitude FROM non_capitales;
Cela fonctionne bien pour les requ�tes, mais la mise � jour d'une m�me donnée sur plusieurs lignes devient vite un horrible casse-t�te.
Une meilleure solution peut �tre :
CREATE TABLE villes ( nom text, population real, altitude int -- (en pied) ); CREATE TABLE capitales ( etat char(2) ) INHERITS (villes);
Dans ce cas, une ligne de capitales hérite de toutes les colonnes (nom, population et altitude) de son parent, villes. Le type de la colonne nom est text, un type natif de PostgreSQL™ pour les cha�nes de caract�res � longueur variable. Les capitales d'état ont une colonne supplémentaire, etat, qui affiche l'état dont elles sont la capitale. Sous PostgreSQL™, une table peut hériter de zéro � plusieurs autres tables.
La requ�te qui suit fournit un exemple de récupération des noms de toutes les villes, en incluant les capitales des états, situées � une altitude de plus de 500 pieds :
SELECT nom, altitude FROM villes WHERE altitude > 500;
ce qui renvoie :
nom | altitude -----------+---------- Las Vegas | 2174 Mariposa | 1953 Madison | 845 (3 rows)
� l'inverse, la requ�te qui suit récup�re toutes les villes qui ne sont pas des capitales et qui sont situées � une altitude d'au moins 500 pieds :
SELECT nom, altitude FROM ONLY villes WHERE altitude > 500;
nom | altitude -----------+---------- Las Vegas | 2174 Mariposa | 1953 (2 rows)
Ici, ONLY avant villes indique que la requ�te ne doit �tre exécutée que sur la table villes, et non pas sur les tables en dessous de villes dans la hiérarchie des héritages. La plupart des commandes déj� évoquées -- SELECT, UPDATE et DELETE -- supportent cette notation (ONLY).
Bien que l'héritage soit fréquemment utile, il n'a pas été intégré avec les contraintes d'unicité et les clés étrang�res, ce qui limite son utilité. Voir la Section 5.8, � L'héritage � pour plus de détails.