IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

performances de l'heritage


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut performances de l'heritage
    salut
    j'ai une table A
    deux autres table A1 et A2 héritent de A les colonnes a et b
    je veut savoir si les table A1 et A2 vont eux allouer une mémoire pour stoker les colonnes a et b (redondances de données ) ou ils ne font que pointer sur a et b de la table mère A car en observant pgAdmin j'ai vue que les colonnes a et b sont contenus dans les 3 tables A ,A1 et A2

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 741
    Points : 52 454
    Points
    52 454
    Billets dans le blog
    5
    Par défaut
    http://enterpriserails.chak.org/foru...ns-about-using

    Il n'y a aucun intérêt à utiliser l'héritage de table car les données sont redondées (certes de manière automatique) alors que le modèle relationnel permet de faire mieux, pas le biais des liens (intégrité référentielle) et donc sans redondance.

    C'est un gadget destiné a ceux qui n'ont aucune culture de modélisation des données et qui s'avère mauvais pour les performances !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    http://enterpriserails.chak.org/foru...ns-about-using

    Il n'y a aucun intérêt à utiliser l'héritage de table car les données sont redondées (certes de manière automatique) alors que le modèle relationnel permet de faire mieux, pas le biais des liens (intégrité référentielle) et donc sans redondance.


    C'est un gadget destiné a ceux qui n'ont aucune culture de modélisation des données et qui s'avère mauvais pour les performances !

    A +
    merci SQLpro pour la reponse mais j'ai deux question:
    • si l'heitage n'a aucun intérêt, pourquoi alors il existe


    • qu"est ce que tu veut dire avec:le modèle relationnel permet de faire mieux, pas le biais des liens

  4. #4
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    L'héritage est utilisé dans posgreSQL pour permettre le partitionnement. Après je ne sais pas si c'est ce que vous essayez de faire...
    A bove ante, ab asino retro, a stulto undique caveto

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par riadhhwajdii Voir le message
    salut
    j'ai une table A
    deux autres table A1 et A2 héritent de A les colonnes a et b
    je veut savoir si les table A1 et A2 vont eux allouer une mémoire pour stoker les colonnes a et b (redondances de données ) ou ils ne font que pointer sur a et b de la table mère A car en observant pgAdmin j'ai vue que les colonnes a et b sont contenus dans les 3 tables A ,A1 et A2
    Non seulement il n'y a pas de duplication physique des données, mais quand on insère dans une table, il n'y a pas une partie des colonnes qui vont dans une table parente et l'autre dans une table fille, tout va dans la même table, celle qui est la destination de l'INSERT.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par riadhhwajdii Voir le message
    • qu"est ce que tu veut dire avec:le modèle relationnel permet de faire mieux, pas le biais des liens
    L'héritage correspond au schéma (MCD Merise) suivant :
    a1 -(1,1)----Etre----0,1-- a
    a2 -(1,1)----Etre----0,1---|

    Ce qui donne normalement les tables suivantes :
    a (a_id, a_Colonnes_communes_a_tous_les_ax)
    a1 (a_id, a1_Colonnes_spécifiques_a_a1)
    a2 (a_id, a2_Colonnes_spécifiques_a_a2)

    Il semble que Posgresql fasse plutôt ces tables :
    a (a_id, a_Colonnes_communes_a_tous_les_ax)
    a1 (Colonnes_de_a, a1_Colonnes_spécifiques_a_a1)
    a2 (Colonnes_de_a, a2_Colonnes_spécifiques_a_a2)

    Il y aurait donc redondance de données, ce qui m'a étonné moi aussi de la part des concepteurs de Postgresql quand je l'ai constaté lors d'une présentation d'une solution utilisant Postgresql. Mais depuis, je n'ai jamais vérifié la réalité de la chose.

    Ce que SQLPro voulait dire, c'est que le premier groupe de tables est évidemment meilleur que le second. D'autant plus qu'il suffit de faire une vue pour chaque table fille (a1, a2) si on veut afficher toutes les colonnes (de a + de a1 ou de a2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE VIEW v_a1 AS
    SELECT a.colonnes_de_a, a1.colonnes_de_a1
    FROM a
    INNER JOIN a1 ON a.a_id = a1.a_id
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il semble que Posgresql fasse plutôt ces tables :
    a (a_id, a_Colonnes_communes_a_tous_les_ax)
    a1 (Colonnes_de_a, a1_Colonnes_spécifiques_a_a1)
    a2 (Colonnes_de_a, a2_Colonnes_spécifiques_a_a2)

    Il y aurait donc redondance de données
    Non. C'est une idée fausse qui est dûe à mon avis à une mauvaise interprétation du count(*) de tables en hiérarchie. D'ailleurs la redondance n'est mentionnée nulle part dans la doc et un simple test montre qu'elle est imaginaire.
    Il suffit de partir de 2 tables vides dont l'une hérite de l'autre, d'insérer des données dans la table parente et de mesurer avec pg_relation_size() la taille de la table fille pour constater qu'elle reste à zéro, ou inversement d'insérer dans la table enfant et de constater que la table parent reste à zéro aussi.

    Il est aussi possible de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from ONLY table
    pour avoir le vrai nombre de lignes d'une table indépendamment de la hiérarchie et voir également qu'il n'y a aucun signe de redondance.

    En conclusion, ce n'est que quand on SELECT des enregistrements dans les tables qu'intervient la hiérarchie, ce n'est pas au moment du stockage.

Discussions similaires

  1. Heritage & performances
    Par dk dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 04/03/2008, 12h01
  2. [Général] L'héritage nuit-il aux performances ?
    Par sebastien.cas dans le forum Schéma
    Réponses: 17
    Dernier message: 12/09/2006, 16h58
  3. [Postgres] Pb d'heritage...
    Par anonia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2003, 23h34
  4. [PostgreSQL] Question vis a vis de l'heritage...
    Par Gandalf dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/05/2003, 17h53
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo