Clé étrangères non renseignées

La question :

Bonjour

On trouve parfois cette recommandation qui consiste à éviter les
colonnes de clé étrangère pouvant contenir des NULL (au profit d'une
table d'association je suppose). Ici encore récemment.

Pourquoi ? Quels sont les avantages et inconvénients des deux
approches ?

Yliur

Poser votre question sur le forum Programmation

La réponse :

Yliur a écrit :



Bonjour

On trouve parfois cette recommandation qui consiste à éviter les
colonnes de clé étrangère pouvant contenir des NULL (au profit d'une
table d'association je suppose). Ici encore récemment.

Pourquoi ? Quels sont les avantages et inconvénients des deux
approches ?

Yliur


Bonjour,

Pour une table d'association, je suis d'accord, pour le reste non.
Je m'explique avec 3 exemples :

1-a) "Un employé peut avoir un seul responsable direct"
Ce qui se modélise par une table :
EMPLOYE(EMP_ID, EMP_NOM, EMP_ID_RESP)

La clé étrangère EMP_ID_RESP qui est réflexive peut être indéfinie (NULL).

1-b) "Un téléphone cellulaire est affecté à un seul employé"
Ce qui se modélise par 2 tables :
EMPLOYE(EMP_ID, EMP_NOM)
CELLULAIRE(CEL_ID, CEL_IMEI, EMP_ID_AFF)

La clé étrangère EMP_ID_AFF peut être indéfinie si le téléphone est en
stock et non attribué.

2) "Une personne peut posséder un ou plusieurs appartements"
Ce qui se modélise par 2 tables et 1 table d'association :
PERSONNE(PRS_ID, PRS_NOM)
APPARTEMENT(APT_ID, APT_INTITULE)
POSSEDE(PRS_ID, APT_ID)

Dans ce cas, il est aberrant d'avoir une des clés étrangères APT_ID ou
PRS_ID indéfinies. Dans le cas contraire, on aurait dans la table des
lignes de ce type : POSSEDE(5, NULL) ou POSSEDE(NULL, 10). La présence
de ces informations n'apporte rien à la base de données, si ce n'est
occuper de l'espace. La recommandation prend dans ce cas tout son sens.
--
Philippe.

Poser votre question sur le forum Programmation

Questions similaires :

[mySQL] Récupérer la liste des clés étrangères + contraintes

Bonjour tout le monde ! J'utilise sous mySQL 5.0 les vues suivantes : TABLE_CONSTRAINTS et KEY_COLUM_USAGE pour récupérer des informations sur les clés étrangères. Mais je n'arrive pas à trouver comment on peut récupérer les contraintes appliqués aux clé étrangères (CASCADE, SET NULL,...etc)....

Activer les clés étrangères

Bonjour à tous. J'utilise EasyPHP. J'ai une BDD sous MySQL. Je sais qu'il faut activer les clés étrangès en modifiant le fichier "config.inc.php". ça c'est fait .... -->(malgré un message dans ma BDD : " #1146 - La table 'phpmyadmin.pma_bookmarktable' n'existe pas ") Maintenant il me semble qu'il...

Activer Clés étrangères

Bonjour à tous. Je voudrais savoir comment gérer l'intégrité référentielle ? Merci