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

SQL Oracle Discussion :

Clef primaire unique pour table mère et fille


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 59
    Par défaut Clef primaire unique pour table mère et fille
    Bonjour,

    Je crée un simple héritage comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    CREATE TYPE ARTICLE_TYPE AS OBJECT
    (
    	id NUMBER(8),
    	designation VARCHAR(255)
    )
    NOT FINAL
    /
     
    CREATE TYPE ARTICLE_LOURD_TYPE UNDER ARTICLE_TYPE
    (
      poid NUMBER(8)
    )
    /
     
    CREATE TABLE article OF ARTICLE_TYPE
    (
      CONSTRAINT pk_article PRIMARY KEY(id)
     CONSTRAINT un_designation UNIQUE(designation)
    );
     
    CREATE TABLE article_lourd OF ARTICLE_LOURD_TYPE
    (
     CONSTRAINT MEME CLEF PRIMAIRE ????
      CONSTRAINT un_designation UNIQUE(designation)
    );
    et j'aimerais savoir comment faire en sorte que la clef primaire soit la même contrainte dans les 2 tables (dites moi si vous ne voyez pas de quoi je veux parler).


    et pouvez vous également me dire si c'est la meilleure façon de faire cet héritage ?

    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    La deuxième table ne sert à rien puisque les articles lourd sont des articles.

    En ne créant que la table ARTICLE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL> insert into article values( ARTICLE_TYPE(1,'Je n''ai pas de poids') );
     
    1 row created.
     
    SQL> insert into article values( ARTICLE_LOURD_TYPE(2,'Je suis lourd',999) );
     
    1 row created.
     
    SQL> select value(a) from article a;
     
    VALUE(A)(ID, DESIGNATION)
    ----------------------------------------------------------------------------------------------------------------------------------
    ARTICLE_TYPE(1, 'Je n''ai pas de poids')
    ARTICLE_LOURD_TYPE(2, 'Je suis lourd', 999)
    tu stockes tout.

    Cordialement,
    Franck.

  3. #3
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 59
    Par défaut
    Citation Envoyé par pachot Voir le message
    Bonjour,

    La deuxième table ne sert à rien puisque les articles lourd sont des articles.

    En ne créant que la table ARTICLE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL> insert into article values( ARTICLE_TYPE(1,'Je n''ai pas de poids') );
     
    1 row created.
     
    SQL> insert into article values( ARTICLE_LOURD_TYPE(2,'Je suis lourd',999) );
     
    1 row created.
     
    SQL> select value(a) from article a;
     
    VALUE(A)(ID, DESIGNATION)
    ----------------------------------------------------------------------------------------------------------------------------------
    ARTICLE_TYPE(1, 'Je n''ai pas de poids')
    ARTICLE_LOURD_TYPE(2, 'Je suis lourd', 999)
    tu stockes tout.

    Cordialement,
    Franck.
    Ah ok je vois, je testerai demain merci


    PS : hum désolé l'exemple était bidon mais j'ai rien trouvé d'autre xD

  4. #4
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 59
    Par défaut
    Tout fonctionne merci beaucoup,

    Cependant j'ai l'habitude de toujours mentionner mes champs d'insertions pour ne pas devoir modifier le php si il y a une mis à jour de la table.
    Problème, ce code ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO article(article_type(id, designation)) VALUES(article_type(2, 'truc2'));
    Ni celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO article(id, designation) VALUES(1, 'truc');
    ni celui là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO article(id, designation) VALUES(article_type(1, 'truc'));

  5. #5
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    C'est une bonne habitude. Mais là il n'y a pas de colonnes déclarées dans la table, donc je ne vois pas le pb.
    Cela dit, je ne suis pas spécialiste des tables objet (et je n'ai jamais vu l'interêt, d'ailleurs. Des vues objet sur des tables relationnelles, oui, pourquoi pas, mais stocker des objets dans les tables... )

  6. #6
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 59
    Par défaut
    Moi je vois un seul intérêt : l'héritage.

    Si je rajoute un champ dans ma table article, du coup il y a moyen de mentionner les champs, non ?

Discussions similaires

  1. Clef primaire sur une table qui n'en a pas d'après PhpMyAdmin
    Par bubulemaster dans le forum Requêtes
    Réponses: 5
    Dernier message: 11/04/2009, 18h44
  2. Réponses: 3
    Dernier message: 24/07/2007, 18h06
  3. Réponses: 1
    Dernier message: 20/06/2007, 13h36
  4. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06
  5. récupérer la clef primaire d'une table
    Par orionis69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/02/2004, 13h00

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