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 :

Nommage clef étrangère


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut Nommage clef étrangère
    Bonjour,


    En référence à ce sujet :
    http://www.developpez.net/forums/d73...e-foreign-key/

    On trouve les informations suivantes :
    Citation Envoyé par rouardg Voir le message
    Bonjour,

    2 choses :
    1 ) dans la table STAGIAIRE, il faut créer les colonnes CODESIRET et NOMCYCLE,
    2 ) il manque le mot-clé CONSTRAINT dans la définition des FK.

    La syntaxe est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create table STAGIAIRE 
    ( 
       codeStagiaire VARCHAR(7) PRIMARY KEY, 
       nomStagiaire VARCHAR2(30) NOT NULL, 
       statutStagiaire NUMBER(1) NOT NULL,
       codeSIRET VARCHAR2(14),
       nomCycle VARCHAR2(30),
       constraint FK_ENTREPRISE FOREIGN KEY (codeSIRET) REFERENCES ENTREPRISE (codeSIRET), 
       constraint FK_CYCLE FOREIGN KEY (nomCycle) REFERENCES CYCLE (nomCycle)
    );
    Dans ce cas, quand on manipule la table STAGIAIRE, on appelle "FK_ENTREPRISE" ou "codeSIRET" ?

    Merci.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Si j'ai bien compris ta question, dans les requêtes tu utilises uniquement des noms de colonne donc codeSIRET.
    En cas de violation de contrainte le nom de la FK violée sera renvoyé, et ce sera FK_ENTREPRISE.
    Et tu peux retrouver à quoi correspond la contrainte en intérogeant les vues ALL_CONSTRAINTS et ALL_CONS_COLUMNS
    Exemple avec le schema Scott :
    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
    select e.ename,d.dname
    from scott.emp e
    join scott.dept d on d.deptno = e.deptno;
     
    ENAME      DNAME
    ---------- --------------
    CLARK      ACCOUNTING
    KING       ACCOUNTING
    MILLER     ACCOUNTING
    JONES      RESEARCH
    FORD       RESEARCH
    ADAMS      RESEARCH
    SMITH      RESEARCH
    SCOTT      RESEARCH
    WARD       SALES
    TURNER     SALES
    ALLEN      SALES
    JAMES      SALES
    BLAKE      SALES
    MARTIN     SALES
     
    14 rows selected.
    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
    > select * from scott.dept;
     
        DEPTNO DNAME          LOC
    ---------- -------------- -------------
            10 ACCOUNTING     NEW YORK
            20 RESEARCH       DALLAS
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTON
     
     
    > update scott.emp set deptno = 50;
    update scott.emp set deptno = 50
    *
    ERROR at line 1:
    ORA-02291: integrity constraint (SCOTT.FK_DEPTNO) violated - parent key not found
    Et on retrove les informations sur la contrainte en interogeant les vues précédentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    > select OWNER,CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME
    from all_constraints
    where CONSTRAINT_NAME = 'FK_DEPTNO';
     
    OWNER		CONSTRAINT_NAME                C TABLE_NAME
    ------------------------------ - ------------------------------
    SCOTT		FK_DEPTNO                      R EMP
     
    > select OWNER,CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME from ALL_CONS_COLUMNS where CONSTRAINT_NAME = 'FK_DEPTNO';
     
    OWNER            CONSTRAINT_NAME   TABLE_NAME      COLUMN_NAME
    --------------- ------------------ --------------- -----------------
    SCOTT             FK_DEPTNO        EMP		   DEPTNO

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Merci pour avoir répondu d'une façon détaillée.
    A vrai dire, je ne savais meme pas cela

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

Discussions similaires

  1. tests de script et clefs étrangères en INSERT
    Par Invité dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/08/2005, 18h15
  2. clef étrangère référençant une autre base
    Par menoce dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/07/2005, 20h31
  3. 5 clefs étrangères?
    Par P@t dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/05/2005, 17h52
  4. [wamp5] [Relations] Clefs étrangéres
    Par nebule dans le forum Outils
    Réponses: 6
    Dernier message: 05/10/2004, 12h17
  5. [SQL SERVER 2000] Problème clef étrangére
    Par Tankian dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 11/05/2004, 11h44

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