Re: clé étrangère et (modifier un type serial)

Lists: pgsql-fr-generale
From: BPascal <pascal62fr(at)free(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: clé étrangère et (modifier un type serial)
Date: 2008-10-17 08:46:00
Message-ID: 48F850C8.4060307@free.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

Bonjour,

J'ai remarqué qu'il est possible de modifier la valeur d'un identifiant
de type serial.

Peut-on le faire, évidemment il faut modifier les valeurs dans les
tables qui l'utilise comme clé externe.
J'ai des clés externes qui lie des tables mais je n'ai pas définie de
contrainte de clé étrangère.

Doit-on obligatoirement se contraindre à avoir une clé étrangère?

Cordialement
--
Pascal


From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: BPascal <pascal62fr(at)free(dot)fr>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: clé étrangère et (modifier un type serial)
Date: 2008-10-17 08:55:16
Message-ID: 48F852F4.3060301@lelarge.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

BPascal a écrit :
> Bonjour,
>
> J'ai remarqué qu'il est possible de modifier la valeur d'un identifiant
> de type serial.
>

Comme toute autre colonne, oui.

> Peut-on le faire, évidemment il faut modifier les valeurs dans les
> tables qui l'utilise comme clé externe.
> J'ai des clés externes qui lie des tables mais je n'ai pas définie de
> contrainte de clé étrangère.
>
> Doit-on obligatoirement se contraindre à avoir une clé étrangère?
>

Obligatoirement, non, sinon la base la créerait pour toi. Mais si tu
veux que les liens ne soient pas rompus, la création d'une clé étrangère
est une bonne chose. Regarde les différents modes. Ils permettent de
cascader la mise à jour ou la suppression, ça peut être intéressant.

--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com


From: François Figarola <francois(dot)figarola(at)i-consult(dot)fr>
To: BPascal <pascal62fr(at)free(dot)fr>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: clé étrangère et (modifier un type serial)
Date: 2008-10-17 09:07:36
Message-ID: 48F855D8.4020705@i-consult.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: Postg젠 토토SQL : Postg젠

BPascal a écrit :
> Bonjour,
>
> J'ai remarqué qu'il est possible de modifier la valeur d'un
> identifiant de type serial.
Comme pour les autres colonnes d'une table ...
>
> Peut-on le faire, évidemment il faut modifier les valeurs dans les
> tables qui l'utilise comme clé externe.
> J'ai des clés externes qui lie des tables mais je n'ai pas définie de
> contrainte de clé étrangère.
>
> Doit-on obligatoirement se contraindre à avoir une clé étrangère?
A priori, non.
Par contre, dans ce cas tu vas de priver des contrôles que peut faire ta
base de données,
c'est à dire, en premier lieu, de la vérification de l'intégrité
référentielle :
soit l'impossibilité de créer un enregistrement faisant référence à un
enregistrement de la table liée
qui n'existe pas !

Autre cas :
Je lie ma table1 à un enregistrement de ma table2... plus tard, je
supprime cet enregistrement
dans table2 => l'enregistrement de table1 pointe donc sur ... plus rien,
alors que si la contrainte
est positionnée, cette suppression pourra être interdite par la base.
Si j'ai une jointure (ou par ex. une vue) => l'enregistrement joint
disparait de celle-ci.
Si je tente d'accéder à l'enregistrement supprimé => c'est une erreur !

Enfin, la contrainte de clé étrangère te permet de gérer les évènements
en cascade par rapport
à cette clé, soit en cas de sa modification, ou lors de sa suppression.
=> tu peux y attacher une fonction de déclenchement (trigger) ou
subordonner la suppression de
l'enregistrement lié.

En conclusion, si c'est pas obligatoire, ça reste quand même bien
pratique (et puis c'est une des bases
du modèle relationnel) !
>
> Cordialement
François Figarola.

--
INTERNET CONSULT
Mas Guerido
6 rue Aristide Bergès
66330 CABESTANY

Tel 04.68.66.09.29
fax 04.68.66.99.50
* francois(dot)figarola(at)i-consult(dot)fr