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 :

Creation de tables avec plusieurs primary key


Sujet :

Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut Creation de tables avec plusieurs primary key
    Bonjour,

    puis-je avoir un exemple de requete de creation de tables ayant plusieurs champs en primary key?

    Merci d'avance

  2. #2
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Bonjour,

    Comme une table ne peut avoir qu'un seule PK, l'idée est de poser des AK (Alternative Key), que l'on appelle aussi clés secondaires.

    Pour se faire, le(s) champ(s) doi(ven)t être obligatoire(s), et on pose dessus une contrainte d'unicité, tel que le montre l'exemple suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE TEST2
    (
      id1 NUMBER NOT NULL,
      id2 NUMBER NOT NULL,
      id3 NUMBER NOT NULL,
      CONSTRAINT TEST2_PK PRIMARY KEY (id1) USING INDEX TABLESPACE TS_DBA_ARCHI_SE,
      CONSTRAINT TEST2_AK_1 UNIQUE (id2) USING INDEX TABLESPACE TS_DBA_ARCHI_SE,
      CONSTRAINT TEST2_AK_2 UNIQUE (id3) USING INDEX TABLESPACE TS_DBA_ARCHI_SE  
    )
    TABLESPACE TS_DBA_ARCHI_BE ;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Désolé mais je suis nul en ORACLE...

    TABLESPACE toto.... ça suffit pour créer un index?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    Citation Envoyé par The eye Voir le message
    Bonjour,

    puis-je avoir un exemple de requete de creation de tables ayant plusieurs champs en primary key?

    Merci d'avance
    Si le besoin est de créer une clé primaire sur plusieurs colonnes alors un exemple
    est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create table t
    (
      c1 number,
      c2 number,
      c3 number,
      constraint pk_t primary key (c1, c2)
    );

  5. #5
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Citation Envoyé par The eye Voir le message
    Désolé mais je suis nul en ORACLE...

    TABLESPACE toto.... ça suffit pour créer un index?
    En fait, il n'y a même pas besoin de spécifier un tablespace: par défaut les index associés aux contraintes sont créés dans le même tablespace que la table concernée:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    SQL> 
    SQL> drop table TEST2;
     
    Table supprimee.
     
    SQL> 
    SQL> CREATE TABLE TEST2
      2  (
      3    id1 NUMBER NOT NULL,
      4    id2 NUMBER NOT NULL,
      5    id3 NUMBER NOT NULL,
      6    CONSTRAINT TEST2_PK PRIMARY KEY (id1) ,
      7    CONSTRAINT TEST2_AK_1 UNIQUE (id2) ,
      8    CONSTRAINT TEST2_AK_2 UNIQUE (id3)
      9  );
     
    Table creee.
     
    SQL> 
    SQL> select segment_name, tablespace_name from dba_segments where segment_name like '%TEST2%';
     
    SEGMENT_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
    TEST2
    USERS
     
    TEST2_PK
    USERS
     
    TEST2_AK_1
    USERS
     
     
    SEGMENT_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
    TEST2_AK_2
    USERS

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Citation Envoyé par Michel SALAIS Voir le message
    Si le besoin est de créer une clé primaire sur plusieurs colonnes alors un exemple
    est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create table t
    (
      c1 number,
      c2 number,
      c3 number,
      constraint pk_t primary key (c1, c2)
    );

    Oui voilà !!

    c'est exactement ça que je cherchais! je l'avais fait une fois et je ne retrouvais plus comment!

    Merci beaucoup à tous!

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/11/2010, 17h07
  2. creation de tables avec foreign key
    Par fasyr dans le forum Débuter
    Réponses: 9
    Dernier message: 25/04/2009, 19h50
  3. LOAD DATA INFILE sur table avec AUTO_INCREMENT PRIMARY KEY ?
    Par ctobini dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/10/2007, 12h00
  4. Newbie PgSQL->Probleme Creation de table avec FOREIGN KEY
    Par ralkif dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 07/03/2006, 22h59
  5. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 12h17

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