Vous n'êtes pas identifié(e).
Pages : 1
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
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
damien clochard
http://dalibo.org | http://dalibo.com
Hors ligne
Merci pour les réponses.
Bonne fin de WE.
Cordialement. Gilles
Hors ligne
Pages : 1