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 :

Héritage avec base de données posgresql


Sujet :

PostgreSQL

  1. #1
    Membre averti Avatar de cyreel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 388
    Points : 324
    Points
    324
    Par défaut Héritage avec base de données posgresql
    Bonsoir à tous.
    Je suis vraiment nouveau en postgresql et j'ai des soucis avec la notion d'heritage. Ma base de données concernent les pays, les villes etc..
    pays (id_pays, nom, carte, hymne, monnaie);
    villes (id_ville, id_pays, nom, population);

    Comment puis-je appliquer la notion d'héritage sur ces deux tables? et sur des comme site (id_site,id_ville, nom)?

    J'ai cherché sur google mais je n'arrive pas à bien comprendre cette notion. Merci de m'aider.

  2. #2
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 289
    Points
    7 289
    Par défaut
    Bonjour.

    Par exemple:
    Tu as une table A: "logs_serveur" qui contient 3 colonnes: "id", "date" et "ip"
    Tu as une table B: "logs_serveur_sql" qui contient 4 colonnes: "id", "date", "ip" et "request".


    Tu peux dire que "B est une spécialisation de A" et inversement que "A est une généralisation de B".

    Tu peux donc créer ta table A:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create table A(
        "id"      integer,
        "date"  timestamp without time zone,
        "ip"      text
    );

    Puis ta table B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    create table B(
        "request"    text
    ) inherits (A);
    Ce qui te créera les tables suivantes:

    =======================================
    | A
    =======================================
    | "id" | integer
    | "date" | timestamp without time zone
    | "ip" | text
    =======================================

    et

    =======================================
    | B
    =======================================
    | "id" | integer
    | "date" | timestamp without time zone
    | "ip" | text
    | "request" | text
    =======================================

    Si tu modifie une colonne de A, alors la modification sera propagée également sur B (automatique):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ALTER A
         ALTER COLUMN "ip" TYPE inet;
    Tu as une entrée dans B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO B ("id", "date", "ip", "request")  VALUES (4, current_timestamp, '127.0.0.1', 'SELECT * FROM unetable');

    =======================================
    | A
    =======================================
    | "id" | integer
    | "date" | timestamp without time zone
    | "ip" | inet
    =======================================

    et

    =======================================
    | B
    =======================================
    | "id" | integer
    | "date" | timestamp without time zone
    | "ip" | inet
    | "request" | text
    =======================================



    Si tu as besoin qu'un t'affiche l'entrée que tu as dans B, alors l'héritage fait ton affaire.
    Sinon, c'est plutôt vers la notion de clés étrangères qu'il faut te tourner.
    (http://www.postgresql.org/docs/8.1/s...torial-fk.html)
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  3. #3
    Membre averti Avatar de cyreel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 388
    Points : 324
    Points
    324
    Par défaut
    Bonjour Merci pour les infos sur l'heritage.
    Je crois que la migrations des clés correspond plus a ce que je veux faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EJB] Correspondance avec Base de Données
    Par Lady_jade dans le forum Java EE
    Réponses: 6
    Dernier message: 16/09/2005, 16h47
  2. optimisation requetes avec base de données
    Par flogreg dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 05/07/2005, 14h54
  3. InstallShield avec base de données
    Par duga dans le forum C++Builder
    Réponses: 8
    Dernier message: 18/03/2005, 15h44
  4. CD ROm avec base de données
    Par marcoco dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 10/02/2005, 14h16
  5. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33

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