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

Oracle Discussion :

[clé primaire composée] Champ NULL


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 98
    Points : 58
    Points
    58
    Par défaut [clé primaire composée] Champ NULL
    Bonjour à tous,

    voila, ma question va surement en choquer quelques-uns mais je veux en être sûr:

    est-il possible d'avoir une clé primaire composée de plusieurs champs dont un qui pourrait être à null ???
    Ou existe-t-il une alternative ???

    Merci :o

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Je ne vois qu'une seule réponse à vous faire : essayez donc, vous serez vite fixé et en plus, la réponse, vous vous en souviendrez ! ;-)

  3. #3
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 98
    Points : 58
    Points
    58
    Par défaut
    J'ai essayé mais comme je le disais, je voulais être sûr (que y'a pas moyen) !!!
    Je déduis de votre réponse qu'il n'y a vraiment pas moyen...
    Je cherche toujours une solution donc si qqun a une idée...

    Merci !!!

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Déclarer une valeur par défaut pour ta colonne
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 98
    Points : 58
    Points
    58
    Par défaut
    Merci McM
    Mais malheureusement, je dois avoir avoir NULL car (et j'aurais pu le préciser avant) ce champ est également une clé étrangère...
    Et je ne peux pas créer de parent "fictif"...

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut

    C'est pas bien compliqué de tester et d'être sûr !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create table TOTO
    (
      ID1  NUMBER,
      ID2  NUMBER,
      COL1 VARCHAR2(10)
    );
     
    alter table TOTO
      add constraint PK_TOTO primary key (ID1, ID2);
    SQL> insert into toto (id1, id2, col1) values (1, 1, 'Ligne 1');

    1 row created.

    SQL> insert into toto (id1, id2, col1) values (1, 2, 'Ligne 2');

    1 row created.

    SQL> insert into toto (id1, id2, col1) values (1, NULL, 'Ligne 3');
    insert into toto (id1, id2, col1) values (1, NULL, 'Ligne 3')
    *
    ERROR at line 1:
    ORA-01400: cannot insert NULL into ("SCOTT"."TOTO"."ID2")

  7. #7
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 98
    Points : 58
    Points
    58
    Par défaut
    J'sais pas pourquoi vous êtes , je vous ai dis que j'ai essayé.

    J'ai essayé
    Désolé si je vous ai irrité mais permettez moi de douter de mes connaissances et de croire qu'il existe peut-être un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alter table TOTO 
      add constraint PK_TOTO primary key (ID1, ID2 ALLOW NULL);
    Merci

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Mai 2004
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 236
    Points : 310
    Points
    310
    Par défaut
    Comme il est nécessaire de différencier chaque enregistrement de manière unique, une clé primaire (composé ou pas de plusieurs champs) ne peut pas être égale à null.

    A ma connaissance (enfin elle est pas grande) , il n'y a pas de moyens de contourner ça.

    En espérant t'avoir aidé.

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    La réponse est non, tous les champs de la PK doivent être NOT NULL.
    je suppose que tu veux pouvoir insérer comme clé (PK1, PK2)
    (1, 0) et (1, NULL)
    mais qu'un deuxième (1, NULL) ne doit pas pouvoir être inséré

    Tu peux créer un autre champ PK2b comme PK2
    Tu y mets la valeur de PK2 et par défaut tu y mets -1. (Triggers préinsert, update)
    Ta Primary Key sera (PK1, PK2b) NOT NULL donc
    Ta clé étrangère sur PK2


    Voila.

    EDIT : la valeur par défaut -1 ne doit pas pouvoir être retrouvée dans la table de la clé étrangère. Donc faut trouver quelque chose qui n'existera jamais.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Avez-vous pensé à faire des clés uniques?

    Une clé unique implique que les enregistrements soient uniques....quand ils ne sont pas nuls!

    A mon avis, c'est exactement ce que vous recherchez

  11. #11
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    La définition "conceptuelle" d'une clé primaire est "unique et non nul".
    Après, ça me semble difficile d'avoir une clé primaire nulle...

  12. #12
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 98
    Points : 58
    Points
    58
    Par défaut
    Oki, merci pour les précisions concernant la valeur nulle dans une clé primaire.

    Merci McM pour l'idée du 2eme champ mais je vais plutot utiliser la contrainte d'unicité (plus facile à implémenter (merci Aline)).

    Voila, merci encore à tout l'monde !!!

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

Discussions similaires

  1. Clé primaire composée de champs d'une même table : éviter les doublons
    Par Tristan Zwingelstein dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/02/2013, 04h23
  2. Réponses: 2
    Dernier message: 06/08/2010, 15h29
  3. cles primaire multi-champs dont un NULL
    Par mystikilla dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/12/2008, 18h14
  4. Selectionner un champs null
    Par maadadi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/02/2004, 14h08
  5. clé primaire composée de 2 clés étrangères
    Par Tigresse dans le forum Installation
    Réponses: 5
    Dernier message: 28/07/2003, 14h38

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