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 :

Contrainte FK et index de même nom


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Août 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Contrainte FK et index de même nom
    Bonjour,

    quelqu'un a t-il une explication sur le phénomène suivant ?

    J'ai une table avec une contrainte de type FK et un index sur cette même table. L'index et la contrainte ont le même nom : CONTRAINTE2.

    (vu le contexte, j'ai anonymisé les données )

    Je supprime la contrainte, puis l'index, sans aucun souci.

    Je ne peux pas re-créer l'index après la contrainte, car il me crache un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Erreur SQL : ORA-00955: ce nom d'objet existe déjà
    00955. 00000 -  "name is already used by an existing object"
    ci-joint, un reverse de la table obtenu avec Oracle SQL Developper.

    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
     
      CREATE TABLE "SCHEMA"."ATTRIBUT" 
       (	"CHAMP1" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
    	"CHAMP2" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
    	"CHAMP3" VARCHAR2(20 BYTE) NOT NULL ENABLE, 
    	"ORDRE" NUMBER(20,0) NOT NULL ENABLE, 
    	"LG_MAX" NUMBER(4,0) NOT NULL ENABLE, 
    	"LG_MIN" NUMBER(4,0), 
    	"B_OBLIG" NUMBER(1,0) NOT NULL ENABLE, 
    	"LIBELLE" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
    	 CONSTRAINT "PK_ATTRIBUT" PRIMARY KEY ("CHAMP1", "CHAMP2")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "TBS_I"  ENABLE, 
    	 CONSTRAINT "CONTRAINTE1" FOREIGN KEY ("CHAMP3")
    	  REFERENCES "SCHEMA"."TYP_OBJET" ("CDE") ENABLE, 
    	 CONSTRAINT "CONTRAINTE2" FOREIGN KEY ("CHAMP1")
    	  REFERENCES "SCHEMA"."TY_TYPO" ("NOM_TYPO") ENABLE
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
      STORAGE(INITIAL 131072 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "TBS_D" ;
     
     
      CREATE INDEX "SCHEMA"."CONTRAINTE2" ON "SCHEMA"."ATTRIBUT" ("CHAMP1") 
    	  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
    	  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    	  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
    	  TABLESPACE "TBS_I" ;

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je n'arrive pas à reproduire votre problème.
    Testé sur une 11gR2 :
    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
    create table t1
    (
      id_t1 number(5) not null
    , constraint pk_t1 primary key (id_t1) using index
    );
    -- Table created.
     
    insert into t1 (id_t1) values (1);
    -- 1 row(s) inserted.
     
    create table t2
    (
      id_t1 number(5) not null
    , constraint fk_t2_t1 foreign key (id_t1) references t1 (id_t1)
    );
    -- Table created.
     
    create index fk_t2_t1 on t2 (id_t1);
    -- Index created.
     
    insert into t2 (id_t1) values (1); -- 1 row(s) inserted.
    insert into t2 (id_t1) values (2); -- ORA-02291: integrity constraint (FK_T2_T1) violated - parent key not found
     
    alter table t2 drop constraint fk_t2_t1;
    -- Table altered.
     
    drop index fk_t2_t1;
    -- Index dropped.
     
    alter table t2 add constraint fk_t2_t1 foreign key (id_t1) references t1 (id_t1);
    -- Table altered.
     
    create index fk_t2_t1 on t2 (id_t1);
    -- Index created.

  3. #3
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Ceci fonctionne pour moi.
    Version :11.2.0.3

    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
     
    create table TYP_OBJET (CDE VARCHAR2(20 BYTE) primary key);
     
    create table TY_TYPO (NOM_TYPO VARCHAR2(20 BYTE) primary key);
     
     
    CREATE TABLE "ATTRIBUT" 
       (	"CHAMP1" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
    	"CHAMP2" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
    	"CHAMP3" VARCHAR2(20 BYTE) NOT NULL ENABLE, 
    	"ORDRE" NUMBER(20,0) NOT NULL ENABLE, 
    	"LG_MAX" NUMBER(4,0) NOT NULL ENABLE, 
    	"LG_MIN" NUMBER(4,0), 
    	"B_OBLIG" NUMBER(1,0) NOT NULL ENABLE, 
    	"LIBELLE" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
    	 CONSTRAINT "PK_ATTRIBUT" PRIMARY KEY ("CHAMP1", "CHAMP2")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
        ENABLE, 
    	 CONSTRAINT "CONTRAINTE1" FOREIGN KEY ("CHAMP3")
    	  REFERENCES TYP_OBJET ("CDE") ENABLE, 
    	 CONSTRAINT "CONTRAINTE2" FOREIGN KEY ("CHAMP1")
    	  REFERENCES TY_TYPO ("NOM_TYPO") ENABLE
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
      STORAGE(INITIAL 131072 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) ;
     
     
      CREATE INDEX "CONTRAINTE2" ON "ATTRIBUT" ("CHAMP1") 
    	  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
    	  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    	  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT);
    Quelle est votre version?
    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Bonjour,

    Est-ce que vous vous êtes posé une question sur l’utilité de cet indexe? Vous avez déjà un index sur la primary key (champ1, champ2). Pourquoi alors ajouter un autre indexe (champ1) déjà contenu dans le premier indexe? C’est un indexe redondant (FK et Indexe) . Quant à la menace de locks et deadlock introduite par la présence d’une FK non indexée dans un environnement OLTP, il est intéressant de rappeler que l’indexe de la clé primaire joue ICI dans ce cas parfaitement ce role. Nul besoin donc d’ajouter encore un autre indexe à votre table.

    Il arrive parfois, pour des raisons de clustering factor et donc de désirabilité de l’index par le CBO, que l’index (champ1) s’impose malgré la présence de l’index (champ1, champ2). Mais au stade où vous en êtes (implémentation du modèle de donnée je suppose) il est encore trop tôt pour penser à ce genre de situations.

    Edit : ajout de ICI dans ce cas
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  5. #5
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    Quant à la menace de locks et deadlock introduite par la présence d’une FK non indexée dans un environnement OLTP, il est intéressant de rappeler que l’indexe de la clé primaire joue parfaitement ce role. .
    Hello,

    Une collègue fréquentant ce forum a écrit un article interessant:

    http://blog.developpez.com/pachot/p1...les_etrangeres

    Bonne lecture
    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

Discussions similaires

  1. Interfaces avec le même nom
    Par myuils dans le forum Langage
    Réponses: 2
    Dernier message: 09/11/2004, 18h18
  2. deux champs ont le même nom
    Par mamouna dans le forum ASP
    Réponses: 5
    Dernier message: 01/07/2004, 13h55
  3. package ambiguïté pour des classes de même nom
    Par soad dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2004, 19h25
  4. ASP champs avec même nom
    Par pete007 dans le forum ASP
    Réponses: 8
    Dernier message: 03/05/2004, 22h58
  5. Réponses: 14
    Dernier message: 02/04/2004, 14h33

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