Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
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. La plupart
des commandes dont nous avons déjà discutées —
SELECT, UPDATE et
DELETE — supportent cette
notation (ONLY).
Note : Bien que l'héritage soit fréquemment utile, il n'a pas été intégré avec les contraintes uniques ou les clés étrangères, ce qui limite leur utilité. Voir Section 5.5 pour plus de détails.
Précédent | Sommaire | Suivant |
Transactions | Niveau supérieur | Conclusion |