| Documentation PostgreSQL 7.4.29 | ||||
|---|---|---|---|---|
| Précédent | Arrière rapide | Chapitre 3. Fonctionnalités avancées | Avance rapide | Suivant | 
L'héritage est un concept provenant des bases de données orientées objet. Il ouvre de nouvelles possibilités intéressantes dans la conception de bases de données.
    Créons deux tables : une table villes et une
    table capitales. Naturellement, les capitales sont
    aussi des villes, donc vous voulez un moyen pour afficher implicitement les
    capitales lorsque vous listez les villes. Si vous êtes réellement
    intelligent, vous pourriez inventer 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;Ceci fonctionne bien pour les requêtes, mais c'est horrible lorsque vous avez besoin de mettre à jour plusieurs lignes par exemple.
Voici une meilleure solution :
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 leur état. Dans PostgreSQL,
    une table peut hériter d'aucune ou de plusieurs autres tables.
   
Par exemple, la requête suivante trouve les 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)
Autrement, la requête suivante trouve 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 lancée que sur la table
    villes, et non pas sur les tables sous
    villes suivant la hiérarchie des héritages. Beaucoup
    des commandes dont nous avons déjà discutées -- SELECT,
    UPDATE et DELETE -- supportent cette
    notation (ONLY).
   
| Précédent | Sommaire | Suivant | 
| Transactions | Niveau supérieur | Conclusion |