PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 27/08/2011 13:02:40

Selzig
Membre

Indexation des champs

Bonjour,

Question 1 : Dans une table "familles" je voudrais savoir s'il est nécessaire/judicieux/redondant de créer un index [CREATE INDEX fm_siID_ik on familles (siID);]... alors que ce champ "siID" est déclaré comme clef étrangère dans le même fichier [CONSTRAINT sf_siID_exist FOREIGN KEY (siID) REFERENCES sites (xxID) ON DELETE CASCADE ON UPDATE CASCADE);] ?

Question 2 : Ce type de déclaration provoque une erreur :
CREATE TABLE familles1 (
  xxID char(20),
CONSTRAINT fm_xxID_pk PRIMARY KEY(xxID));
CREATE TABLE familles2 (
  xxID char(20),
CONSTRAINT fm_xxID_pk PRIMARY KEY(xxID));

Le nom de la PRIMARY KEY est dupliqué... et dans la BASE, il doit être unique. Autrement dit, on ne peut pas mettre plusieurs fois " fm_xxID_pk " dans plusieurs tables différentes d'une même base. (RQ : je n'ai pas essayé sur 2 bases différentes). Il faut donc nommer la première par exemple  fm_xxID_pk1 et la seconde  fm_xxID_pk2.

Mais si on écrit, 
CREATE TABLE familles1 (xxID char(20) PRIMARY KEY);
CREATE TABLE familles2 (xxID char(20) PRIMARY KEY);
cela passe sans problème. Cette écriture serait-elle alors conseillée par soucis de simplicité ? Et présente-t-elle des différences de fonctionnement avec la première écriture ?

Question 3 : Je suppose que dans tous les cas, lorsqu'on déclare une PRIMARY KEY, il est inutile de déclarer un INDEX sur le champ en question... Est-le cas ?

Merci. Cordialement.
Gilles

Dernière modification par Selzig (27/08/2011 15:07:05)

Hors ligne

#2 27/08/2011 14:24:14

daamien
damien clochard

Re : Indexation des champs

Réponse  1 : Non . PostgreSQL ne crée pas automatique un index sur les clefs étrangères.

Réponse  2 : "fm_xxID_pk" est le nom de la contrainte. Vous ne pouvez pas avoir deux contraintes portant le même nom. Dans votre deuxième exemple, vous ne précisez pas le nom de la contrainte et c'est donc PostgreSQL qui attribue un nom différent à chacune. Les deux écritures ont le même résultat final.

Réponse 3 : Oui

Hors ligne

#3 27/08/2011 15:05:19

Selzig
Membre

Re : Indexation des champs

Merci pour les réponses.

Bonne fin de WE.
Cordialement. Gilles

Hors ligne

Pied de page des forums