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 :

USING INDEX TABLESPACE sur des FOREIGN KEY


Sujet :

SQL Oracle

  1. #1
    Membre actif Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Points : 232
    Points
    232
    Par défaut USING INDEX TABLESPACE sur des FOREIGN KEY
    Bonjour,

    j'ai un souci avec avec la création d'index pour des clés étrangères

    Au niveau de mon schema Oracle, j'ai spécifié un tablespace par défaut pour les datas
    Alors, pour commencer dans l'ordre, voici les scripts de création de table :

    Table FRA_MN :
    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
     
    CREATE TABLE FRA_MN (
      ID         NUMBER(15), 
      FEATTYP    NUMBER(4), 
      BIFTYP     NUMBER(1), 
      PROMANTYP  NUMBER(1), 
      JNCTID     NUMBER(15), 
      GEOM       MDSYS.SDO_GEOMETRY);
     
    DELETE FROM USER_SDO_GEOM_METADATA 
      WHERE TABLE_NAME = 'FRA_MN' AND COLUMN_NAME = 'GEOM' ;
     
    INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) 
      VALUES ('FRA_MN', 'GEOM', 
        MDSYS.SDO_DIM_ARRAY 
          (MDSYS.SDO_DIM_ELEMENT('X', -180.000000, 180.000000, 0.050), 
           MDSYS.SDO_DIM_ELEMENT('Y', -90.000000, 90.000000, 0.050)  
          ), 8307 
         ); 
    COMMIT;
    Table FRA_JC :
    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
     
    CREATE TABLE FRA_JC (
      ID         NUMBER(15), 
      FEATTYP    NUMBER(4), 
      JNCTTYP    NUMBER(1), 
      ELEV       NUMBER(2), 
      GEOM       MDSYS.SDO_GEOMETRY);
     
    DELETE FROM USER_SDO_GEOM_METADATA 
      WHERE TABLE_NAME = 'FRA_JC' AND COLUMN_NAME = 'GEOM' ;
     
    INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) 
      VALUES ('FRA_JC', 'GEOM', 
        MDSYS.SDO_DIM_ARRAY 
          (MDSYS.SDO_DIM_ELEMENT('X', -180.000000, 180.000000, 0.050), 
           MDSYS.SDO_DIM_ELEMENT('Y', -90.000000, 90.000000, 0.050)  
          ), 8307 
         ); 
    COMMIT;
    Ensuite, voici le script que je passe pour créer mes index sur ma clé primaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ALTER TABLE FRA_JC ADD CONSTRAINT PK_FRA_JC PRIMARY KEY (ID) USING INDEX TABLESPACE GIPSE_INDEX; 
    ALTER TABLE FRA_MN ADD CONSTRAINT PK_FRA_MN PRIMARY KEY (ID) USING INDEX TABLESPACE GIPSE_INDEX;
    Donc, jusque là, tout va bien, pas d'erreurs

    C'est ensuite que cela se gate.
    Maintenant, je veux créer un index avec une clé étrangère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE FRA_MN ADD CONSTRAINT FK_FRA_MN_FRA_JC FOREIGN KEY (JNCTID) REFERENCES FRA_JC;
    Alors, ceci fonctionne très bien, mais je n'ai pas spécifié mon tablespace pour les index

    Lorsque je fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE FRA_MN ADD CONSTRAINT FK_FRA_MN_FRA_JC FOREIGN KEY (JNCTID) REFERENCES FRA_JC USING INDEX TABLESPACE GIPSE_INDEX;
    par contre, celui là, ne fonctionne pas .
    Oracle rale à partir de l'instruction USING en disant :
    ORA-01735 : option ALTER TABLE non valide
    Alors, si quelqu'un à une idée de comment faire, je suis preneur ?
    A moins que cela ne soit pas possible à spécifier et qu'Oracle sait où créé l'index pour la clé étrangère en se basant sur les caractéristiques de la clé de primaire sur laquel il va travailler

    Merci d'avance pour votre aide
    Il y a de jeunes pilotes audacieux, il y a de vieux pilotes, mais il n'y a pas de vieux pilotes audacieux


  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    USING INDEX TABLESPACE ne s'applique qu'aux UK et PK qui crééent un index avec la contrainte contrairement à la FK qui ne crée pas automatiquement d'index

  3. #3
    Membre actif Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Points : 232
    Points
    232
    Par défaut
    Citation Envoyé par orafrance Voir le message
    USING INDEX TABLESPACE ne s'applique qu'aux UK et PK qui crééent un index avec la contrainte contrairement à la FK qui ne crée pas automatiquement d'index
    Super !!!

    Merci pour ta réponse orafrance
    Il y a de jeunes pilotes audacieux, il y a de vieux pilotes, mais il n'y a pas de vieux pilotes audacieux


  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    Alors il n'existe aucun moyen de mettre ses clefs étrangères dans un tablespace d'index ?

    Moi j'ai tenté d'utiliser le code suivant, mais cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    CREATE INDEX EMPL_CODE_EMPL_FK ON EMPLACEMENT (CODE_EMPLACEMENT ASC)
    / 
     
    ALTER TABLE EMPLACEMENT
        ADD (CONSTRAINT FK_EMPL_CODE_EMPL FOREIGN KEY  (CODE_EMPLACEMENT)
           REFERENCES TYPE_EMPL (CODE_EMPLACEMENT)  USING INDEX TABLESPACE TAM_NDX)
    /

    Si vous apercevez un peu de lumière ci-dessus, n'hesitez pas !!

  5. #5
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Une foreign key est une contrainte logique et ne crée pas d'index
    Il faut créer explicitement un index sur la colonne de la contrainte foreign key :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE INDEX INDX_EMPL_CODE_EMPLACEMENT ON EMPLACEMENT
    (CODE_EMPLACEMENT) TABLESPACE GIPSE_INDEX;
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    Ok ok merci beaucoup :p c'est plus clair désormais.

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

Discussions similaires

  1. Ajout de contraintes On Delete Cascade sur des foreign key
    Par weebo dans le forum Développement
    Réponses: 7
    Dernier message: 21/02/2011, 10h03
  2. [MySQL] Requete sur des tables avec des Foreign Keys.
    Par bruno7619 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/04/2009, 11h58
  3. [MySQL] Utilisation des Foreign Key
    Par Regnak dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/08/2006, 15h37
  4. Liste des foreign key des tables d'une base de données
    Par lalyly dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/05/2006, 11h25
  5. Liste des foreigns key non indexés
    Par soazig dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/05/2006, 17h50

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