OVH Cloud OVH Cloud

clé étrangère et NULL

2 réponses
Avatar
Greg
Bonjour =E0 tous(tes),

La question de M. Sobole m'a fait tilter sur un =E9l=E9ment qui ne m'avait
pas choqu=E9 outre mesure quand j'avais con=E7u une BD : est-ce que
l'utilisation d'un NULL comme cl=E9 =E9trang=E8re est dangereux ? Par
dangereux j'entends qui risque de produire des r=E9sultats erron=E9s lors de
s=E9lection, ajout et mise =E0 jour.

Pour pr=E9senter mon cas, j'ai une table 'consultations', une table
'patients' et une table 'traitements'. Chaque enregistrement de
'consultations' se rapporte =E0 un patient ('consultations.patient' est
une cl=E9 =E9trang=E8re dans la table), et les traitements se rapportent =
=E0 une
consultation (cl=E9 =E9trang=E8re 'traitements.consultation'). Or un
traitement peut avoir =E9t=E9 prescrit hors d'une consultation (cas d'une
prescription par un coll=E8gue, ou autom=E9dication).

Pour pallier =E0 ceci, j'ai pens=E9 rapporter chaque traitement =E0 un pati=
ent
et une consultation, avec la possibilit=E9 d'avoir NULL comme valeur de
'traitements.consultation', mais =E7a me g=E8ne un peu aux entournures. J'ai
bien pens=E9 cr=E9er une entr=E9e bidon dans la table 'consultations' qui
correspond au cas d'un traitement non prescrit, mais =E7a m'a d=E9rang=E9 t=
out
autant (voire plus).

Est-ce qu'il existe une mani=E8re =E9l=E9gante de faire ce genre de choses =
ou
dois-je utiliser un NULL comme valeur de cl=E9 =E9trang=E8re ?

Bonne journ=E9e,
Greg

2 réponses

Avatar
jpaulin

Est-ce qu'il existe une manière élégante de faire ce genre de choses ou
dois-je utiliser un NULL comme valeur de clé étrangère?



Je dis peut etre une betise, mais il me semble que tu veux creer une
relation m vers n, pour cela il faut passer par une table de relation (du
coup pas d'enregistrement avec NULL).

gg
Avatar
Greg
On Sun, 18 Jul 2004 19:00:07 +0200
"jpaulin" wrote:

Je dis peut etre une betise, mais il me semble que tu veux creer une
relation m vers n, pour cela il faut passer par une table de relation
(du coup pas d'enregistrement avec NULL).



En fait j'ai les rapports suivants entre mes tables :

patients (1,n) <---[vient à]---> (1,1) consultations
patients (0,n) <----[prend]----> (1,1) traitements
traitements(0,1) <---[prescrit]---> (0,n) consultations

Vu les cardinalités, je n'ai pas besoin d'une table de relations entre
'traitements' et 'consultations', mais je risque de me retrouver avec
des clés étrangères à NULL dans le cas d'un traitement prescrit hors
d'une consultation. Vu ma faible expérience dans le domaine des bases de
données, je me demande à quel genre d'anomalies je risque me retrouver
confronté, et comment faire pour les éviter (en repensant le schéma au
besoin).

a+,
Greg